<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 個字
      [ 查看全部 ] 網友評論
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 婷婷激情五月综合| 思思91精品国产综合在线 | 一本色道久久88亚洲精品综合 | 伊人丁香狠狠色综合久久| 91精品综合久久久久久五月天| 久久综合亚洲色HEZYO社区| 色婷婷五月综合欧美图片| 伊人久久亚洲综合影院| 老色鬼久久亚洲AV综合| 色综合久久88色综合天天 | 亚洲一本综合久久| 亚洲综合色视频在线观看| 色婷婷综合久久久久中文 | 99综合电影在线视频好看| 一本大道久久a久久精品综合| 亚洲AV成人潮喷综合网| 亚洲AV日韩综合一区尤物| 无码专区久久综合久中文字幕| 一本色道久久综合狠狠躁篇| 99久久国产综合精品2020| 一本色道久久99一综合| 五月婷婷开心综合| 婷婷丁香五月天综合东京热| 亚洲综合久久久久久中文字幕| 亚洲色偷偷综合亚洲AVYP| 精品无码综合一区| av一本久道久久综合久久鬼色| 精品久久久久久亚洲综合网| 亚洲国产欧洲综合997久久| 久久婷婷是五月综合色狠狠| 亚洲综合在线成人一区| 伊人色综合久久天天| 色噜噜成人综合网站| 亚洲av成人综合网| 色噜噜狠狠狠狠色综合久不| 色噜噜成人综合网站| 国产精彩对白综合视频| 狠狠久久综合伊人不卡| 区三区激情福利综合中文字幕在线一区| 卡通动漫第一页综合专区| 亚洲国产成人久久综合野外|