1. 键盘输入特点
键盘上的一个按键实质就是一个按钮开关。图8.2(a)所示按键开关的两端分别连接在行线和列线上,列线接地,行线通过电阻接到+5 V上。键盘开关机械触点的断开、闭合,其行线电压输出波形如图8.2(b)所示。
图8.2(b)所示的t1和t3分别为键的闭合和断开过程中的抖动期(呈现一串负脉冲),抖动时间长短与开关机械特性有关,一般为5~10 ms,t2为稳定的闭合期,其时间由按键动作确定,一般为十分之几秒到几秒,t0、t4为断开期。
图8.2 键盘开关及其行线波形
2. 按键的识别
按键闭合与否,反应在行线输出电压上就是高电平或低电平,对行线电平高低状态检测,便可确认按键是否按下与松开。为了确保单片机对一次按键动作只确认一次按键有效,必须消除抖动期t1和t3的影响。
3. 消除按键的抖动
消除按键的抖动有两种方法。一种是用软件延时来消除按键抖动,其基本思想为:在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10 ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10 ms的子程序后,检测该行线为高电平,说明按键确实已经松开。另一种去除按键抖动的方法是采用专用的键盘/显示器接口芯片,这类芯片中都有自动去抖动的硬件电路。
4. 键盘的分类
键盘主要分为两类:非编码键盘和编码键盘。
非编码键盘是利用按键直接与单片机相连接而成,常用在按键数量较少的场合。该类键盘系统功能比较简单,需要处理任务较少,成本低,电路设计简单,按下键号的信息通过软件来获取。非编码键盘常见的有独立式键盘和矩阵式键盘两种结构。
5. 独立式键盘接口设计
独立式键盘特点:各键相互独立,每个按键各接一条I/O口线,通过检测I/O输入线的电平状态,易判断哪个按键被按下。
图8.3所示为一独立式键盘,8个按键k0~k7分别接到单片机的P1.0~P1.7引脚上,图中上拉电阻在按键未按下时,用来保证对应I/O口线为稳定高电平。当某一按键按下时,对应I/O口线就变成低电平,与其他按键相连的I/O口线仍为高电平。
因此,只需读入I/O口线状态,判别是否为低电平,就很容易识别出哪个键被按下。可见独立式键盘优点是电路简单,各条检测线独立,识别按键号的软件编写简单。独立式键盘适于按键数目较少场合,如按键数目较多,要占用较多I/O口线。(www.xing528.com)
图8.3 独立式键盘的接口电路
6. 矩阵式键盘接口设计
矩阵式(也称行列式)键盘用于按键数目较多的场合,由行线和列线组成,按键位于行、列交叉点上。如图8.4所示,一个4×4的行、列结构可以构成一个16个按键的键盘,只需要一个8位的并行I/O口即可。
如果采用8×8的行、列结构,可以构成一个64个按键的键盘,只需要两个并行I/O口即可。
在按键数目较多场合,矩阵式键盘要比独立式键盘节省较多I/O口线。
在图8.4中,行线通过上拉电阻接+5 V,当无键按下时,行线为高电平,而有键按下时,则对应的行线和列线短接,行线电平状态将由与此行线相连的列线电平决定。
图8.4 矩阵式(行列式)键盘的接口电路
键盘矩阵中无按键按下时,行线处于高电平状态;当有按键按下时,行线电平状态将由与此行线相连的列线的电平决定。列线的电平如果为低,则行线电平为低;列线的电平如果为高,则行线的电平也为高,这一点是识别矩阵式键盘是否有按键按下的关键所在。由于矩阵式键盘中行、列线为多键共用,各按键均影响该键所在行和列的电平,因此各按键彼此将相互发生影响,所以必须将行、列线信号相配合才能确定闭合键的位置。下面讨论矩阵式键盘按键扫描法的工作原理。
识别矩阵键盘有无键被按下,可分两步进行:第一步,首先识别键盘有无键按下;第二步,如有键被按下,识别出具体的键号。
下面以图8.4所示的K3键被按下为例,说明扫描法识别此键的过程。
第一步:识别键盘有无键按下。首先把所有列线均置为0电平,然后检查各行线电平是否都为高电平,如果不全为高电平,说明有键按下,否则说明无键被按下。例如,当K3键按下时,第1行线电平为低电平,但还不能确定是否K3被按下,因为如果同一行的K2、K1或K0之一被按下,行线也为低电平。所以,只能得出第1行有键被按下的结论。
第二步:识别出哪个按键被按下。采用逐行扫描法,在某一时刻只让一条列线处于低电平,其余所有列线处于高电平。当第1列为低电平、其余各列为高电平时,因为是K3被按下,所以第1行的行线仍处于高电平状态;而当第2列为低电平、其余各列为高电平时,同样也会发现第1行的行线仍处于高电平状态;直到让第4列为低电平、其余各列为高电平时,此时第1行的行线电平变为低电平,据此可判断第1行第4列交叉点处的按键,即K3被按下。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。