<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 單片機 >> 正文

      單片機矩陣鍵盤掃描的兩種方式

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2012-4-26

      矩陣鍵盤掃描方式:

      第一種:逐行掃描法,就是一行一行的掃描。實現代碼如下(鍵盤連接P2口):

      #define NO_KEY 0XFF
      #define KEY_LO()  P2 &= 0XF0
      #define KEY_HI()  P2 |= 0X0F
      #define KEY_L(i)  P2 &= ~(1<<i)
      #define KEY_RD()  ((P2>>4) & 0x0f)

      UINT8 OnceKey(void)
      {
       UINT8 line = 0;
       UINT8 key = NO_KEY;//key value
       KEY_LO();
       if (KEY_RD() == 0X0F)
       {
        KEY_HI();
        return NO_KEY;
       }

       for (line=0; line<4; line ++)
       {
        KEY_HI();
        KEY_L(line);
        key = KEY_RD();
        switch (key)
        {
         case ROW_FIRST:
          key = 4*line + 0;
          break;
         case ROW_SECOND:
          key = 4*line + 1;
          break;
         case ROW_THIRD:
          key = 4*line + 2;
          break;
         case ROW_FOURTH:
          key = 4*line +3;
          break;
         default :
          key = 0x0f;
          break;
        }
        if (key < 0x10)
        {
         return key;
        }
       }
       return NO_KEY;
      }

      第二種,線性反轉法。就是行和列分別讀出。實現代碼如下:

      #define CVT(i) ((i)==(~1)&0x0f)? 0: ((i)==(~2)&0x0f)? 1: ((i)==(~4)&0x0f)? 2: ((i)==(~8)&0x0f)? 3: 4;

      #define KEY0_3HI() P2 |= 0X0F
      #define KEY0_3LO() P2 &= 0XF0
      #define KEY4_7HI() P2 |= 0XF0
      #define KEY4_7LO() P2 &= 0X0F
      #define KEY0_3RD() (P2 & 0X0F)
      #define KEY4_7RF() ((P2>>4) & 0X0F)

      UINT8  OnceKey(void)
      {
       UINT8 line = NO_KEY;
       UINT8 row = NO_KEY;
       UINT8 key;
       KEY0_3HI();
       KEY4_7LO();
       line = KEY0_3RD();//讀入行的值
       if (0x0f == line)
       {
        key = NO_KEY;
       }
       else
       {
        KEY0_3LO();
        KEY4_7HI();
        row = KEY4_7RD();//讀入列的值
        if (0x0f == row)
        {
         key = NO_KEY;
        } 
        else
        {
         key = CVT(line)*4 + CVT(row);
        }
       }
       KEY0_3HI();
       KEY4_7HI();
       return key;
      }

      Tags:單片機,矩陣鍵盤,掃描方式  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 色噜噜狠狠色综合日日| 97久久天天综合色天天综合色| 亚洲综合激情视频| 亚洲私人无码综合久久网| 六月婷婷缴清综合在线| 区二区三区激情综合| 久久精品亚洲综合一品| 亚洲综合区小说区激情区| 99久久综合精品免费| 国产亚洲欧洲Aⅴ综合一区| 一本色道久久综合无码人妻| 狠狠综合久久综合中文88| 亚洲精品综合久久中文字幕| 伊人色综合久久天天网| 国产成人综合网在线观看| 亚洲综合日韩久久成人AV| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 色综合天天综合网国产成人| 伊人色综合久久88加勒| 热の无码热の有码热の综合| 天天综合色天天综合| 亚洲综合区图片小说区| 亚洲综合一区二区国产精品| 久久婷婷五月综合97色直播| 久久天天日天天操综合伊人av| 亚洲 自拍 另类小说综合图区| 亚洲精品国产综合久久久久紧| 97色婷婷成人综合在线观看| 一本一本久久aa综合精品 | 亚洲乱码中文字幕综合234| 人人狠狠综合久久亚洲| 一本色综合网久久| 色天天天综合色天天碰| 伊人色综合久久大香| 色欲天天天综合网| 一本久道综合色婷婷五月| 亚洲国产成人久久综合区| 久久综合久久性久99毛片| 亚洲精品第一国产综合精品| 天天欲色成人综合网站| 久久综合久久综合久久|