李秋霞
【摘要】 通常的按键所用开关为机械弹性开关,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,断开时也不会一下子断开,因而在闭合及断开的瞬间均伴随有一连串的抖动,引起一次按键被误读多次。为确保CPU对按键的一次闭合仅作一次处理,必须消除按键抖动。本文对键盘抖动的检测及消除方法进行了探讨。
【关键词】 键盘抖动 检测 消除
键盘是计算机和工业控制等领域不可缺少的输入设备,通过它可以实现人机对话, 完成各种功能操作。通常的按键所用开关为机械弹性开关,由于机械触点的弹性作用, 一个按键开关在闭合时不会马上稳定地接通,断开时也不会一下子断开,因而在闭合及断开的瞬间均伴随有一连串的抖动,会引起一次按键被误读多次。为了确保CPU对按键的一次闭合仅作一次处理,必须消除按键抖动。
一、键盘抖动的检测
按键的检测与消抖是处理非编码键盘必须考虑的一部分。在FPGA中键盘的检测主要通过“脉冲边缘检测法”进行。按键与单片机的连接方式为按键的一端与地相连,另一端直接与单片机的I/O口相连。此时我们在程序中先给I/O口赋值高电平,然后不断的检测I/O口电平的变化。当按键没有被按下时,此I/O口的电平一直为高;当按键被按下时,由于按键的另一端直接与地相连,相当于低电平,此时我们从I/O口读出的即为高电平,程序一旦检测到I/O口由高电平变为低电平时,说明按键被按下,此时马上执行相应的动作,这就是按键检测的原理。
具体检测方法如下:不停的读取端口,假设读取的序列为:按下表示为0,没有按下就是1。将数据存入另一个寄存器。根据数电知识,存入数据会存在一个时钟的移动。这样按键的检测到的时间是一按下就会检测到,而不是松开时。同时不会出现松开过程的干扰。这样就会看见这样在按键以后存在一个脉冲,也就是1,那个1可以表示有按键被按下,而且是在按下的瞬间就能检测到。这样延时20ms左右再次用同样的方法检测确定那个键被按下。这样也就实现了键盘的消抖和检测,不会每次都检测,只有有检测到有按键按下的脉冲才会判断哪个键被按下。新存入寄存器的数据是原寄存器上个时钟的数值,即寄存器的基本原理。取反电路时组合电路,不会出现时延,取反的值与原寄存器值对齐。
二、键盘抖动的消除
(1)硬件消抖。在键数较少时,可用硬件方法消除键抖动。RS触发器为常用的硬件去抖,两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为 0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(抖动跳开B),中要按键不返回原始状态A,双稳态电路的状态不改变,输出保持为 0,不会产生抖动的波形。也就是说,即使 B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。这一点通过分析RS 触发器的工作过程很容易得到验证。此外,利用电容的放电延时,采用并联电容法,也可以实现硬件消抖。
(2)软件消抖。如果按键较多,常用软件方法去抖。软件消抖主要是采用延时多次读取键盘接口数据,通过比较前后两次读取键盘端口的数据通过RC振荡电路实现键盘消抖,适合对消除抖动要求不高的场合。软件消抖的实质在于降低键盘输入端口的采样频率,将高频抖动略去。实际应用中通常采用延时跳过高频抖动区间,然后再检测输入做出相应处理。即检测出键闭合后执行一个延时程序,产生5ms~10ms 的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合 状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5ms~10ms 的延时,待后沿抖动消失后才能转入该键的处理程序。一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时5ms~10ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的5ms~10ms恰好避开了抖动期。为节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消抖方法。 软件消抖要占用系统资源,在系统资源充足的情况下使用软件消抖更加简单。软件延时消抖并不需要增加新的硬件,但采用这种方式来设计, 一般通过软件指令或者定时器的方式来设定延时的时间, 采用通用处理器,由于运行速度不一致,需要将软件做相应的 修改,比较麻烦。
此外,在键盘消抖实验中用到的方法,是建立2个寄存器,形成二级寄存器,在时钟触发中,首先把数据送入第一个寄存器中,然后在下一个时钟上沿到来时,将第一个寄存器中的数据存入第二个寄存器,也就是说第二个寄存器中的数据始终比第一个寄存器晚一个周期,即晚一个数据,然后再将第一个寄存器中的数据取反与第二个寄存器的数据相与,产生的数存入一个新的寄存器里,这样产生的结果是当第一个寄存器中的数据由1变为0时,就会在新的寄存器里产生一个高电平,并维持一个周期。
参 考 文 献
[1]李运兵;微控制器中按键处理技巧及应用[J];计算机系统应用;2010年02期
[2]刘天时;刘赏;付春;一种单片机键盘电路设计与消抖处理[J];计算机与网络;2010年10期
[3]赵鹏飞;俞建定;基于嵌入式微控制器的一种新型GPIO扩展键盘技术[J];宁波大学学报(理工版);2013年02期