按键设为外部中断的一些情况

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

情况一

没有按按键的时候,按键有时也会因为震动等原因误触发按键事件(或者松手的时候),引起程序误判
解决方法1:并上一个小电容(比如0.1uF)即可解决。
解决方法2:延时检测,检测到按键中断后延时50ms判断这个引脚电平,然后再做进一步处理。

情况二

按下按键时,由于按键本身的结构或质量问题、操作者的发力问题等,在操作者按下一次按键的过程中,实际上触发了数次按下-抬起的动作,引起程序误判。对于这种按键抖动,解决方式有:
延时检测:检测到按键中断后延时50ms判断这个引脚电平,然后再做进一步处理。
禁用中断:进入中断后禁用中断,处理完按键操作后再使能中断。这需要两个条件:没有按键行为时不会有中断发生;处理按键操作的时间足够长,长于一次按键操作的时间(大概是几百ms)。

情况三

和情况二类似,按下->触发一次中断(下降沿中断)->处理。。。->松手->再次触发中断(由于松手抖动,而且松手抖动产生中断不固定,有时有有时无)
解决方法:双边沿中断,按下一个中断,松手一个中断(不管是由于下降沿还是上升沿),保证中断确定!

总体来说,建议的解决办法是:

按键两端并联一个0.1uF电容,可以大幅度减少抖动发生
程序中添加延时检测:检测到按键中断后,过50ms左右检测引脚电平。
如果中断是检测按键按下:如果检测到高电平,说明刚刚发生了1型按键抖动,此次按键中断忽略不计;如果是低电平,可以判断发生了按键事件。另外,应在处理完按键事件后再清除按键事件标志,如此可以避免在处理过程中发生的2型抖动所引发的误判。
如果中断是检测按键抬起:如果检测到高电平,可以判断发生了按键事件;如果是低电平,说明刚刚发生了2型按键抖动,此次按键中断忽略不计,继续等待抬起动作。检测按键抬起时似乎难以判断1型按键抖动,不过并上电容后基本不会发生这种抖动。

参考文章:http://www.mamicode.com/info-detail-2349904.html再次基础上添加情况3
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值