首先如圖所示導入各個元器件,并連線。

因為P3口連接著矩陣鍵盤,所以上來要先付個初值,從高位到低位H0,H1,H2,H3,L0,L1,L2,L3的值是11110000,高位全是1,低位全是0,十六進制就是0xF0,也就是P3=0xF0。如果有按鍵按下了,肯定就不是這個值了。
比如說:
第一行789+中的任何一個按下,H0的高電平就會被拉低,P3口就變成了01110000, P3=0x70
第二行中的456-任何一個被按下,H1的高電平也會被拉低,P3口就變成了10110000, P3=0xB0
第三行中的123X任何一個被按下,H2的高電平也會被拉低,P3口就變成了11010000, P3=0xD0
第四行中的%0.÷任何一個被按下,H3的高電平也會被拉低,P3口就變成了11100000, P3=0xE0
上面是行都檢查完了,下面檢查列,檢查列之前先把P3口設置成00001111,所有的列上的低位端口都設置成1,行上的端口都設置成0,也就是把P3賦初值為0x0f
然后再去檢查每一列:
第一列中的741%任何一個被按下,L0的高電平都會被拉低,P3口就變成了00000111, P3=0x07
第二列中的8520任何一個被按下,L1的高電平都會被拉低,P3口就變成了00001011, P3=0x0B
第三列中的963.任何一個被按下,L2的高電平都會被拉低,P3口就變成了00001101, P3=0x0D
第四列中的+-X÷任何一個被按下,L3的高電平都會被拉低,P3口就變成了00001110, P3=0x0E
這樣就能確定到底是哪一個按鍵被按下了,比如說按下的是7鍵,首先P3=0xf0,檢查值有變化了就先保存下來,比如說是0x70,再把P3=0x0f,再檢查P3的值有沒有變化,如果有變化了,也要保存下來比如說是0x07,這會7鍵按下的值就是0x70+0x07=0x77,這樣每一個鍵都會有一個固定的值,需要自己來編碼,因為接線畫圖有不一樣的地方,編碼都會有變化的。
0到9的按鍵值就為:
{0xd7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xdb, 0xee, 0xde, 0xbe}

下面編寫c程序,每行都有注釋。主要給自己看。
#include"reg52.h"
char duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 段碼,也是就是數碼管要顯示的0到9的值
char s[]={0xd7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xbd, 0xee, 0xde, 0xbe}; // 所有按鍵的值
unsigned int num=0; // 定義要顯示的數字變量
void delay(unsigned int n){ // 延時函數
unsigned int i=0, j=0;
for(i=0; i<n; i++){
for(j=0; j<120; j++);
}
}
void key_scan(){
unsigned int i=0;
unsigned char temp0=0, temp1=0, temp=0; // 定義3個變量存放按鍵接口的值
P3=0xf0; // P3口賦初值
if(P3 != 0xf0){ // 如果P3不等于初值了,證明有按鍵被按下了
delay(20); // 延時20毫秒去抖
temp0 = P3; // 保存現在P3的值
P3 = 0x0f; // P3口再次賦初值,用來檢查列,這里不用擔心檢查不到,單片機還是很快的。
if(P3 != 0x0f){ // 如果P3不等于初值了,證明有按鍵被按下了
temp1 = P3; // 保存現在P3的值
}
}
temp = temp0 + temp1; // 鍵值= 第一次保存的值+ 第二次保存的值
for(i=0; i<10; i++){ // 循環(huán)10次
if(s[i]==temp){ // 把數組s中的每一個值和現在的鍵值比對,如果一樣就是現在的第幾個數字
num=i; //就把num值設成i值
}
}
}
void display(){
P2 = ~duan[num]; // P2口接的數碼管顯示段的第num個數字,正好是按下的按鍵的那個數字。
}
void main(){
while(1){
key_scan(); // 檢測按鍵按下的是幾的函數
display(); //顯示函數,用來顯示按下的是數字幾
}
}
把hex文件導入proteus中仿真就能實現從0到9的按鍵并且數碼管上會顯示0到9這10個數字。

proteus中接線要認真不然會有看著圓點在線上,實際一放大就不在的現象,也就是根本沒接上,會帶來很多麻煩事。
最近從網上買了一個4X4的矩陣鍵盤,其接口定義要理清了關系,不然會出錯的,特此記錄一下。
今天在弄proteus時發(fā)現了一個矩陣鍵盤,特此記錄一下,當時要是知道有這個東西就不用搞那么多的button了,一個矩陣鍵盤就搞定了,多簡單?。】纯磮D片吧!
查找的方法也很簡單搜索時輸入KEYPAD就可以了,從旁邊選就好了。這就是proteus中導入矩陣鍵盤的方法。文章來源:http://www.zghlxwxcb.cn/news/detail-447299.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-447299.html
到了這里,關于51單片機設計16個按鍵的矩陣鍵盤的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!