不一样的按键延时思想

2020-01-25 15:29发布

最近在学习嵌入式的驱动程序,在编写按键程序时,具体思路是这样的,利用外部中断读取按键按下,在中断服务程序里面实现开启定时器,并且初始化它,当定时器到达10毫秒后按键值有效。这里技巧不管你抖动多少次,都不会立即让键值有效,必须在最后一个进入中断服务程序的都抖动延时了10毫秒才有效,这中思路与传统思路不同!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
23条回答
wear778899
2020-01-28 03:01
补充一下7搂的思路   假设按键 抬起为1  按下为0    则按键按下一次的采样值可以大致描述为(想象成一个按下的波形经过IO读取高低点平  这时抖动波形被IO自动比较成1或者0-数字化)   111111111010110000000101010111111111(假设N毫秒等间隔采样一次)

全部是1时为抬起   全部是0时为按下   10穿插存在时为抖动

于是可以认为一直采样到1时没有按键   连续采样到X个0时有按键(X的大小用于确定按键按下)  采样到一堆混合的0 1  说明在抖动

则可定义 变量 key = 0   当IO=1时  令 key = 0
当IO=0 时  key++

于是发生111111时  key = 0
发生 10101001010 时 key 被间隔的 IO=1 清零

发生00000时  key++     key 的最大值取决于 连续0的个数

if key>x 时认为按键按下    X取决于  采样间隔  合适的X值 可以实现非常灵敏 并且消抖完美的按键体验

另外  长按  按键也可以通过 X 积累到更大的值 实现   还有例如  NDS游戏机中口袋妖怪等游戏中常见的  长按变速按键。。。。等等

一周热门 更多>