单片机按键串口通信源程序

#include
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
uchar code table2[]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
uint num1,num2,a,num;
void keyscan ();
void delay(uint k) //延时程序
{
uint i,j;
for(i=k;i>0;i--)
for(j=110;j>0;j--);
}
void display() //显示程序
{
num2=a/10;
num1=a%10;
P1=table2[num2]; //十位
delay(50);
P1=table1[num1]; //个位
delay(50);


}

void main() //主程序
{
TMOD = 0x20; //定时器T1的工作方式2,8位数据自动重装
SCON = 0x50; //串行口的方式1,8位异步收发,波特率可变。
TH1 = 0x17; // 装定时器1初值.
TL1 = TH1;
PCON = 0x00;
EA = 1; //开总中断
ES = 1; //串行口中断源允许
TR1 = 1; //开定时器1
while(1) //循环开始
{

keyscan ();
display();
}
}
void ser(void) interrupt 4 //串口中断
{
if(RI)
{
RI = 0;
a=SBUF;
}
else
TI = 0;
}


/*void SendOneByte(unsigned char c)
{
SBUF = c;
while(!TI);
TI = 0;
}*/ //中断结束

void keyscan () //键盘扫描程序
{
uchar temp;
P0=0xfe;
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P0;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P0;
temp=temp&0xf0;
}
/* num2=num/10;
num1=num%10;
display(num2,num1); */
SBUF=num ;
}
}
P0=0xfd;
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P0;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P0;
temp=temp&0xf0;
}
/* num2=num/10;
num1=num%10;
display(num2,num1); */
SBUF=num ;
}
}

P0=0xfb;
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P0;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P0;
temp=temp&0xf0;
}
/* num2=num/10;
num1=num%10;
display(num2,num1); */
SBUF=num ;
}
}

P0=0xf7;
temp=P0;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P0;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P0;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P0;


temp=temp&0xf0;

}
/* num2=num/10;
num1=num%10;
display(num2,num1); */
}
SBUF=num ;
}
}

相关文档
最新文档