打印
[开发资料]

按键消抖

[复制链接]
423|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mickit|  楼主 | 2024-12-14 20:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
常用的方法是判断按键按下的时候进行一定的延时,代码如下:
((KEY==)delay_ms20;whilegpio_get)0;delay_ms20;beep)//蜂鸣器提示音}这种方法简单易懂,但是在人机交互界面的时候会有些许延迟,特别是有些队伍在智能车比赛过程中需要通过按键来修改阈值。一直点击按钮实现增减阈值,40ms的延时显得既不优雅又不顺畅。由于代码中有循环的部分,如果按键一直按下,其他程序就会收到影响,如果想做动态的界面,这种情况就会使得界面不那么丝滑。
数电中提到一种方法,运用基本SR锁存器消除机械开关触点抖动引起的脉冲输出,如下图

Q为输出
事实上,软件上也可以使用这种“锁存”的思想
这里假设高电平输出有效,status是当前按键状态,last_status是上一次的按键状态
当status=1同时last_status=0时,输出有效值
具体代码如下:
int status1=;last_status ;= (KEY;if&amp&amp!last_status{  (;}()//延迟10ms分析过程如下:
按键逻辑图
如图所示,当按键没按下时,last_status 和 status都是高电平,在①处按键按下时,由于按键抖动,status在高低电平状态反复横跳,last_status跟着跳变,此时无法满足判断条件status && !last_status,此时就算一直按住按键,也不会输出有效值,并且代码中没有使用while循环,不会影响原来的程序运行。在②处按键松开的时候满足了条件status && !last_status,这个时候由于按键的抖动,可能会多次判断到松开,所以需要延时10ms。相对于上面那种方法,延时只需要进行一次。只要按键不放开,输出值就一直“锁存”在次态,即无效输出的状态,只有改变了按键状态(即松开按键),才改变输出值。

使用特权

评论回复
沙发
wyde518| | 2024-12-16 08:45 | 只看该作者
从哪里复制来的文章,孬好也罢图片复制过来

使用特权

评论回复
板凳
ClarkLLOTP| | 2024-12-18 14:47 | 只看该作者
可以添加个电容,硬件消抖

使用特权

评论回复
地板
小小蚂蚁举千斤| | 2024-12-19 16:21 | 只看该作者
软件上也可以使用这种“锁存”的思想

使用特权

评论回复
5
twinkhahale| | 2025-1-21 14:27 | 只看该作者
按键消抖可以考虑用电容也可以,比较稳

使用特权

评论回复
6
hight1light| | 2025-1-21 15:31 | 只看该作者
一般都是用软件延时的,问题就会少很多

使用特权

评论回复
7
miltk| | 2025-1-21 17:01 | 只看该作者
现在有些芯片是支持外部中断延迟触发,是不是就跟消抖逻辑差不多啊?

使用特权

评论回复
8
hhdhy| | 2025-1-21 18:10 | 只看该作者
其实电路设计的好的话,一般消抖问题也不大

使用特权

评论回复
9
yuliangren| | 2025-1-21 19:16 | 只看该作者
大多数都是用延时消抖,大致是10ms左右

使用特权

评论回复
10
tiakon| | 2025-1-21 20:18 | 只看该作者
你就直接按照延时消抖然后再用个大致10ms基本就解决问题了

使用特权

评论回复
11
teaccch| | 2025-1-21 21:36 | 只看该作者
如果你要是硬件成本不控的话,其使用电容来做比较好

使用特权

评论回复
12
一切D都好| | 2025-1-22 08:22 | 只看该作者
消抖的原理就是让按键不要误触发,比较简单的啦

使用特权

评论回复
13
星星点点didi| | 2025-1-22 10:05 | 只看该作者
这种抖动是不是就是脉冲啊?

使用特权

评论回复
14
nqty| | 2025-1-22 14:00 | 只看该作者
我觉得就重复判断,或者读取IO好像也是可以的

使用特权

评论回复
15
星辰大海不退缩| | 2025-1-23 19:13 | 只看该作者
软件上也可以使用这种“锁存”的思想

使用特权

评论回复
16
AdaMaYun| | 2025-1-25 22:56 | 只看该作者
运用基本SR锁存器消除机械开关触点抖动引起的脉冲输出

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

1373

帖子

1

粉丝