共2条
1/1 1 跳转至页
求助:利用定时中断可以消除按键抖动吗?
问
各位大虾,小弟现在遇到了按键抖动问题。小弟的想法是这样的:先设定时器20ms溢出中断一次,在中断服务子程序中去读按键的状态,如果连续两次读取的状态都为按下,那么就可以确定按键确实是按下了。现在用到了3个按键。不知道这样是否行得通?解决过这个问题的高手给点意见,谢谢大家了!
答 1:
当然可以。
答 2:
利用定时中断可以消除按键抖动吗?
你的想法是否為每隔20ms讀一次按鍵?這樣會不會漏掉按鍵?你所用按鍵彈性如何?把你的測試結果告訴大家,ok? 答 3: re:这个问题我也考虑了好久我现在做的程序就是用这种方法消抖的,但是总感觉效果不大好,我是这么做的:
定时中断每隔75MS扫描一次键盘状态,第一次扫描有按键按下n0=0,第二次扫描有按键按下n1=0;当n0=n1=0,则表示有按键按下,标志值key赋值,同时把把n0的值改为1,防止马上的扫描又判断为有按键.
我的这个方式在程序中试过,感觉按键不是很灵敏,我想这个方法有公版的程序.不知哪位大侠能否赐教一二. 我的email:zhuzhenseu@163.com 答 4: 每隔10ms扫描一次不就行了?如果用75ms扫描一次,第一次扫描到有键按下时需再过75ms才会读到键值,这样相当于要75ms*2的时间才能得到一个键值,给人的感觉肯定会有点脱滞! 答 5: 搞清几个按键的过程标志即可每20ms检测一下键盘,如果有按键,就置位key_down,然后下20ms再次检测,如果按键还在(去抖),那么key_down就过渡到key_press,这时候就可以执行对应按键操作了;接下来以后每20ms检测一次按键是否抬起,如果抬起,就置位key_up,下20ms再次检测是否抬起(去抖),如果抬起就不管了。
如果要检测连续键,可以在key_press中进行,专门有个变量用于定时计数,每超过一定时间(200ms,第一次进入要700ms)就执行一次该键操作。 答 6: 感谢!问一下,如果按键机械性能比较好的话,是否可以不去抖动? 答 7: 大家可否有按键消抖的程序?贴出来,探讨一下!! 答 8: 利用定时中断可以消除按键抖动吗?按鍵去枓時間一般在10-20ms之間,依機械特性定.掃描時間周期在1ms左右比較合適. 答 9: 我一直就是这么做的,当然可以.用定时中断,20-50ms
在中断里面读键盘,直接读就可以的,不要去抖动的!
答 10: 可以一般的消抖都是中断,delay10mS然后判断。如果还是按下则执行相应程序。
我设计的是中断中只让它起动定时器。在定时器溢出中如果有按键按下则执行相程序 答 11: 如果键盘和显示用同一片MCU.我把显示做成子程序,检测键盘,如果有按键,就调用显示子程,再检测键盘,如果有按键序,进行相应处理,显示没有任何抖动. 答 12: 可以 答 13: OK没问题的
我一直这样用 答 14: Other way!为什么不考虑考虑用硬件电路解决呢?
去抖动电路很多的吗 答 15: 两次间隔10ms就可以了,就是这样的 答 16: 以你的开关用途而定,我检测机械开关,中断延时500ms检测一次 答 17: www.zlgmcu.com上有一篇文章可以借鉴http://www.zlgmcu.com/philips/yingrong/51lpc/p87lpc761_timerCTRL.pdf
利用P87LPC761单片机设计时间控制器
关于按键的处理可以看看 答 18: 每1ms到20ms一次,前一次没按下后一次按下则判为有按键我一直这么用,效果不错 答 19: 坚决不要这样,软件消抖很方便,不占多少资源
你的想法是否為每隔20ms讀一次按鍵?這樣會不會漏掉按鍵?你所用按鍵彈性如何?把你的測試結果告訴大家,ok? 答 3: re:这个问题我也考虑了好久我现在做的程序就是用这种方法消抖的,但是总感觉效果不大好,我是这么做的:
定时中断每隔75MS扫描一次键盘状态,第一次扫描有按键按下n0=0,第二次扫描有按键按下n1=0;当n0=n1=0,则表示有按键按下,标志值key赋值,同时把把n0的值改为1,防止马上的扫描又判断为有按键.
我的这个方式在程序中试过,感觉按键不是很灵敏,我想这个方法有公版的程序.不知哪位大侠能否赐教一二. 我的email:zhuzhenseu@163.com 答 4: 每隔10ms扫描一次不就行了?如果用75ms扫描一次,第一次扫描到有键按下时需再过75ms才会读到键值,这样相当于要75ms*2的时间才能得到一个键值,给人的感觉肯定会有点脱滞! 答 5: 搞清几个按键的过程标志即可每20ms检测一下键盘,如果有按键,就置位key_down,然后下20ms再次检测,如果按键还在(去抖),那么key_down就过渡到key_press,这时候就可以执行对应按键操作了;接下来以后每20ms检测一次按键是否抬起,如果抬起,就置位key_up,下20ms再次检测是否抬起(去抖),如果抬起就不管了。
如果要检测连续键,可以在key_press中进行,专门有个变量用于定时计数,每超过一定时间(200ms,第一次进入要700ms)就执行一次该键操作。 答 6: 感谢!问一下,如果按键机械性能比较好的话,是否可以不去抖动? 答 7: 大家可否有按键消抖的程序?贴出来,探讨一下!! 答 8: 利用定时中断可以消除按键抖动吗?按鍵去枓時間一般在10-20ms之間,依機械特性定.掃描時間周期在1ms左右比較合適. 答 9: 我一直就是这么做的,当然可以.用定时中断,20-50ms
在中断里面读键盘,直接读就可以的,不要去抖动的!
答 10: 可以一般的消抖都是中断,delay10mS然后判断。如果还是按下则执行相应程序。
我设计的是中断中只让它起动定时器。在定时器溢出中如果有按键按下则执行相程序 答 11: 如果键盘和显示用同一片MCU.我把显示做成子程序,检测键盘,如果有按键,就调用显示子程,再检测键盘,如果有按键序,进行相应处理,显示没有任何抖动. 答 12: 可以 答 13: OK没问题的
我一直这样用 答 14: Other way!为什么不考虑考虑用硬件电路解决呢?
去抖动电路很多的吗 答 15: 两次间隔10ms就可以了,就是这样的 答 16: 以你的开关用途而定,我检测机械开关,中断延时500ms检测一次 答 17: www.zlgmcu.com上有一篇文章可以借鉴http://www.zlgmcu.com/philips/yingrong/51lpc/p87lpc761_timerCTRL.pdf
利用P87LPC761单片机设计时间控制器
关于按键的处理可以看看 答 18: 每1ms到20ms一次,前一次没按下后一次按下则判为有按键我一直这么用,效果不错 答 19: 坚决不要这样,软件消抖很方便,不占多少资源
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |