单片机定时中断实现按键扫描消抖程序,有何利弊?

我把按键扫描程序放在定时器中断里面写,每2ms扫描一次,这样写的目的是消除抖动,不过,想问一下这样写的利弊?请高手指点,越详细越好。

中断会终止当前主程序运行,中断执行完成后主程序继续执行,总中断可能会打乱主程序时序。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-02
小程序关系不大,要是大程序就要注意中断了 ,中断里的程序是越短越好,要不然就会影响到别的中断的。

单片机定时中断实现按键扫描消抖程序,有何利弊?
中断会终止当前主程序运行,中断执行完成后主程序继续执行,总中断可能会打乱主程序时序。

按键去抖
楼上说的延时最好不要用,这样会很不稳定,有按键要消抖的话最好用定时中断进去扫描,判断上一状态和这一状态的值是否相等,相等就把时间累加,不相等的话,就保持当前值并清除时间累加,中断时间最好是不影响主程序的运行就行,不宜过长,我一般是用50us-200us之间(看震荡频率),消抖时间一般在50...

单片机外中断消抖的问题 我的方法为什么不行?
按键消抖也不要用延时10ms再检测一次的办法,延时的这10ms实在是浪费控制器的资源,要知道时间对微控制器来说是非常宝贵的。在做按键检测时,建议设置一个10ms的定时器中断作为时钟节拍,并在中断中设置标志。程序的主循环中检测时钟节拍标志,检测到标志后清除标志并扫描按键,记录当前按键状态并和上次检...

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

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

消抖,在定时器中断里面调用按键扫描子程序好还是在
你把这段代码写到主循环中,不能放到外中断中,这样就正常了,另外,把定时器的中断改成我给你的样子,要是不正常你找我!void t0() interrupt 1\/\/1ms 用于按键去抖动。{ TH0=(65536-1000)\/256;TL0=(65536-1000)%256;if(key == 0){ key_num++;if(key_num>=15){ key_num = 15;...

51单片机的外部中断如何写按键消抖c程序!
跟外部的按键消抖一样处理就可以了。void ext0() interrupt 0 { delay(10);\/\/ flag=0;\/\/按键有效标志=0为无效 if(P3_2){ while(!P3_2);\/\/等待按键抬起 flag=1;} }

单片机设计的按键有时反应很慢,是不是必须得用中断设计按键 用中断是...
没必要用中断,反应慢,你可以提高晶振频率,优化程序,可能是你按键等待的时间长了,减小等待按键弹起的时间试试看

单片机菜鸟求教,关于延迟和按键去抖的问题
解决办法就是采用定时器中断。不管是按键用中断也好,显示用中断也好,只要其中一个进入定时器中断,问题就解决了。程序就不写了,描述一下意思就好 你的主程序保留键盘部分,但是显示那一大段不要了 中断本来是50ms,建议改成20ms 然后呢,设置一个变量,每次进入中断就把变量的值加1 加完以后,根据...

单片机利用中断扫描独立式按键
你定时器中断后,扫描下即便扫描到有按键按下先做个标记,等待下次中断进入后,根据标记先判断是否按键还处于按下状态,是的话,经过你的再次定时器中断,也已经实现了消抖延时的作用。此时可以采集按键值。

相似回答