#include
#define uchar unsigned char
#define uint unsigned int
uchar num[8]={0,0,0,0,0,0,0,0};//定义显示数组
uint temp;
uchar flag;
uchar i,t;
uint date;
sbit L1 = P2^4;
sbit L2 = P2^3;
sbit L3 = P2^2;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=114;y>0;y--);
}
void uart_init()//串口初始化 波特率9600
{
PCON |= 0x80;
SCON=0x40;
TMOD &= 0x0F;
TMOD |=0x20;
TH1=0xFA;
TL1=0xFA;
TR1=1;
SM0=0;
REN=1;
ES=1;
EA=1;
}
void display()//数码管显示函数
{
for(i=1;i<=8;i++){
switch(i){
case 1: L1=0;L2=0;L3=0;
P0=num[0];delay(1);break;
case 2: L1=0;L2=0;L3=1;
P0=num[1];delay(1);break;
case 3: L1=0;L2=1;L3=0;
P0=num[2];delay(1);break;
case 4: L1=0;L2=1;L3=1;
P0=num[3];delay(1);break;
case 5: L1=1;L2=0;L3=0;
P0=num[4];delay(1);break;
case 6: L1=1;L2=0;L3=1;
P0=num[5];delay(1);break;
case 7: L1=1;L2=1;L3=0;
P0=num[6];delay(1);break;
case 8: L1=1;L2=1;L3=1;
P0=num[7];delay(1);break;
}
P0=0x00;//消除数码管残影
}
}
void main()
{
uart_init();
display();
while(1)
{
}
}
void uart() interrupt 4//串口中断服务函数
{
if(RI)
{
RI=0;
t++;//接收计数
temp=SBUF;
date=temp|date;
P1=0;
if(t==2)
{
t=0;
flag=1;//数据接收完成标志
P1=0xff;
}
}
else
{
TI=0;
}
if(flag==1)//数据接收完成
{
num[0]=table[date/10000000];//取千万位
num[1]=table[date/1000000%10];//取百万位
num[2]=table[date/100000%10];//取十万位
num[3]=table[date/10000%10];//取万位
num[4]=table[date/1000%10];//取千位
num[5]=table[date/100%10];//取百位
num[6]=table[date/10%10];//取十位
num[7]=table[date%10];//取个位
flag=0;//数据接收完成标志复位
date=0x000000;//数据清零,准备再次接收
}
}
这个代码哪里错了,为什么通过串口没有在数码管上显示出输入的数字,麻烦纠正一下