jianping-sun 发表于 2015-5-1 22:41
现在还有一个问题啊。。。。用的是定时器50ms中断一次去扫描键值,扫描两次如果键值一样才处理键值,但是 ...
你理解错了。
如果你用下降沿中断,你软件延时,中断触发依旧是存在的,并不会因为你的延时就不存在中断触发了,就算是用软件去关中断,之前也抖了N次了。
但是既然存在中断按键这种操作,并且必须操作,就有解决办法,如果主程序死循环连续采样数据,就不适合用轮询方式查询按键,因为大部分时间,是不需要按键操作的,会打断主程序采样数据的连续性,导致结果错误。
中断下降沿触发中断,你在中断函数里不要立刻去延时啥的,先做个判断,判断GPIO是不是低电平。然后用一个while循环和变量i 与 GIO的状态 与 的值,判断按键是不是弹起,以及按下的时间长短。
这样就实现了所谓的按键去抖,和 是短按键还是长按键。
简单的说就是下降沿处罚,低电平判断。查询低电平的时间。因为进入中断后有一次判断,按键抖动引起的快速跳变的中断进入后因什么操作都没有,于是会退出中断,只有最后一个下降沿有效。
网上的答案都是千篇一律,我没看到有人解释中断按键的正确方法,都是用千篇一律的让用轮询。