亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

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

單片機與4x4鍵盤 去抖 松手檢測程序

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

剛寫的一個4*4 鍵盤, 去抖   松手檢測程序。 項目中要用4*4 鍵盤,掃描的程序有。但是去抖,和松手檢測的程序沒有,那么為了提高效率,可靠性,以及更加合理化。到網上找了一些關于”狀態機“的資料,按照它的思路寫了一個,寫了半天,寫好一個,經過特發帖紀錄一下。


//對按鍵掃描的值  進行處理  去抖  松手檢測
uint8_t key_scan(void)
{
 static uint8_t key_state = 0;
 static uint8_t key_num_flag1=0;


 uint8_t temp_key_num=0;
  uint8_t return_key_num=0;


 temp_key_num=KeyMap(); //讀取4*4 鍵盤返回的按鍵值  不要去抖


 switch(key_state) //檢測狀態
 {
  case key_state_0:
   if(temp_key_num!=0)  //如果按鍵返回不是0  說明有按鍵按下
   {
    key_num_flag1=temp_key_num;  //記錄下 第一次按鍵按下的值
      key_state=key_state_1;  //進入下一個狀態  去抖
   } 
  break;


  case key_state_1:
   if(temp_key_num!=0)  //如果按鍵返回不是0  說明按鍵是按下的
   {
    if(key_num_flag1==temp_key_num) //判斷是否和上次記錄按鍵值一樣。
    {
     return_key_num=temp_key_num;  // 按鍵仍按下,賦值給 返回按鍵值


             key_state = key_state_2;        // 狀態轉換到鍵釋放態
    }
    else
    {
     key_state=key_state_0;  //回到初始狀態 
    }
   }
   else    ///沒有按鍵按下
   {
    key_state=key_state_0;  //回到初始狀態 
   } 
  break;


  case key_state_2:
            if(temp_key_num==0)  //如果沒有按鍵按下。 說明按鍵松手了
   {
    key_state = key_state_0;    //按鍵已釋放,轉換到按鍵初始態
   }
   else
   {
    return_key_num=key_num_flag1; //如果沒有松手那就返回之前記錄的值


    //如果沒有這句的話,那么返回就是0。 這個適合4*4 鍵盤掃描,假如沒有這句
    //那么只有狀態1時候返回一次return_key_num,下面就一直不返回了。
    
   }


  break;
 }


 return return_key_num;  //返回按鍵值
  
}

關閉窗口

相關文章