本帖最后由 ljz1992 于 2018-6-8 15:12 编辑 我是通过电平值来判断是否有按键按下,由于我的程序中按键支持短按、长按、连续(就像遥控器音量键那样)模式,所以想要在判断为按键确实按下时执行程序,而不是释放时执行程序。因此,突然想问一下是否需要在按键释放的时候也进行消抖。 我认为因为有按键按下的消抖程序,所以在按键释放时即使不消抖也不会被程序认为按键释放又被按下的情况。只不过会在释放时抖动的一开始就会被认为按键释放罢了。 不知道我是否还有考虑不全的方面,所以在此咨询一下大家按键释放时到底是否有必要进行消抖? |
释放需不需要消抖,得看机制。
如果程序按下消抖,是用的延时死等,取键值后紧跟着执行键码对应的操作。这种情况抬起不需要消抖。
像电脑标准行列矩阵键盘是需要消抖的,因为按下和抬起都要发键值。
因为它是循环检测,检测一次把所有键位都检测一遍,不管有多少键按下,都会记住相应状态。
根据两次状态的不同,来判断是哪个键,是抬起还是按下操作。第一、二次循环,发现有键状态变化,那么第三次检测到与第二次相同,方才认为是有效按下或抬起来动作。
评分
查看全部评分
如果没有硬件消抖,软件消抖应该是不能少的吧,你所说的原子的我不太清楚(下去我去了解一下),但是我认为他肯定也会在隔几毫秒后再检测一次按键的。如果同时使用了中断线和定时器实时检测感觉太消耗片上资源了,也只适合开发板上单例程学习,不适合拿到工程上使用吧。不过双击这个功能我倒是没有考虑到,也可以给我的程序补充上去。
1 分驱动和应用。按键扫描就是驱动;长按短按连击都是应用,两者要分开。
为什么呢?今天你要3连,明天要9连击,怎么改?今天1秒算长按,明天老板说做成2秒吧,你打算改底层驱动?
2 驱动,也就是按键扫描,只做扫描,有变化,就识别。你说要不要做松开防抖?
3 Unix/Linux的接口设计有一句通用的格言“提供机制而不是策略”。对于按键来说:你可以做长按,但是怎么长按我不管;我支持你做连击,你想多少连是你的事。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
是的,我也是这样认为的,就是担心是否会考虑的不周
他的做法: 不单单是按键GPIO的中断线 他还用一个定时器去实时检测 如此判断短按 长按 双击
主要逻辑在TIM中断里面
评分
查看全部评分
如果加上释放消抖的程序,觉得一下子复杂了好多
但是按下的时候有消抖啊,为什么还会被判为按下呢
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
1、硬件消抖;
2、软件消抖
你这种情况使用的软件消抖,所以才需要考虑释放要不要消除抖动;
如果按键不多,可以使用硬件消抖的方案,就不需要考虑这么复杂的逻辑了。
硬件消抖有很多的方法,并联电容、RS触发器等等;可以去了解一下。
评分
查看全部评分
谢谢。不过我需要控制成本,目前不考虑硬件消抖。关于硬件消抖的方法之前也有了解过。