在单片机的程序中,假如涉及到按键,一般都会看到几行注释着“消抖”的代码。
比方下面这一段:
if((KeyV|0xc3)==0xff){//无键按下
return 0;
}
mDelay(10);//延时,去键抖
KeyV=P3;
if((KeyV|0xc3)==0xff){//无键按下
return 0;
}
关于其效果与意图,有如下解说:
按键在按下时会发生电平的改动,一般是由高电平变为低电平,并且这一进程也不是瞬间完结的,按键按下之后,电平会有一段不安稳改动的时刻。一般状况下,咱们的程序读取这个电平改动并做相关的动作。但由于机械按键的局限性,当体系遭到外力而发生颤动或其它动作时,也或许使体系内部发生电平改动(一般这种改动持续的时刻十分短),这种现象称之为按键的“颤动”。
这种“颤动”明显不是咱们期望呈现的,一旦程序中没有针对它进行特别处理,这种危险很或许导致体系履行咱们不期望呈现的动作。从而或许变成一场悲惨剧。防止按键“颤动”的操作就称之为“消抖”。
现在,单片机的消抖首要分为软件消抖和硬件消抖。
其间,软件消抖添加软件资源,但不添加硬件本钱;硬件消抖反之。
现在遍及选用的是软件消抖的办法。
软件消抖详细的操作思路是:
当监听到按键被按下时,不马上履行相关的操作,而进行必定时刻的延时(一般是50ms),之后再次检测按键是否被按下,假如此刻按键依然被按下,则断定按键的确被按下了(由于不论是异常状况导致的颤动仍是正常状况下按键被按下发生的电平改动都会在这一段时刻内曩昔,紧接着的电平将会是安稳的),然后进行按键被按下之后所需求的操作,不然断定按键未被按下,持续监听按键状况。
硬件消抖的思路则是选用相关手法去除开始发生的那不安稳的电平改动,只输出后边安稳的电平。
详细的完成办法有以下两种:
法1:
用10K的上拉电阻与按键串联,然后按键并联一个去抖电容用以消除按键的机械颤动。电容的计算办法如下:电容的容值是依据机械按键的触点颤动频率而定,一般机械按键的颤动频率为100Hz左右,当按键闭合颤动时触摸时刻在毫秒级,依据电容放电的时刻t=0.7×√RCR=10K,C选0.1μF,电容的充放电时刻约20ms,大于颤动时刻,可将颤动滤除去。一般电容C选取0.01μF~1μF.
法2:
在键数较少时可用硬件办法消除按键颤动。下图所示的RS触发器为常用的硬件去抖。
图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当按键按下时,输出为0.此刻即运用按键的机械性能,使按键因弹性颤动而发生瞬时断开(颤动跳开B),按键不回来原始状况A,双稳态电路的状况不改动,输出坚持为0,不会发生颤动的波形。也就是说,即便B点的电压波形是颤动的,但经双稳态电路之后,其输出为正规的矩形波。这一点经过剖析RS触发器的作业进程很简单得到验证。