矩陣按鍵的原理圖:
高定電平與低電平導通之後也變為低電平,當低電平消失之後,又變為高電平。
方法一:
先令p1為0x0f,如果有鍵按下,則前四位必定有一位由1變為0;然後,找到是哪一行哪一列,在檢測按鍵函式中,一行一行的去尋找,從key_buf【】中迴圈取值,每乙個值都是前四位只有乙個值為0,意味著只有一行的引腳輸出電平為零,如果p1&0x0f!=0x0f,則意味著後四位有一位變成了零,也就意味著按下的這個鍵在在這一行裡,然後去判斷是哪一列,從16個已經寫好的數中迴圈,看跟哪個相等就是哪乙個按鍵,取值是唯一的,所有結果也是唯一的,返回結果即可。再給p0賦值相應的顯示數字的段選碼。
#include
"reg52.h"
void
delay
(int x)
//延時函式}}
char code smgduan[17]
=;//字模
char code key_buf=
;// 按下鍵之後對應的p1值
intget_key()
;int i=
0,j=0;
for(i=
0;i<
4;i++)}
}}}return-1
;}void
main()
}}
方法二:
先讓p1前四位為零,後四位為1,然後判斷是否p1&0x0f還等於0x0f,如果不相等,就說明有鍵按下,然後判斷是是哪一列,記錄下來,然後接著判斷是哪一行,記錄下來,給p0賦段碼值,顯示是哪個按鍵。
#include
"reg52.h"
//此檔案中定義了微控制器的一些特殊功能暫存器
typedef
unsigned
int u16;
//對資料型別進行宣告定義
typedef
unsigned
char u8;
#define gpio_dig p0
#define gpio_key p1
u8 keyvalue;
//用來存放讀取到的鍵值
u8 code smgduan[17]
=;void
delay
(u16 i)
void
keydown
(void
)//測試行
gpio_key=
0xf0
;switch
(gpio_key)}}
while
((a<50)
&&(gpio_key!=
0xf0))
//檢測按鍵鬆手檢測
}void
main()
}
按鍵為什麼要消抖:
按鍵在按下的5ms-10ms之內,訊號由於機械的抖動,電平會多次變化,微控制器cpu處理速度很快,如果做乙個消抖延時,cpu會處理這次按鍵多次,產生嚴重的邏輯錯誤。
51微控制器按鍵的掃瞄
include sbit addr0 p1 0 sbit addr1 p1 1 sbit addr2 p1 2 sbit addr3 p1 3 sbit enled p1 4 sbit key1 p2 4 sbit key2 p2 5 sbit key3 p2 6 sbit key4 p2 7 un...
51微控制器之時鐘(C語言和彙編兩種方式實現)
1.c語言實現 include typedef unsigned char uint8 typedef unsigned int uint16 typedef unsigned long uint32 共陽數碼管0 9 uint8 number uint8 a 6 uint8 sec 0 uint8...
51MCU 基於51微控制器的矩陣鍵盤
author manba cople 專業 iot 說明 記錄和輸出學習內容 介紹寫矩陣鍵盤的一種思路和具體實現 以鍵盤的某個角作為座標原點建立平面直角座標系,如下圖 圖為我設計計算器的矩陣鍵盤 從而,矩陣鍵盤的思路就是,給x方向 水平方向 賦值為1,y方向 豎直方向 賦值為0,不斷掃瞄判斷x方向是...