首页 > 其他 > 详细

按键消抖和矩阵键盘的扫描进阶

时间:2020-12-12 18:28:27      阅读:43      评论:0      收藏:0      [点我收藏+]

在按下按键的时候,在闭合和断开的瞬间有一连串的抖动。

这样一次按下的动作可能会触发很多次。

所以,当检测到按键状态变化时,不是立即去响应动作,而是先等待闭合或断开稳定后再进行处理。 按键消抖可分为硬件消抖和软件消抖。

消除抖动有软件和硬件两种方法。

通常我们用软件消抖。

最简单的消抖原理,就是当检 测到按键状态变化后,先等待一个 10ms 左右的延时时间,让抖动消失后再进行一次按键状 态检测,如果与刚才检测到的状态相同,就可以确认按键已经稳定的动作了。

但是。

当我们的工程庞大的时候,这种的方法就会出现某些问题。

while(1) 这个主循环要不停的扫描各种状态值是否有发生变化,及时的进行任务调度,如果程序中间 加了这种 delay 延时操作后,很可能某一事件发生了,但是我们程序还在进行 delay 延时操作 中,当这个事件发生完了,程序还在 delay 操作中,当我们 delay 完事再去检查的时候,已经 晚了,已经检测不到那个事件了。

就出现了按键消抖的优化:

启用定时器中断,每 2ms 进一次中断,扫描 一次按键状态并且存储起来,连续扫描 8 次后,看看这连续 8 次的按键状态是否是一致的。 8 次按键的时间大概是 16ms,这 16ms 内如果按键状态一直保持一致,那就可以确定现在按 键处于稳定的阶段,而非处于抖动的阶段。

这样就会避免delay占用单片机程序执行时间。

而是变成了按键状态判定,而不是按键过程判定。

这只是按键消抖算法之一。

 

 

 

下面是矩阵按键的扫描:

 

通常我们会先把列线拉高把行线拉低,然后等待按键按下判断那一列被拉低,用switch语句记录key值。

再把行线拉高把列线拉低,等待行线的值变换,然后记录key值,两个key值相加,得到最后的key值。

 

按键消抖和矩阵键盘的扫描进阶

原文:https://www.cnblogs.com/Brimon-zZY/p/14051883.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!