标题: 51单片机接收16进制用数码管显示十进制为什么没有转换程序,直接在显示函数中求出来了 [打印本页]

作者: interrupt    时间: 2018-8-3 09:11
标题: 51单片机接收16进制用数码管显示十进制为什么没有转换程序,直接在显示函数中求出来了
#include <reg52.h>

#define uchar unsigned char
#define uint  unsigned int

sbit we = P2^7;        //数码管位选
sbit du = P2^6;        //数码管段选

/*数码管段码*/
uchar code leddata[]={

                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义

                         };

/*1毫秒延时函数*/
void delay(uint z)       
{
        uint x,y;
        for(x = z; x > 0; x--)
                for(y = 114; y > 0 ; y--);
}

/*
串口初始化函数
工作模式1 10位异步收发 发送速率4800bps
*/
void UART_init()  
{
        TMOD = 0x20;          //T1工作模式2  8位自动重装
        TH1 = 0xfa;
        TL1 = 0xfa;         //比特率4800
        TR1 = 1;                //启动T1定时器
        SM0 = 0;
        SM1 = 1;                 //串口工作方式1 10位异步
        REN = 1;                //串口允许接收
}

/*3位数码管显示函数*/
void display(uchar num)
{
        uchar bai,shi,ge;
        bai = num / 100; //求模
        shi = num % 100 / 10; //求余100后求出有多少个10
        ge  = num % 10; //求余
       
        P0 = 0xff;        //清除断码
        we = 1;
        P0 = 0xfe;         //点亮第一位数码管
        we = 0;

        du = 1;
        P0 = leddata[bai];        //显示百位
        du = 0;
        delay(1);

        P0 = 0xff;        //清除断码
        we = 1;
        P0 = 0xfd;//点亮第二位数码管
        we = 0;

        du = 1;
        P0 = leddata[shi];        //显示十位
        du = 0;
        delay(1);

        P0 = 0xff;        //清除断码
        we = 1;
        P0 = 0xfb;//点亮第三位数码管
        we = 0;

        du = 1;
        P0 = leddata[ge];  //显示各位
        du = 0;
        delay(1);       
}

void main()
{
        UART_init();//串口配置初始化
        while(1)
        {
                if (RI)        //检测是否接收完成
                {
                        RI = 0;        //清除接收标志位,以便于下次接收
                }
                display(SBUF); //取出接收SBUF的值赋给数码管显示
        }
}


作者: 多德    时间: 2018-8-3 13:43
void display(uchar num)
{
        uchar bai,shi,ge;
        if(num >= '0' && num <= '9')
        {
                bai = (num - '0')/100;
        }
        ...
}
作者: HC6800-ES-V2.0    时间: 2018-8-4 09:07
谁说没有转换程序?
这就是啊:
void display(uchar num)
{
        uchar bai,shi,ge;
        bai = num / 100; //求模
        shi = num % 100 / 10; //求余100后求出有多少个10
        ge  = num % 10; //求余
        





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1