• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

打破教科书上的按键检测方法

传统的教科书,无一例外都是采用delay的方法检测按键,但是这种方法有很多缺陷,今天发一贴说说,各位大侠不要见笑,初级菜鸟可以借鉴。
传统的处理方法:在第一次检测到有键按下时,执行一段延时 10ms 的子程序以后再确认该按键电平是否能保持闭合状态的电平,如果保持闭合状态电平,则确认为真正有键按下,从而消除抖动的影响. 
缺点: 
1.  传统的处理方法执行 10ms 的延时子程序,会降低程序的实时性。 
2.  传统的处理方法一次按键动作的确认,只检测两次,在高抗干扰环境下的会有按键的误动作。
建议: 
1.  建议弹跳时间为 100ms 才可有效通过 EFT 杂讯认证。 
2.  建议主程序中连续检查 100ms 的稳定低电平才可认定按键按下成立。 
3.  相同道理连续检查 100ms 高电平才可认定按键弹起。 
4.  为了保证 MCU 的执行效率,按键的检测尽量不要使用 Delay 的方式,可以考虑采用轮询检测和计时器配合的方式进行。

方法如下:
在发现低电平后,我们每一个循环(时基)去读取一次电平,并与上次进行比较,若是相同则计数器加 1,直至达到足够的次数就进行处理,否则计数器清零,重新开始。

全部回复(8)
正序查看
倒序查看
do_best
LV.2
2
2013-09-19 11:40
想法很不错,支持楼主。之前用按键就遇到问题,有时候会误操作
0
回复
黑夜11
LV.5
3
2013-09-29 21:31
@do_best
想法很不错,支持楼主。之前用按键就遇到问题,有时候会误操作
那么复杂,检测两次不见得比延时效率高
0
回复
2013-10-07 22:58

此法很有效而且有创意,我们类似问题也是这样解决的

 

0
回复
madboy21
LV.8
5
2013-10-12 17:26
100mS就太长了,够我们按几下了
0
回复
464124801
LV.4
6
2013-11-27 10:43
这方法初开的都会用吧,我就一个初学的,第一次玩单片机,写的第一个程序手电筒控制3级调光加安下3秒跳闪光我就知道用了,循环4次,
0
回复
rsszd
LV.6
7
2013-12-01 19:55

你这样的监测,我有个问题:

如果你采用计数(记够设定的次数),你的监测次数是累加,如果这个监测信号总是不稳,假如存在干扰,因为是累加,它只要够次数就动作,此时就是误判,如何避免这个问题呢?

这个方法我认为还是不够完善

0
回复
464124801
LV.4
8
2013-12-05 02:52
@rsszd
你这样的监测,我有个问题:如果你采用计数(记够设定的次数),你的监测次数是累加,如果这个监测信号总是不稳,假如存在干扰,因为是累加,它只要够次数就动作,此时就是误判,如何避免这个问题呢?这个方法我认为还是不够完善
这不是累加的,只是多判定几次,好比你按下开关是0。3S,那么4次判定就在0。2S完成,4次中有一次不成立都会从新判定4次。
0
回复
rsszd
LV.6
9
2013-12-05 12:53
@464124801
这不是累加的,只是多判定几次,好比你按下开关是0。3S,那么4次判定就在0。2S完成,4次中有一次不成立都会从新判定4次。

你实际写过调试过吗?

想法我觉得还可以,实现起来可能并不太可靠

不知你有没有实际试过?

0
回复