<output id="zcubm"></output>
<tt id="zcubm"><button id="zcubm"></button></tt>
      <meter id="zcubm"><delect id="zcubm"><source id="zcubm"></source></delect></meter>
      <listing id="zcubm"></listing>

      1. 你好,游客 登录 注册 搜索

        背景:
        阅读内容

        单片机按键软件可靠性的提高

        [日期:2018-03-07] 来源:  作者:广东 尹华军 [字体: ]

         

          假设单片机外接十六个按键,十六个按键可以是通过八个10口接入的4*4矩阵按键,也可以是通过一个模数转换器(一个10口)接入的十六个按键,单片机“按键软件”将十六个按键“按下”时分别转换成0至15共十六个键值,没有按键“按下”时(即?#21363;?#20110;“释放”状态),键值为16。由于按键“按下”或“释放”时会产生“抖动”,或偶尔受到“外部干扰”,会产生部分“假键值”,本文介绍过滤掉这些“假键值”提高“按键软件”可靠性的方法。
          
          按键“按下”或“释放”时产生“抖动”,或偶尔受到的“外部干扰”,?#20013;?#26102;间一般都小于30毫秒,单片机每隔10毫秒获取_次键值,上上次获取的键值、上次获取的键值、本次获取的键值,构成连续三次键值,过滤“假键值”提高“按键软件”可靠性的方法如下:
          
          1.若连续三次键值不相同,就判为“不稳定的键值”,“过滤后的本次获取的键值”简称“G”为16(即键值稳定前,等效为“释放”状态)。
          
          2.若连续三次键值相同,就判为“稳定的键值W”,此时:若与“上次的稳定的键值”不同,就判为新的键值G,键值G为“稳定的键值W”。若与“上次的稳定的键值”相同,则。
          
          A.若该键值对应的按键不允许“按键长时间按下表示多次按键”,则键值G为16。
          
          B.若该键值对应的按键允许“按键长时间按下表示多次按键”,则:
          
          a)?#20013;?#26102;间小于或等于1000毫秒,键值G为16(即等效“释放”状态)。
          
          b)?#20013;?#26102;间大于1000毫秒,键值G为“稳定的键值W”(即等效相同的键第二次“按下”)。
          
          c)?#20013;?#26102;间大于1500毫秒,键值G为“稳定的键值W”(即等效相同的键第三次“按下”)。
          
          d)?#20013;?#26102;间大于2000毫秒,键值G为“稳定的键值W”(即等效相同的键第四次“按下”)e)……假设:
          
          1.本次获取的键值放在51单片机的累加器A中:
          
          2.只有键值8、9对应的按键允许“按键长时间按下表示多次按键”。
          
          3.程序占用23H、22H、21H、20H四个DATA区存储单元。
          
          23H中存放“10毫秒”剩余?#38382;?#29992;于计算“稳定的键值”的?#20013;?#26102;间。累加器A、22H、21H中存放最近的连续三次键值。20H中存放“上次的稳定的键值”。
          
          4.键值过滤子程序运行结束后,过滤后的键值G存放在累加器A中。
          
          过滤“假键值”提高“按键软件”可靠性的“键值过滤子程序KEY_VAL-UE_FILTER”如下:
          
          KEY_VALUE_FILTER:
          
          CJNE A,22H, KEY_VALUE_FIL-TER_1CJNE, A,21H,KEY_VALUE_FIL-TER_1CJNE A,20H, KEY_VALUE_FIL-TER_3DJNZ 23H, KEY_VALUE_FIL-TER_2MOV 23H,#50;50次循环的时间,即500毫秒CJNE A,#08H,$+4;判断长时间按下的键值是否为8RETCJNE A,#09H,KEY_VALUE_FIL-TER_2;判断长时间按下的键值是否为9RETKEY_VALUE_FILTER_1:
          
          XCH A,22HXCH A,21HKEY_VALUE_FILTER_2:
          
          MOV A,#16RETKEY_VALUE_FILTER_3:
          
          MOV 20H,AMOV 23H,#100;初始化,100次循环的时间,即1000毫秒RET小结:
          
          1.本文的过滤“假键值”提高“按键软件”可靠性的方法,经实践验证,具有非常好的抗“抖动”抗“外部干扰”效果。
          
          2.“按键长时间按下表示多次按键”在设置连续性?#38382;?#20013;非常实用,如设置电子时钟的初始时间,按一下,加1,再按一下,再加1,若按下不放,可快速连续增加,增加速度可通过23H存储单元的值(即本文中的1000毫秒和500毫秒)进行改变。

             往下看有更多相关资料

        推荐文章 收藏 推荐 打印 | 整理:嘉嘉宝宝 | 阅读:
        查看相关资料       单片机 
        专题文章
        热门评论

        天津快乐十分一定牛
        <output id="zcubm"></output>
        <tt id="zcubm"><button id="zcubm"></button></tt>
            <meter id="zcubm"><delect id="zcubm"><source id="zcubm"></source></delect></meter>
            <listing id="zcubm"></listing>

            1. <output id="zcubm"></output>
              <tt id="zcubm"><button id="zcubm"></button></tt>
                  <meter id="zcubm"><delect id="zcubm"><source id="zcubm"></source></delect></meter>
                  <listing id="zcubm"></listing>