矩阵式键盘的工作原理

二、矩阵式键盘的工作原理

(一)键盘扫描原理

键盘扫描的工作过程如下:

(1)判断键盘中是否有键按下。

(2)进行行扫描,判断是哪一个键按下,若有键按下,则调用延时子程序去抖动。

(3)读取按键的位置码。

(4)将按键的位置码转换为键值(键的顺序号)0、1、2、…、F。图7-6为4×4键盘行扫描法流程图。

下面以如图7-6所示的4×4键盘为例,说明行扫描法识别按键的工作原理。

图7-6 4×4键盘扫描流程图

首先判别键盘中有无键按下。方法是:向行线(图中水平线)输出全扫描字00H,把全部行线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,则总会有一根列线电平被拉至低电平,从而使列输入不全为1。

接着采用行(列)扫描法判断键盘中哪一个键被按下。方法是:依次给行线送低电平,然后查所有列线状态,如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。具体如下:

(1)将第0行变为低电平,其余行为高电平时,输出行扫描字为1110。然后读取列的电平,判别第0行是否有键按下。在第0行上若有某一按键按下,相应的列被拉到低电平,则表示第0行和此列相交的位置上有按键按下;若每一条列线都不为低电平,则说明0行上无键按下。

(2)改变行扫描字,逐一判断其他行有无按键按下,依此类推。

在扫描过程中,当发现某行有键按下,也就是输入的列线中有一位为0时,便可根据行线位置和列线位置就能判断按键在矩阵中的位置,从而知道是哪一个键按下。例如图7-6中,如果扫描第2行即P1.2对应的行时,若读出第2列即P1.6引脚的电平是低电平,则可以求得该按键的键值A=8+2,其中8为扫描行的首键号,2为列号。

下面以图7-6所示的4×4键盘为例,给出键盘扫描子程序。

(二)单片机对非编码键盘的控制

在复杂的单片机应用系统中,按键识别只是键盘程序设计的内容之一。CPU在忙于处理各项工作任务时,如何响应键盘的输入,由键盘的工作方式决定。键盘的工作方式应根据实际应用系统中CPU工作的状况而定。其选取的原则是既保证CPU能及时响应按键操作,又不会多占用CPU的工作时间。

键盘的工作方式主要有以下三种。

1.程序控制方式

程序控制方式是利用CPU在完成其他工作后的空余或者专门分配的时间,调用键盘扫描子程序来响应键输入要求。该工作方式只有在CPU空闲时才能调用键盘扫描子程序,其对资源要求比较苛刻。因此,在应用系统软件方案设计时,键盘扫描子程序的编程调用应能满足键盘响应要求。

2.定时扫描方式

定时扫描方式利用定时器的溢出中断请求,每隔一定的时间对键盘扫描一次。在初始化程序中对定时器进行编程,使之每隔10ms,对键盘扫描一遍,检查键盘的状态。当两遍扫描到都有键按下时,CPU才作键处理。

3.中断扫描方式

为了提高CPU的效率,可以采用中断扫描工作方式,即只有在键盘有键按下时才产生中断申请;CPU响应中断,进入中断服务程序进行键盘扫描,并做相应处理。中断扫描工作方式的键盘接口如图7-7所示。

图7-7 中断方式键盘接口

图7-7中,P1.4~P1.7作列线,P1.0~P1.3作行扫描线。扫描时,使P1.0~P1.3位清0。当有键按下时,端为低电平,向CPU发出中断申请。若CPU开放外部中断,则响应中断请求,进入中断服务程序,从而进行键盘扫描程序。