键盘是最常见的计算机输入设备,广泛应用于微型计算机和各种终端设备上。在单片机应用方面也十分普遍,可以使用键盘向单片机输入各种指令、数据,从而指挥单片机的工作。操作者还可以很方便地利用键盘和显示器与单片机对话,对程序进行修改、编辑,控制和观察单片机的运行。
4.3.5.1 按键在单片机中的应用
按照按键结构原理可分为两类:一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点开关按键,如电气式按键、磁感应按键等。
在单片机应用系统中,通过按键实现控制功能和数据输入是非常普遍的。在所需按键数量不多时,系统常采用独立式按键。独立式按键是指每个按键单独占有一根I/O口线,且其工作状态不会影响其他I/O口线的工作状态。这种按键的电路配置灵活,软件结构简单。不过在实际应用中,由于不同的系统对按键的要求不同。因此,对按键程序的设计要考虑全面,以便更好地完成按键所设定的功能。
在按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图4-33所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样一个端口(如P1口)就可以构成4×4=16个按键,比直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出1键(共9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些。图4-33中,列线与行线通过按键连接。假如将行线所接单片机的I/O口置高电平,作为输入端;将列线所接I/O口置低电平,作为输出端。当按键没有按下时,所有行线都是高电平,所有列线都是低电平。一旦有按键按下,则对应的行线输入端就会被拉低变成低电平,通过读入行线的状态就可得知是否有键按下了。
图4-33 矩阵键盘原理
4.3.5.2 矩阵式键盘的按键识别方法
键盘的识别方法很多,根据不同的按键接法又有不同的识别方法。这里介绍一种普遍使用的键盘识别方法——行扫描法。
行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。图4-33所示的键盘扫描过程如下:
1)判断键盘中有无键按下。将全部行线Y0~Y3置低电平,列线Y4~Y7置高电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘该列有一个或多个按键被接下。若所有列线均为高电平,则键盘中无键按下。(www.daowen.com)
2)判断闭合键所在的位置。在确认有键按下后即可进入确定具体闭合键的位置,方法是:将全部行线YO~Y3置高电平,列线Y4~Y7置低电平,然后检测行线的状态,结合两次检测到的Y0~Y7的电平变化便可以判断被按下按键的位置。
3)去抖动。为了保证按键每闭合一次CPU仅做一次处理,则必须去除按键按下和释放过程中的抖动影响。
例4-5 利用行扫描法检测按键。
代码如下:
4.3.5.3按键去抖动
由于按键是利用机械触点的开、合作用进行工作的,因此,按键的按下与抬起一般都会有5~10ms的抖动毛刺存在,其抖动过程如图4-34所示。为了获取稳定的按键信息必须去除抖动影响,这也就是按键处理的重要环节。去抖动的方法有硬件、软件两种。这里均采用软件去抖的方法,即在检测到有按键按下时,执行一个延时程序后再次进行确认该按键电平是否保持闭合状态电平。如果保持闭合状态电平,则可以确定为真正按键按下状态。虽然此法耗费时间,但对于那些对实时要求不是很高的系统,这不失为一种好的方法。
图4-34 按键触电的机械抖动
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。