c51单片机利用串口在数码管上的应用


#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;//数据清零,准备再次接收
    }
}

这个代码哪里错了,为什么通过串口没有在数码管上显示出输入的数字,麻烦纠正一下