1、矩陣按鍵
1.1、矩陣按鍵原理分析
這里矩陣按鍵為4*4的矩陣按鍵。
(1)矩陣按鍵橫向和縱向分割。
(2)按鍵兩端分別接不同的IO引腳。
(3)按鍵物理作用不變:按下按鍵兩端接通,彈起按鍵兩端斷開。
1.2、矩陣按鍵的工作過程
JP4接P3端口,JP4_8接P3^7...JP4_1接P3^0。
(1)IO端口(P3)先輸出0x0f,按鍵列的一端為高電平,行的一端為低電平。
(2)讀取P3端口引腳,若讀到值不是0x0f,則說明有按鍵按下,判斷是哪一列。
(3)P3端口再輸出0xf0,按鍵行一端為高電平,列一端為低電平。
(4)讀取P3端口引腳,若讀到值不是0xf0,則說明有按鍵按下,判斷是哪一行。
(5)結合兩次行和列的位置,計算判斷是哪個按鍵按下。
2、原理圖
一般情況下JP4端口的1234或5678需要接一個電阻,不然兩個IO口導通會導致短路,電流過大,這里不接是因為單片機IO口接了上拉電阻。
矩陣鍵盤特點:
優(yōu)點:矩陣鍵盤省IO口。
缺點:(1)不能同時按下多個按鍵,例如同時按下兩個按鍵(不再同一行,不在同一列),會檢測到兩個行,兩個列,對應四個按鍵,而無法判斷是其中的哪兩個。(2)不能采用中斷檢測按鍵。文章來源:http://www.zghlxwxcb.cn/news/detail-419012.html
3、示例程序
上圖中的S1~S16按鍵,對應1~16的數值。通過8顆LED燈,LED1~LED8表示8位二進制數,亮為1,滅為0,通過LED燈亮滅顯示顯示按下按鍵的數值。LDE1為低位,LED8為高位。文章來源地址http://www.zghlxwxcb.cn/news/detail-419012.html
#include <reg52.h>
/*實現功能
*S1~S16按鍵,對應1~16的數值。
*LED1~LED8表示8位二進制數,亮為1,滅為0。
*通過LED燈亮滅顯示顯示按下按鍵的數值。
*LDE1為低位,LED8為高位。
*/
/*硬件連接
*LED接P0端口,LED1接P0^0、LED2接P0^1...LED8接P0^7。
*矩陣按鍵接P3端口,JP4_8接P3^7...JP4_1接P3^0。
*LED燈為共陰極,高電平點亮。
*/
#define LED P0
#define KEY P3
/*函數聲明*/
unsigned char GetKeyValue(); /*獲取鍵值*/
void Delay15ms();
void main(void)
{
unsigned char KeyValue = 0;
LED = 0x00; /*默認所有LED燈熄滅*/
while(1)
{
KeyValue = GetKeyValue();
if(KeyValue != 0)
LED = KeyValue;
}
}
unsigned char GetKeyValue()
{
unsigned char hang = 0;
unsigned char lie = 0;
unsigned char KeyValue = 0;
/*檢測列*/
KEY = 0x0f;
if(KEY != 0x0f) /*說明有按鍵按下*/
{
Delay15ms(); /*消抖,等待電平穩(wěn)定*/
switch(KEY)
{
case 0x0e: lie = 4; break; /*第4列有按鍵按下*/
case 0x0d: lie = 3; break; /*第3列有按鍵按下*/
case 0x0b: lie = 2; break; /*第2列有按鍵按下*/
case 0x07: lie = 1; break; /*第1列有按鍵按下*/
default: lie = 0; break;
}
}
/*檢測行*/
KEY = 0xf0; /*從IO口輸出*/
if(KEY != 0xf0) /*讀IO口,說明有按鍵按下*/
{
switch(KEY)
{
case 0x70: hang = 1; break; /*第1行有按鍵按下*/
case 0xb0: hang = 2; break; /*第2列有按鍵按下*/
case 0xd0: hang = 3; break; /*第3列有按鍵按下*/
case 0xe0: hang = 4; break; /*第4列有按鍵按下*/
default: hang = 0; break;
}
}
if(hang !=0 && lie !=0)
{
KeyValue = (hang-1)*4 +lie;
return KeyValue;
}
return 0; /*表示沒有程序按下或有多個按鍵同時按下*/
}
void Delay15ms() //@12.000MHz
{
unsigned char i, j;
i = 30;
j = 43;
do
{
while (--j);
} while (--i);
}
到了這里,關于五、51單片機控制矩陣按鍵的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!