|
有没有人弄过用矩阵键盘的反馈值送给串口显示0到15,下面是我写的程序,自己感觉对着呢,但是我还没有按下按键他自己发送了一堆乱码;要不就是3A一直不停的现显示下去
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
uchar key;
void init()
{
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
SM0=0;
SM1=1;
TR1=1;
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
uchar shownum()
{
uchar temp,key;
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xee: key=0;break;
case 0xde: key=1;break;
case 0xbe: key=2;break;
case 0x7e: key=3;break;
}
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xed: key=4;break;
case 0xdd: key=5;break;
case 0xbd: key=6;break;
case 0x7d: key=7;break;
}
}
}
P3=0xfb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
P3=0xb;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xeb: key=8;break;
case 0xdb: key=9;break;
case 0xbb: key=10;break;
case 0x7b: key=11;break;
}
}
}
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(10);
P3=0xf7;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{ temp=P3;
switch(temp)
{
case 0xe7: key=12;break;
case 0xd7: key=13;break;
case 0xb7: key=14;break;
case 0x77: key=15;break;
}
}
}
return(key);
}
void main()
{
init();
while(1)
{ shownum();
SBUF=table[key];
while(!TI);
TI=0;
}
}
|
|