stc89c52串口问题

2019-07-15 23:54发布

还是郭老师的那个题目:以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定。我的问题是,我在串口助手上输入任何数,五个数码管只显示11366,代码如下:

#include<reg52.h>
#define uchar unsigned char
uchar flag;
int a,ge,shi,bai,qian,wan;        //个位、十位、百位、千位、万位
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x06,0x5b,0x4f,
0x66,0x6d,0x7d};  
void init()
{
        EA=1;
        ES=1;
        TMOD=0x20;//定时器1工作方式2
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        dula=0;
}
void delay(uchar y)
{
        uchar i,j;
        for(i=y;i>0;i--)
                for(j=118;j>0;j--);
}
void display(int x)
{
        wan=x/10000;
        qian=x%10000/1000;
        bai=x%10000%1000/100;
        shi=x%100/10;
        ge=x%10;
                                                    //从左到右,第1个数码管
        dula=1;
        P0=table[wan];
        dula=0;
        P0=0xff;                         
        wela=1;
        P0=0xfe;
        wela=0;
        delay(5);

        dula=1;                                         //第2个数码管
        P0=table[qian];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delay(5);
                                                          //第3        个数码管
        dula=1;
        P0=table[bai];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delay(5);

     dula=1;
        P0=table[shi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xf7;
        wela=0;
        delay(5);

        dula=1;
        P0=table[ge];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xef;
        wela=0;       
        delay(5);         

}
void main()
{       
        init();
        while(1)
        {
                if(flag==1)
                {       
                        ES=0  ;               
                        SBUF=a;                  //向PC端返回要显示的值
                        while(!ti);
                        TI=0;
                        display(a);
                        ES=1;
                }
        }
}
void serial() interrupt 4
{
        RI=0;
        a=SBUF;                                   //将接受到的值给a
        flag=1;
}


@一抹阳光 @爱我别走 麻烦你们了


ZJ1T0`6{T5]URFQ%SMM)D4K.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。