微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 通过串口助手用PC向单片机发送1234,5689,4569。通过数码管显示?

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

时间:10-02 整理:3721RD 点击:
目前本人能做到让两位数码管正常显示,例如发送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;
        }       
}

PS手机回复,有错字包含,高手可以略过。

qian,bai,shi,ge的除法应该不对

消隐时间设定的可以加长试试。

初学者可以用,这种程序上不了产品

你那个除法运算里面不用带0x,0x是十六进制

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

就是初学..请问你有办法能解决问题么?

不是这个问题。问题在于目前我无法正确显示千位跟百位,而十位跟个位是正确的。

可能你没有理解我的意思。我想向单片机串口发送16进制数(这个数实际是我要在数码管上显示的),所以才这样操作。为的是将输入的数字分离,利用数码换的数字表输出。

高手帮帮忙。

给图啊   有图方便别人理解啊

这个问题主要在串口接收程序里~

能说的详细些么

其实目的不复杂额 补充下我的硬件信息:数码管是8位共阴的 单片机是STC89C52的

需要将数据一位一位的发送

我只是路过打酱油的,嘿嘿

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top