1
电子常识
矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵键盘的用途很广,比如:计算器,遥控器,触摸屏ID产品,银行的提钱机,密码输入器。
当键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。故在需要的键数比较多时,采用矩阵法来做键盘是更合理的方案。
以51单片机为例,矩阵键盘接于P2口。在图1中可以看出,用了8个I/O口,实现了16个按键的识别。很明显在按键数目较多的应用场合,矩阵式键盘形式与独立键盘形式相比较,可以节省很多的I/O口资源。
键盘在实际应用过程中,按键的闭合和断开过程中会产生抖动过程,其抖动的时间长短和开关的机械特性密切有关,一般为5~10ms。由于抖动过程的存在,对单片机识别按键是一种干扰。这时我们要想办法消除按键的抖动,常用的消抖方法有两种:一种是软件消抖,其基本思路如下:单片机在第一次检测到有按键按下时,比如说该按键所对应的信号线为低电平,执行一段延时10ms的程序以后,确认该信号线的电平状态是否仍为低电平,如果确认其信号线的电平状态为低电平,则确认该信号线有按键按下。当按键松开时,信号线的电平状态由低电平变为高电平,执行一段延时10ms的程序以后,检测该信号线电平状态为高电平,则说明松开按键。此方法利用软件延时的方法躲过了按键的抖动期,实现了按键消抖的目的。还有一种按键消抖的方法就是在按键的两侧并联一瓷片电容。该瓷片电容可以平滑按键抖动时的电平波形。其电路原理图如图2所示。
在单片机实际应用工程中,常用C语言编程,下面列出一段按键识别程序的实际应用例程。
voidkey_scan(void)
{
Temp1=0;//8位无符号变量
P2=0xF0;//列为高电平行为低电平
delay_ms(5);//按键消抖延时
Temp1=P2;//读P2口
Temp1=Temp1&0xF0;//屏蔽低四位
Temp1=~((Temp1》》4)|0xF0);
if(Temp1==1)//P2.4被拉低
key=1;
elseif(Temp1==2)//P2.5被拉低
key=2;
elseif(Temp1==4)//P2.6被拉低
key=3;
elseif(Temp1==8)//P2.7被拉低
key=4;
else
key=16;
P2=0x0F;//行为高电平列为低电平
delay_ms(5);//按键消抖延时时间
Temp1=P2;//读P2口
Temp1=Temp1&0x0F;
Temp1=~(Temp1|0xF0);
if(Temp1==1)//P2.0被拉低
key=key+0;
elseif(Temp1==2)//P2.1被拉低
key=key+4;
elseif(Temp1==4)//P2.2被拉低
key=key+8;
elseif(Temp1==8)//P2.3被拉低
key=key+12;
else
key=16;//全部按键均可识别
}
全部0条评论
快来发表一下你的评论吧 !