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;		
	}	
}

如果您喜歡,可關注個人公衆號“電子應用學習館”,獲取更多的資料例程。
在這裏插入圖片描述

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