当前位置:文档之家› 单片机矩阵按键显示在串口,电脑按键显示在数码管

单片机矩阵按键显示在串口,电脑按键显示在数码管

#include
#define uchar unsigned char
#define uint unsigned int
uchar flag,key1,m,i;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,};
void init()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF4; //计数器初始值设置,注意波特率是4800的
TL1=0XF4;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num)
{
P0=~table[num];

}

void send(uchar key_num)
{
SBUF=key_num;
while(!TI);
TI=0;
}
void matrixkeyscan()
{
uchar temp,key;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(5);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:
key=0;key1='0';
break;
case 0xde:
key=1;key1='1';
break;
case 0xbe:
key=2;key1='2';
break;
case 0x7e:
key=3;key1='3';
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
P0=0xff;

display(key);
send(key1);

}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(5);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:
key=4;key1='4';
break;
case 0xdd:
key=5;key1='5';
break;
case 0xbd:
key=6;key1='6';
break;
case 0x7d:
key=7;key1='7';
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
P0=0xff;

display(key);
send(key1);
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delayms(5);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xeb:
key=8;key1='8';
break;
case 0xdb:
key=9;key1='9';
break;
case 0xbb:
key=10;key1='a';
break;
case 0x7b:
key=11;key1='b';
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
P0=0xff;

display(key);
send(key1);
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
i

f(temp!=0xf0)
{
delayms(5);
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xe7:
key=12;key1='c';
break;
case 0xd7:
key=13;key1='d';
break;
case 0xb7:
key=14;key1='e';
break;
case 0x77:
key=15;key1='f';
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
P0=0xff;

display(key);
send(key1);
}
}
}

void main()
{
init();

while(1)
{
ES=0;
matrixkeyscan();
ES=1;
if(flag==1)
{ send(m);
flag=0;
switch(m)
{
case '0':
P0=~table[0];
break;

case '1':
P0=~table[1];
break;

case '2':
P0=~table[2];
break;

case '3':
P0=~table[3];
break;

case '4':
P0=~table[4];
break;

case '5':
P0=~table[5];
break;

case '6':
P0=~table[6];
break;

case '7':
P0=~table[7];
break;

case '8':
P0=~table[8];
break;

case '9':
P0=~table[9];
break;

case 'a':
P0=~table[10];
break;

case 'b':
P0=~table[11];
break;

case 'c':
P0=~table[12];
break;

case 'd':
P0=~table[13];
break;

case 'e':
P0=~table[14];
break;

case 'f':
P0=~table[15];
break;
}
}
}
}
void ser() interrupt 4
{
RI=0;
m=SBUF;
flag=1;
}

相关主题
文本预览
相关文档 最新文档