这款新型的矩阵键盘电路,把传统的矩阵键盘与单片机的中断结合起来,提高了按键输入的响应,同时利用数码管作为显示终端,显示输入的按键值。
原理简介
普通的4X4矩阵键盘接口原理图如下图所示,可以控制16按键的输入。为了读者更好的理解消化,这里再将矩阵键盘的扫描原理做一下简单介绍,电路上用单片机的PO口高四位控制键盘的行扫描,低四位控制列扫描。行线通过上拉电阻接到+5V上,无按键时,行线处于高电平状态;有键按下,行线电平状态将由与此行线相连的列线电平决定。列线电平为低,则行线电平为低;列线电平为高,则行线电平为高。
举例说明,首先送扫描码“PO:Oxfe”,即PO:1111-1110,如图1,首先扫描第四列(POO -列),高四位设置成高电平。此时,如果第四行与第四列交叉的按键被按下,即“0”按键按下,则PO=0111_1110,因为当这个按键被按下之后,第四行被第四列的扫描码电平短路,导致读取的P07位被拉低到低电平。这就是矩阵键盘的扫描原理,如果扫描第四列的时候,对应的行没有按键,就继续扫描第三列(“Oxfd”),直到找到按下的按键为止。
单片机系统中,键盘和显示通常都是作为人机接口部分,因此,这部分的相应时间要求很高,即按下按键之后,马上就要求单片机进行相应的处理,普通情况的矩阵按键电路,需要不停的扫描按键的状态,不仅浪费系统CPU的资源,而且一旦在扫描周期之外,有按键按下,系统将检测不到此时的按键输入,实时性效果不好。如下图所示,系统周期T分为Tl键盘检测周期和T2其他程序周期,如果在其他程序周期内,有按键按下的话,系统将检测不到此时的按键。
下图为中断式键盘的输入原理,在整个程序周期T内任何时刻,如果有按键按下,将会产生一个中断输出,从而进入到中断服务程序执行优先级更高的按键扫描任务,读取键值之后,可以根据返回值做不同的处理,与上图相比,提高系统的按键响应时间,实时性效果更佳。
电路图详解
此矩阵键盘,在传统的矩阵键盘的输出端加了一个四输入与门芯片74HC21,,芯片管脚图如下左图所示,真值表如下右图所示。当A、B、C、D四路输入有一个为低电平的时候,输出为低电平。将74HC21的输出端接到单片机的0中断P32管脚上,这样在有任何一个按键按下的情况下,系统都会进入中断服务程序,提高了键盘响应时间,在系统实时性要求较高的情况下非常实用。上图为中断式矩阵键盘原理图。
(1)外部中断0的中断服务程序
(3)置标志位为1
(5)读取按键值子程序
(7)定义程序中使用的变量
(8)变量预置初值,准备扫描按键
(9)循环扫描4次,逐行扫描
(11)PO端口附变量的值
(12)、(13)延时一段时间
(14)判断是否有按键按下
(16)如果有按键按下,读取PO口按键的状态
(17)跳出扫描循环,已经读取到按键值
(19)如果当前行没有按键按下,循环左移一位,扫描下一行
(20)key变量赋值Oxff,为读取PO口做准备
(22)扫描结束后,循环16次查表比较读取的按键的对应码值
(23)如果找到对应的码值
(24)返回当前读取的按键值
(25)否则,返回一个错误码值,提示出错
主程序流程图如下图所示。
调试过程及要点
首先,接好硬件设备,将开发板通过串口线连接到电脑端,接好USB电源线或者直流Sv电源线。之后打开下载软件,选择生成的key. hex文件,进行下载(注意冷启动,先点击下载,之后再给单片机系统上电)。程序下载之后,可以按下开发板上的4X4按键中的任意一个,并注意观察数码管上的显示。
采用四输入与门芯片74HC21与单片机的中断相连,大大地提高了系统的键盘输入响应时间,在一些对系统的实时性要求较高的场合有很好的应用。