《4×5矩阵键盘驱动程序.docx》由会员分享,可在线阅读,更多相关《4×5矩阵键盘驱动程序.docx(5页珍藏版)》请在优知文库上搜索。
1、45矩阵键盘驱动程序一.工作原理及接口电路4X5矩阵键盘有4条列线,5条行线共20个按键。每个按键对应不同键值,键盘扫描采用外部中断扫描方式,本系统中键盘为无源结构,键盘工作时不依靠任何外部电源。4x5矩阵键盘结构图如图2-10所示。.I1.0图2-104x5矩阵键盘结构图1)4X5矩阵键盘结构及按键抖动消除当键盘中按键数量较多时为减少1/0口的占用,通常将按键排列成矩阵形式,如图2-12所示。在矩阵式键盘中,每条行线和列线在交叉处不直接连通,而是通过一个机械弹性开关加以连接。这样5条列线(R0-R4)和4条行线(L0L3)就可以构成20个按键的矩阵键盘。键盘采用了无源结构,工作是不依靠任何外
2、部电源。由于机械弹性开关的机械触点的弹性作用,一个按键开关在闭合时并不会马上稳定的闭合,在断开时也不会马上断开,因而机械开关在闭合及断开瞬间均伴有一连串的抖动,如图211所示。图2-11按键时的抖动抖动的时间长短由按键开关机械特性及按键的人为因素决定,一般为5ms20mso按键抖动如果处理不当会引起一次按键被误处理多次,所以消除抖动是必要的。消除抖动的有硬件处理和软件处理两种方法。当按键较多一般采用软件消抖方式。软件消抖原理为当检测出按键闭合后执行一个延时程序(产生5ms20ms的延时),待前沿抖动消失后再次检测按键的状态,如果按键仍保持闭合状态则可确认为有键按下。当检测到按键释放并执行延时程
3、序,待后沿抖动消失后才转入按键的处理程序。D矩阵键盘的工作原理从4x5矩阵键盘的4条列线和5条行线分别引出9条端线接于单片机的9个IO,由于键盘采用了无源结构所以行列线的电平由单片机I/O口的电平决定。进入按键处理程序后先使4条列线全为低电平,5条行线全为高电平,为读行线状态做准备,没有按键时这种状态不会被改变。当键盘上的某个按键闭合时,则该键所对应的行绩口列线被短路。例如:6号键被按下时列线L2与行线Rl被短路,此时行线Rl电平被列线L2拉低,由原来的高电平变为低电平而其它行线电平依然不变,为低电平。此时单片机可读得行线状态进而判断按键所在行并记录下行号。之后使得4条列线全为高电平,5条行线
4、全为低电平,为读列线状态做准备。同理6号键被按下时列线L2与行线RI被短路,此时列线L2电平被行线Rl拉低,由原来的高电平变为低电平而其它行线电平依然不变,为低电平。此时单片机可读得列线状态进而判断按键所在列并记录下列号。然后按一定的按键编码规则可计算出6号键的键值。2)键盘扫描方式键盘扫描方式一般有三种:循环扫描方式,定时扫描方式,外部中断扫描方式。循环扫描方式需要不停地扫描键盘,影响其它功能执行工作效率低。定时扫描方式是利用单片机内部的定时器,产生一个适当时间的定时中断,单片机响应中断时对键盘进行扫描取键值过程,但是这种扫描方式不管键盘上是不是有键闭合单片机总是定时地扫描工作效率还是不高。
5、外部中断扫描方式是只在键盘上有键闭合时才产生一个外部中断进入按键处理程序,这种方式工作效率明显提高。本系统中矩阵键盘扫描采用外部中断扫描方式。列线的五个电平信号经过或后接于外部中断信号输入口P3.3,当有任意一个按键按下时或门输出为低发生外部中断,进入按键处理程序。采用外部中断扫描方式的4x5矩阵键盘与单片机接口电路如图2-12所示。图2-12外部中断扫描方式的45矩阵键盘与单片机接口电路二.驱动程序分析4x5矩阵键盘采用外部中断扫描方式,有键按下作为一个中断源。当键盘上有任何一个按键按下时将触发外部中断1(/INTi),主机转入中断处理程序(矩阵键盘驱动函数)扫描键盘识别被按下的键。4x5矩
6、阵键盘驱动函数代码如下:ucharkey;voidintl()interrupt2(ucharrj,temp;EA=0;禁止所有中断Pl=OXf0;拉高彳谈P3.2=l;temp=P18iOxfO;temp=4;取高四位temp=-temp;temp&=OxOf;if(P3.2=0)keydelay;软件防抖动if(P3.2=O)temp=16;)if(temp!=0)keydelay(l);if(temp!=0)SWitCh(temp)识别按下的按键的行号case 1: l=O;break;case 2: l=l;break;case4:l=2;break;case8:l=3;break;c
7、ase16:l=4;break;Pl=OxOf;P3_2=0;行线全拉低temp=P18i00f;temp=temp;temp&=OXOf;取低四位if(temp!=O)(keydelay(l);if(temp!=O)SWitCh(temp)识别识别按下的按键的列号(case 1: r=O;break;case 2: r=l;break;case4:r=2;break;case8:r=3;break;)key=4*1+r;/傲键值)Pl=OxfO;P3_2=l;拉高所有行线,准备键盘下次扫描EA=I;开放中断)值得注意的是应在系统上电初始化中将所有的行线拉高,这样才能在第一次按键时才能使得有键按下成为一个中断源。45矩阵键盘驱动程序各函数包含于头文件keyboard2.h中,在主函数中加入宏定义#沿(:11110丫130202.卜。