通过串口助手用PC向单片机发送1234,5689,4569。通过数码管显示?

2019-07-15 11:55发布

目前本人能做到让两位数码管正常显示,例如发送1234,数码管正常显示xx34。但是无法做到让4位数码管显示。
所以想请教下怎么做到,甚至输入任意8位数都能在数码管显示。下面附代码。
#include<reg52.h>
#define uc unsigned char
#define ui unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
uc code table[]=                   //代码表
{
/*0   1    2    3*/
0x3f,0x06,0x5b,0x4f,
/*4   5    6    7*/
0x66,0x6d,0x7d,0x07,
/*8   9    A    B*/
0x7f,0x6f,0x77,0x7c,
/*C   D    E    F 不显示*/
0x39,0x5e,0x79,0x71,0
};
ui a;
uc qian,bai,shi,ge;

void delay(uc z)
{
        uc x,y;
        for(x=z;x>0;x--)
                for(y=114;y>0;y--);
}

void init()
{
        TMOD=0x20;  //设置定时器1 工作方式2:八位自动重装
        TH1=0xfd;        //波特率9600bps/s
        TL1=0xfd;   //
        TR1=1;
        REN=1;        //允许接收
        SM1=1;                //设置串口工作方式1:10位异步通信
        SM0=0;                //
        EA=1;
        ES=1;
}

void main()
{
        init();
        while(1)
        {
                qian=a/0x1000;         
                bai=a%0x1000/0x100;
                shi=a%0x1000%0x100/0x10;
                ge=a%0x1000%0x100%0x10;               
               
                P0=0xff;
                wei=1;                                          
                P0=0xfe;
                wei=0;
                duan=1;
                P0=table[qian];
                duan=0;
                delay(5);

                P0=0xff;
                wei=1;
                P0=0xfd;
                wei=0;
                duan=1;
                P0=table[bai];
                duan=0;
                delay(5);

                P0=0xff;
                wei=1;
                P0=0xfb;
                wei=0;
                duan=1;
                P0=table[shi];
                duan=0;
                delay(5);
               
                P0=0xff;
                wei=1;
                P0=0xf7;
                wei=0;
                duan=1;
                P0=table[ge];
                duan=0;
                delay(5);          
        }       
}

void uart() interrupt 4
{
        if(RI)
        {
         a=SBUF;                  //单片机从缓冲区取出接收到的数据a
         RI=0;                          
         SBUF=a;                  //单片机把数据a送到缓冲区 即发送数据给上位机
         while(!ti);
         TI=0;
        }       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
happybbs163
1楼-- · 2019-07-15 13:34
PS手机回复,有错字包含,高手可以略过。
8051DPJ
2楼-- · 2019-07-15 15:14
qian,bai,shi,ge的除法应该不对
jblbin2008
3楼-- · 2019-07-15 18:16
 精彩回答 2  元偷偷看……
电子95
4楼-- · 2019-07-15 23:10
初学者可以用,这种程序上不了产品
慵懒的瞄
5楼-- · 2019-07-16 03:28
你那个除法运算里面不用带0x,0x是十六进制
李爱柚
6楼-- · 2019-07-16 07:34
8051DPJ 发表于 2017-2-21 22:10
qian,bai,shi,ge的除法应该不对

可以的,我试过,问题应该不在这。我认为自己问题是不会发送接收多帧数据,希望得到这方面的支持。

一周热门 更多>