首页 理论教育 单片机按键设计实践教程:3种方式应对误处理

单片机按键设计实践教程:3种方式应对误处理

时间:2023-10-20 理论教育 版权反馈
【摘要】:抖动过程引起电平信号的波动,有可能令CPU误解为多次按键操作,从而引起误处理。图3-4 独立式按键查询方式硬件电路图3-5 独立式按键中断方式硬件电路2.矩阵式键盘接口设计矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列的交叉点上,节省I/O口。

单片机按键设计实践教程:3种方式应对误处理

按键按照结构原理可分为两类:一类是触点式开关按键,如机械式开关、导电橡胶式开关和柔性开关等;另一类是无触点开关按键,如电气式按键和磁感应按键等。

按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法有所不同。

按键按照结构形式可分为独立式按键与矩阵式按键两类。

按键按照用途分为数字键、功能键和组合控制键三大类。

常见系统中一般都采用触点式开关按键,利用了机械触点的合、断作用。由于机械触点的弹性作用,一个按键开关在闭合和断开的瞬间均有一连串的抖动,电压波形如图3-1所示。

抖动时间的长短由按键的机械特性决定,一般为5~10ms,这是一个很重要的参数。抖动过程引起电平信号的波动,有可能令CPU误解为多次按键操作,从而引起误处理。为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响。按键的消抖,通常有硬件和软件两种消除方法。

978-7-111-43308-8-Chapter03-1.jpg

图3-1 按键抖动波形

1)硬件消抖:在按键较少的情况下,可以被采用。硬件消抖通常采用双稳态消抖电路和滤波积分电路。RS双稳态触发器构成的消抖电路如图3-2所示,RC滤波消抖电路如图3-3所示。

2)软件消抖:如果按键较多,硬件消抖将无法胜任,常采用软件消抖。通常采用软件延时的方法,在第一次检测到有键按下时,执行一段延时的子程序(延时时间一般为10ms)后,再确认是否仍保持闭合状态电平。如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,这样就消除了抖动的影响。

978-7-111-43308-8-Chapter03-2.jpg

图3-2 RS双稳态触发器消抖电路

978-7-111-43308-8-Chapter03-3.jpg

图3-3 RC滤波消抖电路

按键电路有多种连接和识别的方法,主要分为独立式按键和矩阵式按键两类。

1.独立式按键

独立式按键就是每个按键单独占用一个I/O口,每个I/O口的按键工作状态不会影响其他I/O口的工作状态。因此,通过检测输入线的电平状态可以很容易地判断哪个按键被按下了。独立式按键的优点是电路配置灵活,软件结构简单;它的缺点是每个按键需占用一个I/O口,浪费CPU的资源。图3-4所示为独立式按键查询方式硬件电路,与此电路对应的按键扫描程序清单如下:

978-7-111-43308-8-Chapter03-4.jpg

978-7-111-43308-8-Chapter03-5.jpg

图3-5所示为独立式按键中断方式硬件电路,当电路中某个按键被按下时,触发外部中断0,进入中断程序对按键进行判断处理。

978-7-111-43308-8-Chapter03-6.jpg

图3-4 独立式按键查询方式硬件电路

978-7-111-43308-8-Chapter03-7.jpg

图3-5 独立式按键中断方式硬件电路(www.xing528.com)

2.矩阵式键盘接口设计

矩阵式键盘适用于按键数量较多的场合,由行线和列线组成,按键位于行列的交叉点上,节省I/O口。

(1)矩阵式键盘的工作原理

行线通过上拉电阻接到+5V电源上,无按键时,行线处于高电平状态;有键按下时,行线电平状态将由与此行线相连的列线电平决定。列线电平为低,则行线电平为低;列线电平为高,则行线电平为高。图3-6所示为一个4×4的行、列结构,可以构成一个含有16个按键的键盘,很明显在按键数量较多的时候,矩阵式键盘比独立式键盘要节省很多I/O口。

978-7-111-43308-8-Chapter03-8.jpg

图3-6 4×4矩阵式键盘结构

(2)按键编码的识别方式

不同的按键接口方式对应不同的按键识别方法,但无论哪种接口方式,按键的闭合与否都反映在电压的高低上。对于独立式按键识别方法很简单,只需要检测相应口线的电平即可。没有键按下时为高电平,有键按下时则为低电平。

矩阵式按键的识别原理如上面提到的4×4矩阵式键盘,按键设置在行、列的交点上,行列线分别连接到按键开关的两端,行线或列线通过上拉电阻接到+5V电源上。平时无按键动作时,处于高电平状态;而当有键按下时电平状态将发生改变。这一点是按键识别的关键所在,一般有扫描法和线反转法两种方法:

1)扫描法识别按键。扫描法识别按键分两步进行:第一步是识别有无按键按下。识别有无按键按下的方法:让所有列线均置为零电平,检查各行线是否有变化。如果有变化,则说明有键被按下,否则说明无键被按下。第二步:若有键按下,识别出该键。识别具体按键的方法:逐列置零电平,其余各列置为高电平,检查各行线电平的变化。如果某行线电平由高电平变为低电平,则可确定此行此列交叉点处的按键被按下。

2)线反转法识别按键。扫描法要逐列扫描查询,若被按下的键处于最后一列,要经过多次扫描才能最后获得此按键的行、列值。而线反转法则很简练,无论被按键处于第一列还是最后一列均只需两步便能获得按键的行、列值。第一步:将行线编程为输入线,列线编程为输出线,然后使输出线输出为全零电平,则行线中电平由高到低所在行为按键所在行。第二步:同第一步相反,将行线编程为输出线,列线编程为输入线,然后使输出线输出为全零电平,则列线中电平由高到低所在行为按键所在列。结合两步的结果,便可确定按键所在行和列,从而识别所按的键。该方法的优点是非常简单、适用。

图3-7所示是编程扫描法矩阵式键盘接口电路。采用编程扫描方式工作,软件消抖。

978-7-111-43308-8-Chapter03-9.jpg

图3-7 编程扫描法矩阵式键盘接口电路

978-7-111-43308-8-Chapter03-10.jpg

图3-8 中断方式扫描识别法矩阵式键盘接口电路

图3-8所示是中断方式扫描识别法矩阵式键盘接口电路,它的软件结构与编程扫描方式不同的地方是键的扫描是在中断程序中进行的,在此不作详细介绍了。

978-7-111-43308-8-Chapter03-11.jpg

图3-9 线反转识别法采用编程扫描查询方式的矩阵式键盘接口电路

图3-9所示是线反转识别法的矩阵式键盘接口电路。如果无键按下,键盘扫描程序返回0;有键按下判读行列,返回键特征码,利用编码子程序根据键的特征码进行编码,其程序清单如下:

978-7-111-43308-8-Chapter03-12.jpg

978-7-111-43308-8-Chapter03-13.jpg

978-7-111-43308-8-Chapter03-14.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