按键抖动的处理方法(按键外部中断)

当把按键设为外部中断时,存在按键抖动问题:

  1. 一种情况是没有按按键的时候,按键有时也会因为震动等原因误触发按键事件,引起程序误判。对于这种按键抖动,解决方式有:
    1. 并上一个小电容(比如0.1uF)即可解决。
    2. 延时检测:检测到按键中断后延时50ms判断这个引脚电平,然后再做进一步处理。
  2. 还有一种情况是按下按键时,由于按键本身的结构或质量问题、操作者的发力问题等,在操作者按下一次按键的过程中,实际上触发了数次按下-抬起的动作,引起程序误判。对于这种按键抖动,解决方式有:
    1. 延时检测:检测到按键中断后延时50ms判断这个引脚电平,然后再做进一步处理。
    2. 禁用中断:进入中断后禁用中断,处理完按键操作后再使能中断。这需要两个条件:没有按键行为时不会有中断发生;处理按键操作的时间足够长,长于一次按键操作的时间(大概是几百ms)。
  3. 总体来说,建议的解决办法是:
    1. 按键两端并联一个0.1uF电容,可以大幅度减少抖动发生
    2. 程序中添加延时检测:检测到按键中断后,过50ms左右检测引脚电平。
      1. 如果中断是检测按键按下:如果检测到高电平,说明刚刚发生了1型按键抖动,此次按键中断忽略不计;如果是低电平,可以判断发生了按键事件。另外,应在处理完按键事件后再清除按键事件标志,如此可以避免在处理过程中发生的2型抖动所引发的误判。
      2. 如果中断是检测按键抬起:如果检测到高电平,可以判断发生了按键事件;如果是低电平,说明刚刚发生了2型按键抖动,此次按键中断忽略不计,继续等待抬起动作。检测按键抬起时似乎难以判断1型按键抖动,不过并上电容后基本不会发生这种抖动。

猜你喜欢

转载自www.cnblogs.com/cage666/p/9226538.html