标题: 单片机按键按下判断为什么识别两次? [打印本页]

作者: SKYLAR123    时间: 2019-11-28 14:18
标题: 单片机按键按下判断为什么识别两次?
if((P1&0x0f)!=0x0f)      //列线中有一位为低电平“0”,说明有键按下
         delay20ms();           //延时一段时间、软件消抖
      if((P1&0x0f)!=0x0f)      //确实有键按下
为什么按键的判断要两次



作者: 20151343219    时间: 2019-11-28 17:40
加延时是为了消除机械按键的抖动
作者: tyrl800    时间: 2019-11-28 17:46
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动.



按键稳定闭合时间长短是由操作人员决定的,通常都会在100ms以上,刻意快速按的话能达到40-50ms左右,很难再低了。

抖动时间是由按键的机械特性决定的,一般都会在10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。当检测到按键状态变化时,不是立即去响应动作,而是先等待闭合或断开稳定后再进行处理。

 
作者: a244300682    时间: 2019-11-28 18:44
防抖的,判断是不是真的按下了。
作者: HUFUHA2    时间: 2019-11-28 18:51
如楼上所说,为了消抖
作者: pcbboy    时间: 2019-11-28 20:01
软件消抖
作者: 周海姬    时间: 2019-11-28 20:02
因为这是是个消抖的原理:第一句按下判断之后执行的延迟函数时间内有无数次抖动按下而时间过去后稳定按下了再执行第二次判断确定是否真的按下
作者: 899976025    时间: 2019-11-28 21:11
所谓消抖为波形在按下或弹开瞬间为不稳定状态,20ms左右后为稳定状态高电平或低电平。没有延时的话那么无法判定是按下或还是弹开。
作者: a779097484    时间: 2019-11-29 07:34
file:///C:/Users/XXX.Charlotte/Desktop/%E5%9B%BE%E7%89%872.png

软件延时消抖
在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10ms的子程序后,检测该行线为高电平,说明按键确实已经松开。采取本措施,可消除两个抖动期t1和t3的影响。
作者: liuxuhe    时间: 2019-11-29 11:31
按两次消抖不怎么样,我以前运算块的 直接检测5次

作者: 1234c    时间: 2019-11-29 12:36
延时去抖
作者: 1255230    时间: 2019-11-29 12:50
延时销抖,避免因抖动或接触不良导致程序执行
作者: 冇妖气    时间: 2019-11-29 15:07
软件消抖,delay20ms是延时函数
作者: lemonhe    时间: 2019-11-29 16:55
由于开关是机械式开关,会存在误触和接触不良的情况,延时识别两次是为了消除抖动,增加开关识别的可靠性。
作者: SKYLAR123    时间: 2019-12-3 10:04
tyrl800 发表于 2019-11-28 17:46
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭 ...

懂了,谢谢
作者: zhy123654    时间: 2019-12-3 10:32
不判断两次也是可以的,但是我在某些特殊硬件的时候会不可以,比如说在旋转编码器的时候就容易出现问题
作者: 张兴田    时间: 2019-12-3 13:34
为了消除抖动
作者: 张x小呀    时间: 2019-12-3 13:57
确认按键是否按下,防止误操作
作者: codeyqw    时间: 2019-12-3 14:32
这是按键软件滤波,加延时防抖,避免误触发
作者: codeyqw    时间: 2019-12-3 14:34
这是软件滤波,按键防抖避免误触发
作者: zxb486    时间: 2019-12-3 15:04
开关两边并联一个电容可以解决
作者: PDDDF    时间: 2019-12-3 15:24
软件消抖
作者: SKYLAR123    时间: 2019-12-4 15:26
zxb486 发表于 2019-12-3 15:04
开关两边并联一个电容可以解决

这是一个解决办法,没有用过,可以试试
作者: 漆黑de自由    时间: 2019-12-4 20:24
延时销抖处理,用于判断机械按键是否真实按下...   看了下大神说的都是正确定的,都给100分  哈哈




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1