单片机读入4*4矩阵键盘

发布者:Huayu8888最新更新时间:2018-06-22 来源: eefocus关键字:单片机  4*4矩阵键盘 手机看文章 扫描二维码
随时随地手机看文章

一、什么是矩阵键盘
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组,由于电路设计时需要更多的外部输入,单独的控制一个按键需要浪费很多的IO资源,所以就有了矩阵键盘,常用的矩阵键盘有4*4和8*8,其中用的最多的是4*4。
网上搜了两张实物图,大家可以看看



看上图就知道,4*4键盘还是很多地方用到的吧^_^

二、矩阵键盘的原理
矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。
在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4×4个。
这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。由于单片机IO端口具
有线与的功能,因此当任意一个按键按下时,行和列都有一根线被线与,通过运算就可以
得出按键的坐标从而判断按键键值。

原理如同矩阵数列的行列式



三、驱动电路图

按4*4矩阵搭建的按键矩阵还是比较简单的,也有的人为了保证电路的稳定性,加上二极管保护和上拉电阻,但是一般要求不太高的电路就不需要加了,向下面设置的电路那样就可以


四、软件程序设计

根据4*4键盘的原理软件设计程序如下:

//***************************************************  

//函数功能:  

//单片机驱动4*4键盘,读入键盘值并使用数码管静态  

//显示按键键值,若没有数码管用8421码显示LED灯也可以的  

//读入原理:先令单片机端口输出11110000读一次,然后  

//再令单片机输出00001111读一次把两次的值相加,最后  

//获取一个高位和低位分别有0的值即可判断键值,  

//如11101110  

//***************************************************  

#include  

#define uchar unsigned char   

#define uint unsigned int   

  

unsigned char code smg_d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  

  

//************************************************  

//延时函数,在12MHz的晶振频率下  

//大约50us的延时  

//************************************************  

void delay_50us(uint t)  

{  

 uchar j;  

 for(;t>0;t--)  

        for(j=19;j>0;j--);  

}  

  

void main()  

{  

 uchar key_l,key_h;  

 uchar key;  

 while(1)  

 {  

 P1=0xf0;  

 key_l=P1;          //读P1端口的值  

 key_l=key_l&0xf0;  //令低4位置位为0  

 if(key_l!=0xf0)    //判断是否有按键按下  

 {  

  delay_50us(100);  

  if(key_l!=0xf0)  

  {                 //若有按键按下,则切换高低4位判断键值  

   key_l=P1&0xf0;   //11100000  获取第一次键值  

   key_l=key_l|0x0f;//11101111     

   P1=key_l;        //反过来再读一次,由于人手按下按键的时间虽然短暂,但是  

   key_h=P1;        //对于单片机来说,已经足够长,因此可以正反读取两次值  

   key_h=key_h&0x0f;//00001110  

   key_l=key_l&0xf0;//11100000  

   key=key_h+key_l; //11101110  

  }  

 }  

 switch (key)  

 {  

  case 0xee:P2=smg_d[0];break;  

  case 0xde:P2=smg_d[1];break;  

  case 0xbe:P2=smg_d[2];break;  

  case 0x7e:P2=smg_d[3];break;  

  case 0xed:P2=smg_d[4];break;  

  case 0xdd:P2=smg_d[5];break;  

  case 0xbd:P2=smg_d[6];break;  

  case 0x7d:P2=smg_d[7];break;  

  case 0xeb:P2=smg_d[8];break;  

  case 0xdb:P2=smg_d[9];break;  

  case 0xbb:P2=smg_d[10];break;  

  case 0x7b:P2=smg_d[11];break;  

  case 0xe7:P2=smg_d[12];break;  

  case 0xd7:P2=smg_d[13];break;  

  case 0xb7:P2=smg_d[14];break;  

  case 0x77:P2=smg_d[15];break;  

 }  

 }  

}  


关键字:单片机  4*4矩阵键盘 引用地址:单片机读入4*4矩阵键盘

上一篇:矩阵键盘扫描原理详解——单片机
下一篇:msp430 PWM周期计算

推荐阅读最新更新时间:2024-03-16 16:06

ST推出STM32F0超值系列新款微控制器
中国,2015年2月5日 意法半导体 (STMicroelectronics,简称ST;纽约证券交易所代码:STM) 全面升级STM32F0超值系列 ARM Cortex -M0微控制器的功能。为了加大对成本敏感的消费电子、智能电表、通信网关和物联网等应用的支持,新产品增加了USB接口,并加大了闪存容量。 此次共推出6款新产品,目标应用锁定8位和16位微控制器市场。这些新产品扩大了开发人员的设计灵活性,可通过同一个微控制器架构满足各种需求,更加快速高效地推出新产品。STM32微控制器拥有600余款产品,搭载各种不同的ARM Cortex-M处理器内核,为开发人员提供广泛的开发支持,新产品的推出进一步降低了ST
[单片机]
ST推出STM32F0超值系列新款<font color='red'>微控制器</font>
基于单片机的两点间温度控制
  以温度作为被控制量的反馈控制系统。在化工、石油、冶金等生产过程的物理过程和化学反应中,温度往往是一个很重要的量,需要准确地加以控制。除了这些部门之外,温度控制系统还广泛应用于其他领域,是用途很广的一类工业控制系统。温度控制系统常用来保持温度恒定或者使温度按照某种规定的程序变化。   严格说,多数温度控制系统中被控对象在进行热交换时的温度变化过程,既是一个时间过程,也是沿空间的一个传播过程,需要用偏微分方程来描述各点温度变化的规律。因此温度控制系统本质上是一个分布参数系统。分布参数系统的分析和设计理论还很不成熟,而且往往过于复杂而难于在工程实际问题中应用。解决的途径有二:一是把温度控制系统作为时滞系统来考虑。时滞较大时采用时滞
