找回密码
 注册
关于网站域名变更的通知
查看: 254|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-3 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
if((P1&0x0f)!=0x0f)      //列线中有一位为低电平“0”,说明有键按下
- i+ Q' o7 ~- a* ?9 `8 v, T- q- i         delay20ms();           //延时一段时间、软件消抖& I+ k6 G$ k0 R& Q' B
      if((P1&0x0f)!=0x0f)      //确实有键按下% B8 M/ W, R1 d1 u8 ]
为什么按键的判断要两次+ H' {( W1 E/ ~. _( w4 d7 @* j
  • TA的每日心情
    开心
    2023-5-15 15:14
  • 签到天数: 1 天

    [LV.1]初来乍到

    推荐
    发表于 2019-12-3 13:40 | 只看该作者
    , h2 c4 p, b$ A& P
    通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动.
    ) c( P7 B+ C3 ~) l. a: [( w7 s8 G) E9 n+ ~8 o- f$ N5 V

    # ^5 u# C. k. Q$ d8 U
    ' B; U7 }7 N& H; l. v7 H+ x按键稳定闭合时间长短是由操作人员决定的,通常都会在100ms以上,刻意快速按的话能达到40-50ms左右,很难再低了。
    8 k! K6 k5 i$ k* G$ E+ i, t
    8 B3 ], w& z, K8 b: f! _+ m抖动时间是由按键的机械特性决定的,一般都会在10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理。当检测到按键状态变化时,不是立即去响应动作,而是先等待闭合或断开稳定后再进行处理。

    该用户从未签到

    2#
    发表于 2019-12-3 13:39 | 只看该作者

    # j+ D6 `# e. j0 F3 {, \& S* L加延时是为了消除机械按键的抖动

    该用户从未签到

    4#
    发表于 2019-12-3 13:43 | 只看该作者

    0 h8 i8 k3 {- V9 N因为这是是个消抖的原理:第一句按下判断之后执行的延迟函数时间内有无数次抖动按下而时间过去后稳定按下了再执行第二次判断确定是否真的按下
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-26 21:05 , Processed in 0.109375 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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