久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1105|回復: 0
打印 上一主題 下一主題
收起左側

單片機根據按鍵按下的狀態獲得按鍵標志源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:616230 發表于 2020-3-3 15:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. idata KEY_FLAG        key_flag;

  2. /************************************************************
  3. * 函數名稱:按鍵掃描
  4. * 描    述:根據按鍵按下的狀態獲得按鍵標志
  5. * 輸    入:無
  6. * 輸    出:無
  7. ************************************************************/
  8. void key_scan(void)
  9. {
  10.         uint8_t key_value = 0;
  11.         static uint8_t key_temp = 0;
  12.         static uint8_t status = KEY_SET;

  13.         key_value = P0&0x04;

  14.         switch(status)
  15.         {
  16.                 case KEY_SET:        if (key_value)
  17.                                                 {
  18.                                                         time_out = 0;
  19.                                                         debounce_time = 320;        // 消抖定時時間32ms
  20.                                                         status = KEY_UP;
  21.                                                 }
  22.                                                 break;
  23.                
  24.                 case KEY_UP:        if (debounce_time_flag)
  25.                                                 {
  26.                                                         if (key_value == key_temp)
  27.                                                                 status = KEY_DOWN;
  28.                                                         else
  29.                                                                 status = KEY_SET;
  30.                                                 }
  31.                                                 break;
  32.                
  33.                 case KEY_DOWN:        if (key_value == key_temp)                        // 還是上次的按鍵值
  34.                                                 {
  35.                                                         long_time = 10000;                                // 被按下沒開始長按計時
  36.                                                         status = KEY_RELEASE;
  37.                                                 }
  38.                                                 else if (!key_value)
  39.                                                         status = KEY_SET;
  40.                                                 break;
  41.                         
  42.                 case KEY_RELEASE:        if (!long_time_flag)
  43.                                                         {
  44.                                                                 if ((key_value != key_temp)&&(key_value == 0))        // 放開的時候
  45.                                                                 {
  46.                                                                         key_flag.thick++;
  47.                                                                         time_out = 2000;
  48.                                                                         long_time = 0;
  49.                                                                         status = KEY_SET;
  50.                                                                 }
  51.                                                         }
  52.                                                         else
  53.                                                         {
  54.                                                                 key_flag.long_press = 1;
  55.                                                                 if (key_value == 0)
  56.                                                                 {
  57.                                                                         status = KEY_SET;
  58.                                                                         key_flag.long_press = 0;
  59.                                                                         long_time_flag = 0;
  60.                                                                 }
  61.                                                         }
  62.                                                         break;
  63.                                                 
  64.                 default:               
  65.                                                 break;        
  66.         }
  67.         
  68.         key_temp = key_value;
  69.         
  70.         if (long_time_flag||time_out_flag)
  71.         {
  72.                 key_temp = 0;
  73.         }
  74. }

  75. /************************************************************
  76. * 函數名稱:按鍵任務處理
  77. * 描    述:根據按鍵掃描的結果處理對應的按鍵任務
  78. * 輸    入:無
  79. * 輸    出:無
  80. ************************************************************/
  81. void key_task(void)
  82. {
  83.         /*按鍵任務*/
  84.         if (time_out_flag)
  85.         {
  86.                 time_out_flag = 0;
  87.                 switch(key_flag.thick)
  88.                 {
  89.                         case 1:        
  90.                                         user_data_fill(pwm_value);                //初始化要發送的5bytes數據
  91.                                         RF_Send_Data_To_hardware();                //RF 開始發送給硬件        
  92.                                         key_flag.thick = 0;
  93.                                         break;
  94.                         
  95.                         default:        
  96.                                         key_flag.thick = 0;
  97.                                         break;
  98.                 }
  99.         }

  100.         if (key_flag.long_press == 1)        // 如果長按釋放了,清楚長按標志位
  101.         {
  102.                 user_flag |= 0x01;                // PWM調光標志置位
  103.         }
  104.         else
  105.                 user_flag &= 0xFE;                // PWM調光標志清零

  106. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91.xxx.高清在线 | 成人影视网 | 一二三在线视频 | 精品欧美一区二区中文字幕视频 | 欧美一级视频免费看 | 欧美视频成人 | 亚洲一区二区欧美 | 黄免费观看视频 | 日韩中文字幕2019 | 日本精品一区二区三区在线观看视频 | 国产高清精品一区二区三区 | 91久久精品 | 国产精品免费观看 | 日韩成人在线播放 | 国产一区二区三区 | 亚洲狠狠 | 男女激情网站免费 | 国产精品爱久久久久久久 | 免费国产一区二区 | 狠狠操在线 | 日韩精品国产精品 | 欧美日韩国产高清 | 国产精品欧美精品 | 成人午夜激情 | 在线视频三区 | 国产精品久久久久久久久 | 成人在线观看免费 | 亚洲a级| 成人永久免费 | 少妇午夜一级艳片欧美精品 | 精品一区av| 久久久久久久一区 | 亚洲精品中文字幕 | 亚洲精品一区二区三区在线 | 国产欧美一区二区三区日本久久久 | 欧美一区二区三区日韩 | 99视频在线免费观看 | 久久亚洲一区二区 | 紧缚调教一区二区三区视频 | 国产成人在线免费 | 久久久久久久一区 |