以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率自定

我知道我这个有问题,但至少应该能显示0-255的,可是结果只能显示一位,就是个位,十位和百位不停地闪动,请问问题在哪里?下面是我写的程序。。。#include<reg52... 我知道我这个有问题,但至少应该能显示0-255的,可是结果只能显示一位,就是个位,十位和百位不停地闪动,请问问题在哪里?下面是我写的程序。。。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar flag,bai,shi,ge;
uint a;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit dula=P2^6;
sbit wela=P2^7;
void display(uchar bai,uchar shi,uchar ge);
void delay(uint z);
void main()
{

TMOD=0X20;
TH1=0Xfd;
TL1=0Xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
bai=a/100;
shi=a%100/10;
ge=a%10;
display(bai,shi,ge);
SBUF=a;
while(!TI);
TI=0;
ES=1;

}
}
}
void ser() interrupt 4
{
RI=0;
a=SBUF;
flag=1;

}void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
P0=0xff;//消影
wela=1;
P0=0xfe;
wela=0;
delay(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;//消影
wela=1;
P0=0xfd;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;//消影
wela=1;
P0=0xfb;
wela=0;
delay(5);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
展开
 我来答
做而论道
高能答主

2012-04-12 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
楼主的显示程序,放在了:if(flag==1) {......} ,语句中。
这样只有在收到数据后,才显示一遍,显示结束时,仅仅是显示个位,前两位,都消影了。
动态显示程序,必须不停的调用,才能看见各个位。
动态显示程序,应该放在条件语句的外面,如下:

while(1)
{
bai=a/100;
shi=a%100/10;
ge=a%10;
display(bai,shi,ge);//--放在这里,才能稳定的显示

if(flag==1)
{
ES=0;
flag=0;
bai=a/100;
shi=a%100/10;
ge=a%10;
display(bai,shi,ge);//放在这里,显示的机会太少了
SBUF=a;
while(!TI);
TI=0;
ES=1;
……
409997507
2012-04-11 · 超过17用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:62.8万
展开全部
延时时间太短
追问
应该不是吧,我把延长时间改成10,15结果都差不多啊,应该是程序哪里不对。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
47okey
2012-04-10 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5900
采纳率:75%
帮助的人:2406万
展开全部
实物还是仿真?
追问
就是用这个程序来控制单片机实现啊。。。
追答
我用proteus仿真试过,不会闪。
但程序小改。实物你那样的消隐 应该没错
void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
//P0=0xff;//消影
wela=1;
P0=0xfe;
wela=0;
delay(1);
P0=0x00;
dula=1;
P0=table[shi];
dula=0;
//P0=0xff;//消影
wela=1;
P0=0xfd;
wela=0;
delay(1);
P0=0x00;
dula=1;
P0=table[ge];
dula=0;
//P0=0xff;//消影
wela=1;
P0=0xfb;
wela=0;
delay(1);
P0=0x00;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式