基于51单片机的4*4矩阵键盘字符输入

控制/MCU

1883人已加入

描述

使用4*4的矩阵键盘和一个数码管

在4*4的矩阵键盘上编码0-F的字符,和一个数码管显示每个键盘上输入的字符。

//4*4键盘检测程序,按下键后相应的代码显示在数码管上  

#include  

typedef unsigned char UINT8;  

UINT8 i=100;  

UINT8 j,k,temp,key;  

void delay(unsigned char i)  

{  

for(j=i;j>0;j--)  

for(k=125;k>0;k--);  

}  

UINT8 code table[]=  

{  

0x3f,0x06,0x5b,0x4f,  

0x66,0x6d,0x7d,0x07,  

0x7f,0x6f,0x77,0x7c,  

0x39,0x5e,0x79,0x71  

};  

void display(unsigned char num)  

{  

P0=table[num];  

}  

void init_led()  

{  

P0 = 0x00;  

}  

void main()  

{  

while(1)  

{    

P1 = 0xef;  

temp = P1;  

temp = temp&0xf0;  

if (temp != 0xf0)  

{  

temp = P1;  

switch(temp)  

{  

case 0xee:  

key=0;  

break;  

case 0xed:  

key=1;  

break;  

case 0xeb:  

key=2;  

break;  

case 0xe7:  

key=3;  

break;  

default:                      

break;  

}  

display(key);  

P1=0xfe;  

}  

P1 = 0xdf;  

temp = P1;  

temp = temp&0x0f;  

if(temp != 0x0f)  

{  

temp = P1;  

switch(temp)  

{  

case 0xde:  

key = 4;  

break;  

case 0xdd:  

key = 5;  

break;  

case 0xdb:  

key = 6;  

break;  

case 0xd7:  

key = 7;  

break;  

default:  

break;  

}  

display(key);  

}  

P1=0xbf;  

temp=P1;  

temp=temp&0x0f;  

if(temp != 0x0f)  

{  

temp=P1;  

switch(temp)  

{  

case 0xbe:  

key=8;  

break;  

case 0xbd:  

key=9;  

break;  

case 0xbb:  

key=10;  

break;  

case 0xb7:  

key=11;  

break;  

default:  

break;  

}  

display(key);  

}  

P1=0x7f;  

temp=P1;  

temp=temp&0x0f;  

if(temp!=0x0f)  

{           

temp=P1;  

switch(temp)  

{  

case 0x7e:  

key=12;  

break;  

case 0x7d:  

key=13;  

break;  

case 0x7b:  

key=14;  

break;  

case 0x77:  

key=15;  

break;  

default:  

break;  

}  

display(key);  

}  

}     

}  

这个上面有一个bug就是每进入的时候数码管不是空的而是现实“0”这个没有解决。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分