久久久久久久999_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;  //返回按鍵值
  
}

關閉窗口

相關文章

主站蜘蛛池模板: 夜夜精品视频 | 亚洲免费视频观看 | 在线观看www | 精品欧美在线 | 欧美综合在线观看 | 中文字幕在线视频观看 | 欧美一区二区三区在线视频 | 青青草91| 视频在线一区 | 三级视频网站 | 在线视频亚洲 | 亚洲最大的网站 | 久久久青青| 秋霞一区二区 | 欧美高清一区二区 | 亚洲乱码在线 | 国产精品免费在线播放 | 四虎成人网| 日韩中文字幕第一页 | 日韩视频免费观看 | 欧美激情一区二区三区 | 免费国产黄色 | 久久视频免费 | 一级片国产| 五月天婷婷社区 | 欧美日韩国 | 久草资源 | 欧美激情免费 | 色综合久久天天综合网 | 国产欧美日韩一区 | 性史性dvd影片农村毛片 | 亚洲天天操 | 成人在线观看网站 | 欧美另类激情 | 一区二区三区蜜桃 | 超碰免费97 | 丝袜美腿亚洲综合 | 色妞色视频一区二区三区四区 | 在线观看视频国产 | 在线免费观看av网站 | 成年人午夜视频 |