首页 理论教育单片机键盘检测原理及应用

单片机键盘检测原理及应用

【摘要】:如果将单片机的一个I/O口连接于K点,通过检测K点电压的高低,就可以确认是否有按键按下,这就是键盘检测的基本原理。基于中断方式工作的独立键盘的电路原理如图6-8所示。矩阵键盘能有效地节省I/O口,简化电路,非常适用于按键数量较多的应用。

熟悉计算机的人对键盘一定不会陌生,键盘实际上就是一组按键开关的集合。通常情况下,键盘所用的开关均为机械弹性开关,利用机械触点的闭合和切断作用来完成相应的控制功能。

6.1.1 按键的确认

将一个按键一端经上拉电阻连接到正电源,另一端接地,即可构成一个按键的检测电路,当按键断开—闭合—断开时,K点输出的电压波形在Proteus仿真如图6-5所示。

图6-5 按键的检测电路Proteus仿真,

图6-5中,我们可以简单地将按键的“断开—闭合—断开”按键动作分解成为五个时期,分别用t0~t4来表示。t0和t4为断开期,即按键没有按下时的状态,这时K点在上拉电阻的作用下,输出电压为持续的电平;t1和t3分别为按键的闭合和断开的抖动期,这一时期由于触点的接触抖动,使输出的状态不稳定,呈现出一连串的负脉冲,抖动时间长短和开关的机械特性有关,t1和t3一般存在时间为5~10 ms(图中为2.5 ms);t2为稳定的闭合期,表明按键已被按下,其时间由按键动作所决定,一般为0.1秒到数秒不等。

从上面的叙述可知:按键的闭合与否,与K点的输出电压是相关联的,如果按键断开,K点输出高电平。反之,如果按键闭合,K点输出低电平。如果将单片机的一个I/O口连接于K点,通过检测K点电压的高低,就可以确认是否有按键按下,这就是键盘检测的基本原理。

6.1.2 按键抖动的消除

使用单片机检测按键是否按下在理论上是非常简单的,但在实际应用时往往会出现问题,例如:我们明明是只按了一下按键,可按键的检测结果则是按键被多次重复按下,造成这样的问题根源在于按键的触点抖动。为了让单片机对每次按键动作都正确地响应,必须消除抖动的影响,通常消除抖动的方法有硬件消抖和软件消抖两种。

1.硬件消除按键抖动

硬件消除按键抖动的方法是通过采用双稳态电路来实现的,具体原理如图6-6所示。图中的两个与非门构成了一个RS触发器,当按键未按下时,a点接地,双稳态电路输出高电平;当按键按下时,输出低电平。触点K与a或b的暂时离断都不会影响双稳态电路的输出,其输出状态的改变只能是K端与a或b的接触。通过双稳态电路,不管是否存在按键抖动,RS触发器都会稳定地输出高或低两种电平。

图6-6 双稳态消抖电路

2.软件消除按键抖动

硬件消除按键抖动会增加元器件的开销,如果按键较多,硬件消抖的成本会相应增大,也会给PCB的设计带来不便,在实际应用中大多使用软件消抖的方法。软件消抖是在第一次检测到按键按下时,加入一个特定的等待时间(通常为10 ms),等待时间过后再次检测该按键是否按下,当按键被确认再次按下时,才执行相应的按键动作,否则就认为是按键抖动,不做任何处理。这样,软件消抖可以在不增加硬件成本的前提下达到消抖的目的。

6.1.3 键盘接口

常用的键盘接口分为独立式键盘接口和矩阵式键盘接口两种。

1.独立式键盘接口

独立式键盘的各个按键相互独立,每个按键各连接一根输入线,每根输入线上的按键工作状态不会影响到其他输入线上按键的工作状态。单片机通过检测每一条输入线的电平状态,就可以很容易地判断出哪个按键被按下了。工作在查询方式下的独立式键盘接口的电路原理如图6-7所示。

图6-7 独立式键盘接口(查询法)

独立式键盘电路简洁、配置灵活,软件实现也相对容易。但是,独立式按键的每个按键都需要占用一根I/O线,当按键数量较多时,要占用大量的I/O口,因此独立式键盘通常适用于按键数量较少或对操作速度要求较高的应用中。当单片机在检测如图6-7所示的独立式键盘时,CPU需要不停地查询四个独立按键所连接的I/O线的状态,因此也将这种接法的独立式键盘称为“查询方式工作的独立键盘”。

为了进一步减轻CPU的查询负荷,在独立式键盘基础上设计出了一种基于中断方式工作的独立键盘,即将四个按键的输出线通过“与门”连接到INT0(外部中断0)输入端。当有键按下时,INT0端会呈现低电平,从而触发外部中断,在INT0的中断服务程序中,可以再次通过查询法判断哪个按键被按下。中断方式工作的独立键盘优点是使用了外部中断来监测按键是否按下,CPU不用实时查询按键状态,节省了宝贵的系统资源。基于中断方式工作的独立键盘的电路原理如图6-8所示。

