4x4矩陣按鍵

一.簡介

4x4矩陣按鍵是單片機外部設備中所使用的排布類似於矩陣的按鍵組。顯然矩陣按鍵的使用要比獨立按鍵要複雜一些,編程也要複雜一些,但可以單片機IO資源。4x4矩陣按鍵即分爲4組列線,4組行線,並將行線所接的單片機的I/O口作爲輸出端,而列線所接的I/O口則作爲輸入。

二.硬件連接圖

51單片機的P1口用作按鍵I/O口,鍵盤的列線接到P1口的低4位,鍵盤的行線接到P1口的高4位;把列線P1.0-P1.3設置爲輸入線,行線P1.4-P.17設置爲輸出線。4根行線和4根列線形成16個相交點。如圖:

三.控制程序

1.矩陣按鍵程序掃描步驟

  • 檢測當前是否有鍵被按下。檢測的方法是P1.4-P1.7輸出全“0”,讀取P1.0-P1.3的狀態,若P1.0-P1.3爲全“1”,則無鍵閉合,否則有鍵閉合。

  • 去除按鍵抖動。當檢測到有鍵按下後,延時一段時間再做下一步的檢測判斷。

  • 若有鍵被按下,應識別出是哪一個鍵閉合。方法是先獲取矩陣按鍵的列狀態,即P1的低四位狀態,對應爲0111,1011,1101,1110;再獲取行狀態,即P1的高四位狀態。

  • 最後,將由此得到閉合鍵的行值和列值組成8位數,可通過對應的編碼表將閉合鍵的行值和列值轉換成所定義的鍵值。

 

 2.掃描程序

void key()   //按鍵程序
{
  static uchar key_new = 0, key_l;
  key_can = 20;                   //按鍵值還原
  P1 = 0x0f;
  if((P1 & 0x0f) != 0x0f)    //按鍵按下
  {
    delay_1ms(1);         //按鍵消抖動
    if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
    {            //確認是按鍵按下
      key_new = 0;
      key_l = (P1 | 0xf0);   //矩陣鍵盤的列狀態
      P1 = key_l;              //掃描矩陣鍵盤的行狀態
      switch(P1)
      {
        case 0xee:  key_can = 1;  break;  //得到按鍵值 
        case 0xde:  key_can = 4;  break;   //得到按鍵值 
        case 0xbe:  key_can = 7;  break;   //得到按鍵值 
        case 0x7e:  key_can = 10;  break;   //得到按鍵值 
  
        case 0xed:  key_can = 2;          break;  //得到按鍵值 
        case 0xdd:  key_can = 5;  break;   //得到按鍵值 
        case 0xbd:  key_can = 8;  break;   //得到按鍵值 
        case 0x7d:  key_can = 0;  break;   //得到按鍵值 
  
        case 0xeb:  key_can = 3;  break;  //得到按鍵值 
        case 0xdb:  key_can = 6;  break;   //得到按鍵值 
        case 0xbb:  key_can = 9;  break;   //得到按鍵值 
        case 0x7b:  key_can = 11;  break;   //得到按鍵值 
  
        case 0xe7:  key_can = 15;  break;  //得到按鍵值 
        case 0xd7:  key_can = 14;  break;  //得到按鍵值 
        case 0xb7:  key_can = 13;  break;   //得到按鍵值 
        case 0x77:  key_can = 12;  break;  //得到按鍵值  
      }  
    }          
  }
  else 
  {
    key_new = 1;    
  }  
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章