• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机按键中断中,怎么消除抖动?

xhuaihe 2017-07-28 浏览量:3951
普通的延时消除抖动,肯定不现实,有啥好的建议吗?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案

其他答案 数量:11
  • 定时扫描按键电平,10ms检测一次。多次检测判断
    • 发布于2017-07-29
    • 举报
    • 评论 0
    • 1
    • 0

  • 另外还有种常见的方法是电容消抖,就是在按键处并个小电容,按键按下时充电,充电完成后那个电容就视为断路

    请参考这个http://m.wenda.so.com/q/1484595240494443?src=140


    软件方法就是多次判断,每隔一小段时间查询一次,只要查询到未按下就视为未按下

    • 发布于2017-07-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 第一、硬件消抖

    采用电阻加电容构成T型低通滤波,可以减小抖动。

    第二、软件消抖

    1.在中断中添加延时,延时时间一般设置5到10ms(时间太长容易照成系统工作不稳定)

    2.多次中断   添加一个全局变量,判断进中断多少次,再添加少量的延时

    • 发布于2017-07-29
    • 举报
    • 评论 2
    • 0
    • 0
xhuaihe 回复了 视觉℡ :万一有个低优先级的中断,不就不能响应 回复
xhuaihe 回复了 视觉℡ :万一有个低优先级的中断,不就不能响应 回复

  • 设置一个10ms的中断,和一个按键计数器,每次进去中断都判断一下按键的状态,如果按键按下则按键计数器+1,如果按键松开,计数器清0,然后就可以离开中断了,在main函数中,判断这个按键计数器,如果这个按键计数器>2,则可以判断这个按键被按下10ms以上了,可以判定为一次按压动作,当然这个方法也可以作为按键长按触发。

    既然使用了中断,就不要使用延时机制了。

    另外楼主如果说的是按键外部中断触发,也可以把外部中断触发一个定时器标志位作为按键开始的触发点,等到定时器10ms到达时再去做第二次判断达到消抖目的。这样比较省资源,不用一直开着定时器(对于单片机程序来讲,还是要有一个定时器心跳来执行任务机制的。。。。。所以第二种方法也就较少用了。。。。。。)

    • 发布于2017-07-29
    • 举报
    • 评论 0
    • 0
    • 0

  • 設置外部中斷時候是邊緣(EDGE)觸發的,其實抖動影響情況應該很少見的



    • 发布于2017-07-29
    • 举报
    • 评论 0
    • 0
    • 0


  • 1.在中断中添加延时,延时时间一般设置5到10ms

        先判断是否有按键按下,延时十毫秒后,再次进行判断

    2、采用电阻加电容构成T型低通滤波,可以减小抖动。

    • 发布于2017-07-29
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机按键中断中,怎么消除抖动?