OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4306|回复: 1

51单片机串口通信数码管显示问题

[复制链接]

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2016-5-23
在线时间
14 小时
发表于 2016-7-21 08:53:58 | 显示全部楼层 |阅读模式
1金钱
题目如下
傲游截图20160721085159.jpg

结果如下
@CHFGD%2PLXM04_HP%@SG76.jpg 无论我怎么更换位选信号 原本应该显示出来的五位数码管永远只能出来两位,以下是我的代码。

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar flag,i,yi,er,san,si,wu;
uint a;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms)
{
        uint i,j;
        for(i=0;i<xms;i++)
                for(j=110;j>0;j--);
}

void display(uchar yi,uchar er,uchar san,uchar si,uchar wu)
{
        dula=1;
        P0=table[yi];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xef;
        wela=0;
        delayms(1);

        dula=1;
        P0=table[er];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xf7;
        wela=0;
        delayms(1);

        dula=1;
        P0=table[san];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        delayms(1);

        dula=1;
        P0=table[si];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delayms(1);

        dula=1;
        P0=table[wu];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        delayms(1);
}
void init()
{
        TMOD=0x20;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;
        REN=1;
        SM0=0;
        SM1=1;
        EA=1;
        ES=1;
}
void main()
{
        init();
        while(flag==1)
        {
                wu=a/65536;
                si=a%65536/4096;
                san=a%65536%4096/256;
                er=a%65536%4096%256/16;
                yi=a%65536%4096%256%16;
                display(yi,er,san,si,wu);
        }
}
void ser() interrupt 4
{
        RI=0;
        a=SBUF;
        flag=1;
}



最佳答案

查看完整内容[请看2#楼]

刚入门吧,C语言基础太差 错误一:你串口每次都接收一个字符就做运算a=SBUF,SBUF是一个char型数据,最大就只有255,正确做法,应该接收两个字符后进行移位再相与 错误二:分离一个数字每一位的方法,学C语言这么基础的东西还没搞懂? wu=a/10000; si=a%10000/1000; san=a%1000/100; er=a%100/10; yi=a%10;
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

388

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4081
金钱
4081
注册时间
2012-10-21
在线时间
642 小时
发表于 2016-7-21 08:53:59 | 显示全部楼层
刚入门吧,C语言基础太差
错误一:你串口每次都接收一个字符就做运算a=SBUF,SBUF是一个char型数据,最大就只有255,正确做法,应该接收两个字符后进行移位再相与
错误二:分离一个数字每一位的方法,学C语言这么基础的东西还没搞懂?
                wu=a/10000;
                si=a%10000/1000;
                san=a%1000/100;
                er=a%100/10;
                yi=a%10;
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 17:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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