关于单片机按键的抖动与消抖
在单片机的程序中,如果涉及到按键,一般都会看到几行注释着消抖
的代码。 比如下面这一段: if((KeyV|0xc3)==0xff){//无键按下 return 0; }
mDelay(10);//延时,去键抖 KeyV=P3; if((KeyV|0xc3)==0xff){//无键按下 return
0; } 关于其作用与目的,有如下解释: 按键在按下时会产生电平的变化,通
常是由高电平变为低电平,而且这一过程也不是瞬间完成的,按键按下之后,
电平会有一段不稳定变化的时间。一般情况下,我们的程序读取这个电平变化
并做相关的动作。但由于机械按键的局限性,当系统受到外力而产生抖动或其
它动作时,也可能使系统内部产生电平变化(通常这种变化持续的时间非常短)
,这种现象称之为按键的抖动。 这种抖动显然不是我们期望出现的,一旦程
序中没有针对它进行特殊处理,这种隐患很可能导致系统执行我们不希望出现
的动作。进而可能酿成一场悲剧。避免按键抖动的操作就称之为消抖。 目前,
单片机的消抖主要分为软件消抖和硬件消抖。 其中,软件消抖增加软件资源,
但不增加硬件成本;硬件消抖反之。 现在普遍采用的是软件消抖的方式。软
件消抖具体的操作思路是: 当监听到按键被按下时,不立刻执行相关的操作,
而进行一定时间的延时(通常是 50ms),之后再次检测按键是否被按下,如果
此时按键仍然被按下,则判定按键确实被按下了(因为不论是异常情况导致的
抖动还是正常情况下按键被按下产生的电平变化都会在这一段时间内过去,紧
接着的电平将会是稳定的),然后进行按键被按下之后所需要的操作,否则判
定按键未被按下,继续监听按键状态。实际上,以上所说的软件消抖的方法在
真正的软件中应用的不多,只是在练习的时候使用。真正的应用上,会在可能
产生抖动的那一段时间内等间隔多次监听按键状态(电流状态),等到数次
(可以是连续 5 次)电流平稳了才确定按键被按下。按键被放开时采取同样操
本文来源:https://www.2haoxitong.net/k/doc/4c6ab1cc773231126edb6f1aff00bed5b8f37339.html
文档为doc格式