键盘一般由若干个按键组合成开关矩阵,按照其接线方式的不同可分为两种,一种是独立式接法,一种是矩阵式接法。
独立式按键结构独立式按键是指直接用I/O口线构成的单个按键电路。由于每个键都单独占用一根线,所以每根I/O口线上按键的工作状态不会影响其他I/O口线的工作状态。独立式按键可直接由单片机的I/O口接入,也可由扩展I/O口接入。系统中若按键数量较少,而I/O线较多,可采用独立式连接方式,硬件、软件均简单,容易实现,因此被广泛应用于单片机系统中。独立式键盘是由若干个机械触点开关构成的,将其与单片机的I/O口线连起来,通过读I/O口的电平状态即可识别出相应的按键是否被按下。如图8-1所示为独立式按键的电路图。
图8-1 独立式按键的电路图
如果按键不被按下,其端口就为高电平,如果相应的按键被按下,则端口变为低电平,在这种键盘的连接方法中,通常采用下拉电平接法,即各按键开关一端接低电平,另一端接单片机I/O口线,这是为了保证在按键断开时,各I/O口线有确定的高电平。通常用来做键盘的按键有触点式和非触点式两种,单片机中应用的一般是由机械触点构成的触点式微动开关,这种开关具有结构简单、使用可靠的优点,但当按下按键或释放按键时有一个特点,就是会产生抖动,这种抖动人是感觉不到的,但单片机完全可以感应到,因为单片机处理的速度是在微秒级的,而机械抖动的时间至少是毫秒级,对单片机而言这是一个很漫长的过程。
矩阵式键盘结构所谓矩阵式键盘,即当键盘中按键数量较多时,为了减少I/O口线的占用,通常将按键排列成矩阵形式,如图8-2所示,在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键连接,这样做的好处是一个并行口可以构成4×4=16个按键,比直接将端口线用于键盘多出了一倍的按键,而且线数越多,区别越明显,例如,再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一个键(9键),由此可见,在需要的按键数量比较多时,采用矩阵法连接键盘是非常合理的。
图8-2 矩阵式键盘结构
矩阵式结构的键盘比独立式键盘复杂一些,识别也要复杂一些,图8-2中列线通过电阻接电源,并将行线所接的单片机4个I/O口作为输出端,而列线所接的I/O口则作为输入端。这样,当按键没有被按下时,所有的输出端都是高电平,代表无键按下,行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样通过读入输入线的状态就可得知是否有键按下,具体的识别及编程方法如下所述。
确定矩阵式键盘上任何一个键被按下通常采用行扫描法或者行反转法,行扫描法又称为逐行或列扫描查询法,是一种最常用的多按键识别方法,行反转法不是经常使用,但是在某些特殊场合下也比较适合,在这里仅以行扫描法为例介绍矩阵式键盘的工作原理,行反转法不作详细介绍,感兴趣的读者请自行查阅相关资料。行扫描法的具体任务如下:
(1)判断键盘中有无键按下
如图8-2所示,将全部行线X0~X3置低电平,然后检测列线Y0~Y3的状态,只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中,若所有列线均为高电平,则表示键盘中无键按下。
(2)判断闭合键所在的位置
在确认有键按下后,即可进入确定具体闭合键的过程,其方法是依次将行线置为低电平(即在置某根行线为低电平时,其他线为高电平),当确定某根行线为低电平后,再逐行检测各列线的电平状态,若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。