51微控制器的矩陣按鍵實現兩種方法

2021-10-10 18:48:57 字數 1625 閱讀 6720

矩陣按鍵的原理圖:

高定電平與低電平導通之後也變為低電平,當低電平消失之後,又變為高電平。

方法一:

先令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方向是...