找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3847|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机接收16进制用数码管显示十进制为什么没有转换程序,直接在显示函数中求出来了

[复制链接]
跳转到指定楼层
楼主
ID:378091 发表于 2018-8-3 09:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1黑币
#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的值赋给数码管显示
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:221865 发表于 2018-8-3 13:43 | 只看该作者
void display(uchar num)
{
        uchar bai,shi,ge;
        if(num >= '0' && num <= '9')
        {
                bai = (num - '0')/100;
        }
        ...
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:164602 发表于 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; //求余
        

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表