找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6640|回复: 23
收起左侧

单片机按键按下判断为什么识别两次?

  [复制链接]
ID:636538 发表于 2019-11-28 14:18 | 显示全部楼层 |阅读模式
if((P1&0x0f)!=0x0f)      //列线中有一位为低电平“0”,说明有键按下
         delay20ms();           //延时一段时间、软件消抖
      if((P1&0x0f)!=0x0f)      //确实有键按下
为什么按键的判断要两次


回复

使用道具 举报

ID:584771 发表于 2019-11-28 17:40 | 显示全部楼层
加延时是为了消除机械按键的抖动
回复

使用道具 举报

ID:275826 发表于 2019-11-28 17:46 | 显示全部楼层
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动.



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

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

 
回复

使用道具 举报

ID:648521 发表于 2019-11-28 18:44 | 显示全部楼层
防抖的,判断是不是真的按下了。
回复

使用道具 举报

ID:150776 发表于 2019-11-28 18:51 来自触屏版 | 显示全部楼层
如楼上所说,为了消抖
回复

使用道具 举报

ID:25310 发表于 2019-11-28 20:01 | 显示全部楼层
软件消抖
回复

使用道具 举报

ID:651885 发表于 2019-11-28 20:02 | 显示全部楼层
因为这是是个消抖的原理:第一句按下判断之后执行的延迟函数时间内有无数次抖动按下而时间过去后稳定按下了再执行第二次判断确定是否真的按下
回复

使用道具 举报

ID:647528 发表于 2019-11-28 21:11 | 显示全部楼层
所谓消抖为波形在按下或弹开瞬间为不稳定状态,20ms左右后为稳定状态高电平或低电平。没有延时的话那么无法判定是按下或还是弹开。
回复

使用道具 举报

ID:382297 发表于 2019-11-29 07:34 | 显示全部楼层
file:///C:/Users/XXX.Charlotte/Desktop/%E5%9B%BE%E7%89%872.png

软件延时消抖
在检测到有键按下时,该键所对应的行线为低电平,执行一段延时10ms的子程序后,确认该行线电平是否仍为低电平,如果仍为低电平,则确认该行确实有键按下。当按键松开时,行线的低电平变为高电平,执行一段延时10ms的子程序后,检测该行线为高电平,说明按键确实已经松开。采取本措施,可消除两个抖动期t1和t3的影响。
回复

使用道具 举报

ID:641629 发表于 2019-11-29 11:31 | 显示全部楼层
按两次消抖不怎么样,我以前运算块的 直接检测5次
回复

使用道具 举报

ID:652296 发表于 2019-11-29 12:36 来自触屏版 | 显示全部楼层
延时去抖
回复

使用道具 举报

ID:525068 发表于 2019-11-29 12:50 | 显示全部楼层
延时销抖,避免因抖动或接触不良导致程序执行
回复

使用道具 举报

ID:629448 发表于 2019-11-29 15:07 | 显示全部楼层
软件消抖,delay20ms是延时函数
回复

使用道具 举报

ID:344335 发表于 2019-11-29 16:55 | 显示全部楼层
由于开关是机械式开关,会存在误触和接触不良的情况,延时识别两次是为了消除抖动,增加开关识别的可靠性。
回复

使用道具 举报

ID:636538 发表于 2019-12-3 10:04 | 显示全部楼层
tyrl800 发表于 2019-11-28 17:46
通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭 ...

懂了,谢谢
回复

使用道具 举报

ID:437615 发表于 2019-12-3 10:32 来自触屏版 | 显示全部楼层
不判断两次也是可以的,但是我在某些特殊硬件的时候会不可以,比如说在旋转编码器的时候就容易出现问题
回复

使用道具 举报

ID:476030 发表于 2019-12-3 13:34 | 显示全部楼层
为了消除抖动
回复

使用道具 举报

ID:591676 发表于 2019-12-3 13:57 | 显示全部楼层
确认按键是否按下,防止误操作
回复

使用道具 举报

ID:485327 发表于 2019-12-3 14:32 | 显示全部楼层
这是按键软件滤波,加延时防抖,避免误触发
回复

使用道具 举报

ID:485327 发表于 2019-12-3 14:34 | 显示全部楼层
这是软件滤波,按键防抖避免误触发
回复

使用道具 举报

ID:118110 发表于 2019-12-3 15:04 | 显示全部楼层
开关两边并联一个电容可以解决
回复

使用道具 举报

ID:601478 发表于 2019-12-3 15:24 | 显示全部楼层
软件消抖
回复

使用道具 举报

ID:636538 发表于 2019-12-4 15:26 | 显示全部楼层
zxb486 发表于 2019-12-3 15:04
开关两边并联一个电容可以解决

这是一个解决办法,没有用过,可以试试
回复

使用道具 举报

ID:656073 发表于 2019-12-4 20:24 | 显示全部楼层
延时销抖处理,用于判断机械按键是否真实按下...   看了下大神说的都是正确定的,都给100分  哈哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表