图6-8 独立式键盘接口(中断法)

2.矩阵式键盘接口

矩阵式键盘也称行列式键盘,由行线和列线组成,在行线和列线的交叉点上布设按键,行线通过上拉电阻连接到电源正端,即构成矩阵式键盘。一个4×4的行列结构的矩阵键盘如图6-9所示,8个I/O口分为行线和列线两组,构成一个具有16个按键的矩阵键盘。矩阵键盘能有效地节省I/O口,简化电路,非常适用于按键数量较多的应用。(www.chuimin.cn)

图6-9 矩阵式键盘接口电路(扫描法)

对于矩阵式键盘的按键检测可以使用以下3种方法来实现:

1)扫描法

在图6-9所示的矩阵键盘电路中,横向线为行线,而竖向线为列线,行线由P1.0~P1.3构成,列线则由P1.4~P1.7构成,每1个按键的两端都分别连接于1个行线和1个列线上。在检测矩阵键盘时,首先把第1条列线(P1.4)置为低电平,其他3条列线保持高电平,读取4根行线的状态,如果检测到某根行线为低电平,就表示该行线与输出低电平的列线交点处的按键被按下了。将4条列线依次置低,每置低1条列线,就检测一次4根行线的状态,通过4次检测即可完成对16个按键的扫描过程。

编程向导:扫描法按键识别。

(1)软件使P1口输出“1110 1111”,将P1.4列线置低。

(2)软件读取P1口状态,如果低四位的值为“1111”,则没有按键按下;如果低四位的值为值为“1110”,则表示与P1.4列线相连接的按键S1被按下了;同理,当P1口低四位的值分别为“1101”“1011”和“0111”时,则分别表示按键S5、S9和S13被按下了。

(3)软件使P1口输出“1101 1111”,将P1.5列线置低。

(4)软件再次读取P1口状态,当低四位的值分别为“1110”“1101”“1011”和“0111”时,则表示按键S2、S6、S10和S14被分别按下。

(5)重复上述步骤,再次将P1.6、P1.7两条列线分别置低,并分别读取P1口低四位的状态,完成对余下8个按键的检测。

(6)将步骤(1)~(5)的扫描过程不断地重复进行,即可以完成对整个矩阵键盘的监控。

2)线反转法

相对于扫描法,线反转法的原理更加简单,只需要固定的两个步骤就可以确定按键的位置。使用线反转法4×4的矩阵键盘接口如图6-10所示。线反转法检测矩阵键盘的方法是:首先将4根行线置为输入,4根列线置为输出,全部列线输出低电平“0”,读取行线的状态,当有按键按下时,读取结果中为低电平的行线即是按键所在的行;之后反转上述过程,将4根行线置为输出而将4根列线置为输入,行线全部输出低电平,读取列线的状态并确定按键所在列。通过以上两个步骤即可识别出被按下的按键。

图6-10 矩阵式键盘接口电路(线反转法)

编程向导:线反转法按键识别。

(1)软件使P1口输出“0000 1111”。

(2)软件读取P1口状态,如果低四位的值为“1111”,则没有按键按下;如果低四位的值为“1110”,则表示按键所在行为P1.0上;同理,当P1口低四位的值分别为“1101”“1011”和“0111”时,则分别表示按键所在行分别为P1.1、P1.2和P1.3上。

(3)保存上述读取的结果,软件再次使P1口输出“1111 0000”。

(4)软件读取P1口状态,当高四位的值分别为“1110”“1101”“1011”和“0111”时,则按键所在的列分别为P1.4、P1.5、P1.6和P1.7上。

(5)重复步骤(1)~(4),即可监控矩阵键盘的所有按键。

3)中断法

使用中断法解码矩阵键盘需要硬件电路的配合,其电路原理如图6-11所示。4×4矩阵键盘的列线与P1口的高四位相连,行线除了与P1口的低四位相连外,还通过“与门”和单片机的INT0相连,在扫描矩阵键盘时,将P1.0~P1.3置为输入,而将P1.4~P1.7置为输出,并使其全部输出低电平。当有按键按下时,P1.0~P1.3 4根线中必有一个为低电平,从而触发外部中断。在单片机的中断服务程序中,首先关闭外部中断。并执行键盘扫描程序,键盘扫描程序与前面所讲的扫描法类似,即按顺序把4条列线依次置为低电平,并通过再次读取P1口低四位的状态来确定是哪一个按键被按下。使用中断法解码矩阵键盘的优点是只有当有按键按下时,单片机才对键盘进行扫描,这样可以减少CPU的查询负担。

图6-11 矩阵式键盘接口电路(中断法)