你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

按键释放需要消抖吗  

[复制链接]
ljz1992 提问时间:2018-6-8 14:44 /
本帖最后由 ljz1992 于 2018-6-8 15:12 编辑

我是通过电平值来判断是否有按键按下,由于我的程序中按键支持短按、长按、连续(就像遥控器音量键那样)模式,所以想要在判断为按键确实按下时执行程序,而不是释放时执行程序。因此,突然想问一下是否需要在按键释放的时候也进行消抖。

我认为因为有按键按下的消抖程序,所以在按键释放时即使不消抖也不会被程序认为按键释放又被按下的情况。只不过会在释放时抖动的一开始就会被认为按键释放罢了。

不知道我是否还有考虑不全的方面,所以在此咨询一下大家按键释放时到底是否有必要进行消抖?





收藏 评论38 发布时间:2018-6-8 14:44

举报

38个回答
七哥 回答时间:2018-6-9 00:24:16
ljz1992 发表于 2018-6-8 18:52
我利用了状态机处理,如果不需要释放消抖的话,即使按键释放要执行某个动作,应该也不会有问题的。 ...

释放需不需要消抖,得看机制。

如果程序按下消抖,是用的延时死等,取键值后紧跟着执行键码对应的操作。这种情况抬起不需要消抖。

像电脑标准行列矩阵键盘是需要消抖的,因为按下和抬起都要发键值。
因为它是循环检测,检测一次把所有键位都检测一遍,不管有多少键按下,都会记住相应状态。
根据两次状态的不同,来判断是哪个键,是抬起还是按下操作。第一、二次循环,发现有键状态变化,那么第三次检测到与第二次相同,方才认为是有效按下或抬起来动作。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

ljz1992 回答时间:2018-6-8 18:47:50
本帖最后由 ljz1992 于 2018-6-8 18:48 编辑
与龙共舞 发表于 2018-6-8 15:14
其实我看原子的 在按下 释放 都没消抖
他的做法: 不单单是按键GPIO的中断线 他还用一个定时器去实时检测  ...

如果没有硬件消抖,软件消抖应该是不能少的吧,你所说的原子的我不太清楚(下去我去了解一下),但是我认为他肯定也会在隔几毫秒后再检测一次按键的。如果同时使用了中断线和定时器实时检测感觉太消耗片上资源了,也只适合开发板上单例程学习,不适合拿到工程上使用吧。不过双击这个功能我倒是没有考虑到,也可以给我的程序补充上去
wujique 回答时间:2018-6-9 11:50:50
对按键,个人有一下看法:
1 分驱动和应用。按键扫描就是驱动;长按短按连击都是应用,两者要分开。
  为什么呢?今天你要3连,明天要9连击,怎么改?今天1秒算长按,明天老板说做成2秒吧,你打算改底层驱动?
2 驱动,也就是按键扫描,只做扫描,有变化,就识别。你说要不要做松开防抖?

3 Unix/Linux的接口设计有一句通用的格言“提供机制而不是策略”。对于按键来说:你可以做长按,但是怎么长按我不管;我支持你做连击,你想多少连是你的事。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

MrJiu 回答时间:2018-6-8 14:56:36
释放不需要。。。因为再次识别的时候,会被识别消抖去除!!!

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

电子星辰 回答时间:2018-6-8 15:03:18
不需要吧,你的释放消抖可能会影响连续模式,但要不要释放消抖对长按影响应该不大。其实我觉得这个最好的办法是你直接试,最靠谱

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wudianjun2001 回答时间:2018-6-8 15:09:14
不需要,按下的时候需要处理下的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhao.zhao 回答时间:2018-6-8 15:12:33
需要的,释放时也有抖动的,会被判为按下

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

ljz1992 回答时间:2018-6-8 15:14:36
MrJiu 发表于 2018-6-8 14:56
释放不需要。。。因为再次识别的时候,会被识别消抖去除!!!

是的,我也是这样认为的,就是担心是否会考虑的不周
GKoSon 回答时间:2018-6-8 15:14:52
其实我看原子的 在按下 释放 都没消抖
他的做法: 不单单是按键GPIO的中断线 他还用一个定时器去实时检测 如此判断短按 长按 双击
主要逻辑在TIM中断里面

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

ljz1992 回答时间:2018-6-8 15:17:31
电子星辰 发表于 2018-6-8 15:03
不需要吧,你的释放消抖可能会影响连续模式,但要不要释放消抖对长按影响应该不大。其实我觉得这个最好的办 ...

如果加上释放消抖的程序,觉得一下子复杂了好多
ljz1992 回答时间:2018-6-8 15:18:27
zhao.zhao 发表于 2018-6-8 15:12
需要的,释放时也有抖动的,会被判为按下

但是按下的时候有消抖啊,为什么还会被判为按下呢
疯de_恒 回答时间:2018-6-8 15:26:40
消抖是稍微低一层,判断键值是高一层,不影响的,既然是消抖,那当然按下释放都一起解决了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

李西西 回答时间:2018-6-8 15:30:02
加上软件延时就可以了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wenyangzeng 回答时间:2018-6-8 16:02:34
如果需要利用按键释放事件执行某个操作,应该需要释放消抖。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zhao.zhao 回答时间:2018-6-8 16:13:03
我一般用定时检测,没有消抖的问题了。按键在释放时也会经历一个和按下时相同的消抖过程,既然按下时已经消抖了,释放时同样的过程再重复一次,不过这一次按键没有被判为按下。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

xiajintaord 回答时间:2018-6-8 17:01:12
按键的消抖分为两种:
1、硬件消抖;
2、软件消抖

你这种情况使用的软件消抖,所以才需要考虑释放要不要消除抖动;
如果按键不多,可以使用硬件消抖的方案,就不需要考虑这么复杂的逻辑了。

硬件消抖有很多的方法,并联电容、RS触发器等等;可以去了解一下。

评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

ljz1992 回答时间:2018-6-8 18:35:36
xiajintaord 发表于 2018-6-8 17:01
按键的消抖分为两种:
1、硬件消抖;
2、软件消抖

谢谢。不过我需要控制成本,目前不考虑硬件消抖。关于硬件消抖的方法之前也有了解过。
123下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版