<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        單片機按鍵檢測函數

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年02月18日   【字體:

         /*******************************************************************
         函數功能:判斷某一按鍵的狀態;
         返回值:0x00-未按鍵,0x01-短按鍵,0x02-長按鍵;(本程序不設連發功能)
         注意:本長短按鍵是在同一按鍵上實現;
         長按鍵是持續按下2秒后認為是長按鍵,此時可以執行按鍵功能程序,必須釋放
         按鍵后才可以再次執行按鍵判斷;
         短按鍵是按下時間在2秒以內并釋放的為短按鍵,含20ms的防抖,按鍵執行是在
         按鍵釋放后執行的;
         為了定時方便,本函數是每10ms執行一次的,如果執行周期有變,注意更改相
         關變量。
         (可以將此函數以結構體形式擴展為多個通道檢測,本處測試函數未做。)
        ********************************************************************/
        uchar get_sw_state(void)
        {
          static uchar count=0; //按鍵狀態計時;
         static uchar long_key=0; //長按鍵標志;
         static uchar t50ms_for_err=0; //50ms防釋放干擾或人認抖動,即有按鍵時,須檢測到釋放時間達到50ms才認為真的是釋放;
         uchar value_tmp=0x00; //鍵值;
         
          if(NO_SWITCH)
            {
          if(t50ms_for_err!=0) t50ms_for_err--;
          if(0==t50ms_for_err) //確實釋放;
          {
           if(0==long_key) //不可省,防止按鍵一直不放,count從TOP值又到了BOTTOM重新計數;
           {
            if(count<2) value_tmp=0x00; //防抖;
            else if(count<200) value_tmp=0x01; //2秒以內釋放為短按鍵;
           }
           count=0; //計數清零;
           long_key=0;
          }
         }
         else
         {
          count++;
          if(count>2) t50ms_for_err=5;
          if((200==count)&&(0==long_key))
          {
           long_key=1;
           value_tmp=0x02;
          }
         }
         return value_tmp;
        }

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