通过串口助手用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条回答
李爱柚
1楼-- · 2019-07-16 12:05
电子95 发表于 2017-2-22 07:26
初学者可以用,这种程序上不了产品

就是初学..请问你有办法能解决问题么?
李爱柚
2楼-- · 2019-07-16 16:15
 精彩回答 2  元偷偷看……
李爱柚
3楼-- · 2019-07-16 16:22
慵懒的瞄 发表于 2017-2-22 11:46
你那个除法运算里面不用带0x,0x是十六进制

可能你没有理解我的意思。我想向单片机串口发送16进制数(这个数实际是我要在数码管上显示的),所以才这样操作。为的是将输入的数字分离,利用数码换的数字表输出。
李爱柚
4楼-- · 2019-07-16 17:47
happybbs163 发表于 2017-2-21 20:56
PS手机回复,有错字包含,高手可以略过。

高手帮帮忙。。。
仰望星空的贱人
5楼-- · 2019-07-16 18:58
给图啊   有图方便别人理解啊

机器人工作者
6楼-- · 2019-07-17 00:25
这个问题主要在串口接收程序里~

一周热门 更多>