要求:4*4按鍵對(duì)應(yīng)八位數(shù)碼管顯示
數(shù)碼管電路圖:

Pasted Graphic.jpg
4*4矩陣式鍵盤電路原理圖:

Pasted Graphic.jpg
代碼如下:
#include "reg52.h"
sbit oe = P1^3;
sbit le1 = P1^4;//傳值
sbit le2 = P1^5;//片選
char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰極的code
char code select[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//延時(shí)函數(shù)
void delay(unsigned int ms){
unsigned int x,y;
for(x=0;x<ms;x++)
for(y=0;y<110;y++);
}
//數(shù)碼管顯示函數(shù)(傳入uint的數(shù)字,在八位數(shù)碼管顯示相應(yīng)的數(shù)字)
void display(unsigned int num){
oe = 0;
le1 = 0;
le2 = 0;
le1 = 1;
P0 = table[num];
le1 = 0;
le2 = 1;
P0 = select[0];
le2 = 0;
delay(5);
}
//按鍵檢測函數(shù)(按下相應(yīng)按鍵顯示不同數(shù)字)
void button_check(){
unsigned int l,h,hex;
P2 = 0xF0;//列輸入,行輸出
delay(2);
h = P2;
delay(2);
P2 = 0x0F;/行輸入,列輸出
l = P2;
delay(2);
hex = l|h;//兩個(gè)值相或的交點(diǎn)
delay(2);
switch(hex){
case 0xEE://第一個(gè)E標(biāo)識(shí)列,第二個(gè)E表示行
display(0);
break;
case 0xDE:
display(1);
break;
case 0xBE:
display(2);
break;
case 0x7E:
display(3);
break;
case 0xED:
display(4);
break;
case 0xDD:
display(5);
break;
case 0xBD:
display(6);
break;
case 0x7D:
display(7);
break;
case 0xEB:
display(8);
break;
case 0xDB:
display(9);
break;
case 0xBB:
display(10);
break;
case 0x7B:
display(11);
break;
case 0xE7:
display(12);
break;
case 0xD7:
display(13);
break;
case 0xB7:
display(14);
break;
case 0x77:
display(15);
break;
}
}
void main(){
while(1){
button_check();
delay(5);
}
}