[单片机]
基于<font color='red'>单片机</font>的两点间温度控制
单片机电磁兼容性的处理方法解析
对于新手来说,在单片机的电路设计中可能不会很注意电路设计中电磁干扰对设计本身的输入输出的影响,但是对于一个电子工程师来说其中的厉害关系就不言而喻了,它不仅关系了单片机在控制在中的能力和准确度,还关系到企业在行业中的竞争。 对电磁干扰的设计我们主要从硬件和软件方面进行设计处理,下面就是从单片机的PCB设计到软件处理方面来介绍对电磁兼容性的处理。 一、影响EMC的因数 1.电压 电源电压越高,意味着电压振幅越大,发射就更多,而低电源电压影响敏感度。 2.频率 高频产生更多的发射,周期性信号产生更多的发射。在高频单片机系统中,当器件开关时产生电流尖峰信号;在模拟系统中,当负载电流变化时产生电流尖峰信号。 3.接地 在所有EMC题
[单片机]
<font color='red'>单片机</font>电磁兼容性的处理方法解析
采用8位微控制器实现无传感器磁场定向控制
   导言   由于具有更高的效率、更好的动态响应以及更小的扭矩波动,磁场定向控制(FOC)正越来越多地被应用于消费和工业电机中。采用英飞凌8位微控制器XC886和XC888实现无传感器FOC技术(当输出15kHz PWM载频和133ms电流控制响应时间时)只需要占用58%的CPU负荷,就足以满足特定功能应用的需求。经过高度优化的PWM单元CAPCOM6E能触发模数转换器来测量单直流母线电阻上的电流,为能在标准的8位微控制器上实现无传感器FOC创造了条件。16位无传感器FOC算法仅由片上内嵌的协处理器MDU和CORDIC(矢量计算机)以及8051兼容CPU的联合应用就可以实现。MDU是一个16位乘法和除法单元,CORDIC是一个专
[单片机]
采用8位<font color='red'>微控制器</font>实现无传感器磁场定向控制
基于MSP430单片机的液晶LCD048应用程序
TI公司MSP430系列单片机是一种超低功耗的混合信号控制器,其中包括一系列器件,它们针对不用的应用由不同的模块组成。其中FLASH系列使高效电子系统变得轻巧,FLASH存储器也具有很强的灵活性。同时为了在低频率振荡器的驱动下得到较高的稳定频率,某些MSP430器件上使用了锁频技术FLL或增强型锁频环技术FLL+。如MSP430F425的时钟模块中使用了FLL+技术,这样可以得到稳定的频率。 液晶驱动 MSP430器件上的液晶显示器的控制/驱动将简化液晶显示器的显示。不同型号的液晶驱动能力不同,我们采用 MSP430的F42X系列,有128段驱动能力。 液晶的驱动有4种方法:静态,2MUX或1/2占空比,3MUX或1/3占空比
[单片机]
基于MSP430<font color='red'>单片机</font>的液晶LCD048应用程序
单片机实现的脉冲编码传感器
引 言   随着社会的发展,出租车成为人们生活中非常方便且较普遍的交通工具,但出租车计价器却相对较为落后。在过去,出租车采用机械式计价器,用齿轮比的方式来计算出租车所跑的里程数,并由里程数来换算车费。但是机械齿轮体积较大,计算不是很准确,而且容易磨损。后来又采用了传感器方式,利用传感器接收车的跑动信息,从而计算里程数和车费。但此方法通常使干扰信号也能产生计数脉冲,所以也不完善。笔者引用单片机技术,使用编码和解码信息传递方式来完成计价器计数脉冲的形成。单片机可以很精确的检测到传感器信号,这样计价就会非常准确。完成此装置所需器件简单,成本非常低,技术上也容易实现。 1 系统原理   系统框图如图1所示,本文主要介绍虚线框内模块的设计
[单片机]
PIC单片机之关于超大数组问题
关于超大数组问题: 本实验用的编译器是xc16-gcc.exe,集成开发环境是MPLAB IDE v8.92,当前的编译器配置如下: -g -Wall -mlarge-code -mlarge-data -Os -fno-ivopts 如下图: 其中这里有一个超大的数组: 这时候编译会有这样的一个错误: 从提示可以知道,这是一个数据超出的错误,但是这里是超出了数据段,而不是说超出了芯片的flash,我们可以这样查看是否超过了flash,去掉这个数组编译看看占用了多少flash,如下: 也就是说占用的flash空间是:81459+7674=89133,但是单片机的flash却是这样的: 所以即是加上
[单片机]
PIC<font color='red'>单片机</font>之关于超大数组问题
基于ARM Cortex-A8 MCU的双屏异像显示应用
就ARM内核的芯片来说,在其内核达到Cotex-A8级别,GPU达到1080P级别的时候,实现同步双显已经相对比较轻松,具有非常好的用户体验。目前已经基本上成为高端智能手机或者平板电脑的标配。 随着ARM Cotex-A8与Android的组合越来越强大,其从智能移动终端如智能手机,平板电脑等消费电子领域渗透到各行各业的趋势愈发明显。但受制于芯片体系结构和操作系统构架的设计,在Android平台上通常只能实现同步双屏的一些应用,如下图基于智能手机的显示器应用或者基于平板电脑的投影仪应用: 手机接HDMI电视机 平板电脑接VGA投影仪 在这样的应用中,大屏主要作为小屏的延伸,其目的是让视频或显示界面的可视区域变大,以便让观看的
[电源管理]
基于ARM Cortex-A8 <font color='red'>MCU</font>的双屏异像显示应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved