单片机按键消抖无延时的算法

http://www.eeworld.com.cn/mcu/2012/0806/article_9776_2.html 这是一个网址的一个消抖程序,他用的是switch()结构 不知道为什么这样就可以消抖,求大神详细解答下

无延时,只是噱头。

隔一段时间,执行一次void Keyscan(void),
间隔的时间,也相当于延时了。

而且,这样的方法,是按照固定的时间,去扫描按键。
有些像是巡逻哨,有可能会错过按键的时刻。

而轮流检测按键的方法,扫描的,就比较勤。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-16
楼主的见解是对的 抖动也是有时间延续的 假如我抖动过程中开关合并的时间为1ms(假如)
而你此期间执行了两次keyscan()程序 那么就会误认为 是按下信息
其实是抖动。。还是延时来的可靠
不想软件花销大 那就硬件电路消抖。。。。。本回答被网友采纳
第2个回答  推荐于2017-09-25
这个运用了状态机。、

状态转移。

状态1,是否有按键按下,有则转到状态2
状态2,判断按键值,并转移到状态3
状态3,等待按键释放,释放完毕则转回状态1,等待按键按下!追问

假如有抖动,通过了第一状态,假如刚好又通过了第二状态,不就糟了

追答

这种方式不阻塞CPU运行,具体找带你状态机的资料看看,笨办法,加点延时可能保险些

本回答被提问者采纳
第3个回答  2013-08-16
switch()语句,只能运行一个状态,就算他在抖动也没有什么关系,他值判断到一次

单片机使用状态机无延时按键消抖是怎样的原理
无延时,只是噱头。隔一段时间,执行一次void Keyscan(void),间隔的时间,也相当于延时了。而且,这样的方法,是按照固定的时间,去扫描按键。有些像是巡逻哨,有可能会错过按键的时刻。而轮流检测按键的方法,扫描的,就比较勤。

单片机按键如何消抖
if (key==0) 如果按键按下 for(i=0;i<100;i++):利用延时消除抖动 if (key==0) 再次判断按键,如果还是按下状态 ( 要执行的语句)则执行相关语句 这是常用的软件消抖方法

单片机独立按键去抖动问题
因为进行了两次if判断,松开按键的时候无非会出现电平的跳变,理论上松开按键之后就一直为高电平1111111111,如果出现1110101111,中间的第一个10就发生了跳变,因为cpu的运算速度非常快,当程序又到了第一个if时,此时key1为0,那么满足条件,执行延时函数,后面第二个10就直接忽略了,后面的电平已经为1...

单片机按键检测。。。谁有办法做到既能准确只改变一次数值,又不失响...
检测到按键被按下后,在消抖延时的过程中反复检测,若延时过程中按键松开(或弹开),则退出,直到再次检测到按键被按下.并且,关键是,消抖延时最好利用定时中断来做,这样的话,在消抖的过程中,也不会影响其它的工作.我的一般做法是,将定时器设定为1mS中断一次,假如你采用15mS做按键消抖,那就在按键检测程序...

单片机按键延时,使用定时计数器消除按键延时,求操作流程
当发现有键按下时, 为了消除按键的抖动 需要软件延时5~10ms 经过延时后 再读入按键的状态 如果按键有效 则进入相应的按键处理程序 否则(按键无效)可以视为干扰。2 一般都是采用软件延时(即调用一个延时子程序 延时5ms )不要使用定时计数器来延时 会浪费单片机的硬件资源...

常用的按键消抖方法有哪些?分别用什么方法来实现
2、软件消抖 实现方法:假设未按键时输入1,按键后输入为0,抖动时不定。可以做以下检测:检测到按键输入为0之后,延时5ms~10ms,再次检测,如果按键还为0,那么就认为有按键输入。延时的5ms~10ms恰好避开了抖动期,从而消除了前沿抖动的影响同理,在检测到按键释放后,再延时5~10ms,消除后沿抖动...

按键的硬件消抖电路原理
将产生抖动的电平通过电容吸收掉。从而达到消抖的作用,电容消抖电路图如下图所示。总结 实际上,在没有MCU的情况下,对按键进行消抖通常是通过硬件消抖电路来实现。而在嵌入式开发中,大多数情况下都是通过程序来实现按键消抖。简单说就是加合适的延迟,显然这实现成本要比硬件电路方式低得多。

常用的按键消抖方法有哪些?分别用什
软件消抖则通过延时检测来实现,当按键输入变为0后,延时5-10ms再进行确认,这能避开抖动期。同样,在按键释放后也进行类似的延时处理。通常,对按键释放后沿的处理可适当简化,也能满足大部分需求。按键抖动对单片机来说是显著的,因为单片机处理速度与按键抖动时间尺度不同。为避免按键抖动导致的误操作,...

单片机的按键开关抖动的产生原因,抖动的特点和如何消除抖动
更可靠,更灵敏的消抖做法为:首次检测到按钮为0后,以后的3-5ms持续检测,若检测到信号一直为0,则按钮有效,若中间有一次不为0,时间清0,重新计时,直到连续3-5ms按钮信号一直为0,方为有效。(补充一下,持续检测的意思,并不是让你把全部的CPU时间全部花在这上面,否则这几ms时间内单片机相当于...

按键消抖的原理和方法
原理是防止按键输入被CPU误读多次,方法是RS触发器、电容器等。按键消抖是为了防止按键输入被CPU误读多次,其为在设计单片机按键输入时采取的一种必要手段。正常下的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会...

相似回答