<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機 4*4 矩陣鍵盤應用

          單片機 4*4 矩陣鍵盤應用

          作者: 時間:2016-11-26 來源:網絡 收藏
          單片機按鍵使用過程中,當鍵盤中按鍵數量較多時 為了減少端口的占用通常將按鍵排列成矩陣 形式如下圖所示,在矩陣式鍵盤中 每條水平線和垂直線在交叉處不直接連通而是通過一個按鍵加以連接,到底這樣做是出意何種目的呢? 大家看下面電路圖,單片機的整一個8位端口可以構成 4*4=16 個矩陣式按鍵 ,相比獨立式按鍵接法多出了一倍,而且線數越多區(qū)別就越明顯,假如再多加一條線就可以構成 20個按鍵的鍵盤,但是獨立式按鍵接法只能多出1個按鍵。由此可見,在需要的按鍵數量比較多時,采用矩陣法來連接鍵盤是非常合理的,矩陣式結構的鍵盤顯然比獨立式鍵盤復雜一些,單片機對其進行識別也要復雜一些。確定矩陣式鍵盤上任何一個鍵被按下通常采用行掃描法。行掃描法又稱為逐行查詢法它是一種最常用的多按鍵識別方法。因此,我們就以行掃描法為例介紹矩陣式鍵盤的工作原理。

          圖5-4(4*4矩陣式按鍵的接法)

          本文引用地址:http://www.ex-cimer.com/article/201611/321822.htm

          首先,不斷循環(huán)地給低四位獨立的低電平,然后判斷鍵盤中有無鍵按下。將低位中其中一列線(P1.0~P1.3中其中一列)置低電平然后檢測行線的狀態(tài)(高4位,即P1.4~P1.7,由于線與關系,只要與低電平列線接通,即跳變成低電平),只要有一行的電平為低就延時一段時間以消除抖動,然后再次判斷,假如依然為低電平,則表示鍵盤中真的有鍵被按下而且閉合的鍵位于低電平的4個按鍵之中任其一,若所有行線均為高電平則表示鍵盤中無鍵按下。再其次,判斷閉合鍵所在的具體位置。在確認有鍵按下后 ,即可進入確定具體閉合鍵的過程。其方法是: 依次將列線置為低電平,即在置某一根列線為低電平時,其它列線為高電平。同時再逐行檢測各行線的電平狀態(tài) ;若某行為低 ,則該行線與置為低電平的列線交叉處的按鍵就是閉合的按鍵。下面圖5-5是4*4矩陣式按鍵接法的軟件算法操作流程。

          下面程序按照上述算法流程去編寫的,其電路如圖5-6,只是在圖5-5的基礎上多加了P0端口的8只LED燈。從鍵盤中檢測到一個鍵值,然后將這個值寫到LED數碼管上顯示。

          #include

          #include

          #define uchar unsigned char

          #define uint unsigned int

          uchar temp,num;

          uchar code Dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff} ;

          //0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,0ff

          void delay(uchar ms)

          {

          int i;

          while(ms--)

          {

          for(i=0;i<100;i++) ;

          }

          }

          uchar keyscan()

          {

          P1=0xfe;

          temp=P1;

          while(temp!=0xfe)

          {

          temp=P1;

          switch(temp)

          {

          case 0xee:num=1;

          break;

          case 0xde:num=2;

          break;

          case 0xbe:num=3;

          break;

          case 0x7e:num=4;

          break;

          }

          delay(100);

          }

          P1=0xfd;

          temp=P1;

          while(temp!=0xfd)

          {

          temp=P1;

          switch(temp)

          {

          case 0xed:num=5;

          break;

          case 0xdd:num=6;

          break;

          case 0xbd:num=7;

          break;

          case 0x7d:num=8;

          break;

          }

          delay(100);

          }

          P1=0xfb;

          temp=P1;

          while(temp!=0xfb)

          {

          temp=P1;

          switch(temp)

          {

          case 0xeb:num=9;

          break;

          case 0xdb:num=10;

          break;

          case 0xbb:num=11;

          break;

          case 0x7b:num=12;

          break;

          }

          delay(100);

          }

          P1=0xf7;

          temp=P1;

          while(temp!=0xf7)

          {

          temp=P1;

          switch(temp)

          {

          case 0xe7:num=13;

          break;

          case 0xd7:num=14;

          break;

          case 0xb7:num=15;

          break;

          case 0x77:num=16;

          break;

          }

          delay(100);

          }

          return num;

          }

          void Display(uchar Wei_8,uchar Wei_7,uchar Wei_6,uchar Wei_5,uchar Wei_4,uchar Wei_3,uchar Wei_2,uchar Wei_1)

          {

          P2=0xfe;

          P0=Dis_code[Wei_8];

          delay(1);

          P2=0xfd;

          P0=Dis_code[Wei_7];

          delay(1);

          P2=0xfb;

          P0=Dis_code[Wei_6];

          delay(1);

          P2=0xf7;

          P0=Dis_code[Wei_5];

          delay(1);

          P2=0xef;

          P0=Dis_code[Wei_4];

          delay(1);

          P2=0xdf;

          P0=Dis_code[Wei_3];

          delay(1);

          P2=0xbf;

          P0=Dis_code[Wei_2];

          delay(1);

          P2=0x7f;

          P0=Dis_code[Wei_1];

          delay(1);

          }

          void main()

          {

          while(1)

          {

          Display(keyscan(),16,16,16,16,16,16,16);

          }

          }



          關鍵詞: 單片機4*4矩陣鍵

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();