用四个数码管显示动态检测结果,为什么仿真的时候不正确了?求指教!!!!

#include<reg51.h>#include<stdlib.h>unsignedchari;unsignedintx;unsignedcharcodetab[]={... #include<reg51.h>
#include<stdlib.h>
unsigned char i;
unsigned int x;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(void)
{
unsigned char i;
for(i=0;i<300;i++)
;
}
void display(unsigned int k)
{
P2=0xfe;
P0=tab[k/1000];
delay();
P2=0xfd;
P0=tab[(k%1000)/100];
delay();
P2=0xfb;
P0=tab[(k%100)/10];
delay();
P2=0xf7;
P0=tab[k%10] ;
delay();
P2=0xff;
}
void main(void)
{
TMOD=0x01;
TH0=(65536-46083)/256;
TL0=(65536-46083)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(x);
}

}
void time(void)interrupt 1 using 1
{
TR0=0;
i++;
if(i==20)
{
x=rand()/10;
i=0;
}
TH0=(65536-46083)/256;
TL0=(65536-46083)%256;
TR0=1;
}
展开
 我来答
百度网友3365b8e
2012-09-26
知道答主
回答量:18
采纳率:0%
帮助的人:23.6万
展开全部
1:局部变量与全局变量有冲突,把void delay(void)中的i改为别的,如a,次数不要为300;120就行。且unsigned char范围为0~255。
2:最主要的问题:你数码管显示码为共阳极的,程序中的位选却是共阴极的,要把数码管显示码改为共阴极的。
3:没有消影。
以下是我对你的程序做的修改(仅供参考,我仿真过没问题):
#include<reg51.h>
#include<stdlib.h>
unsigned char i;
unsigned int x;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管显示码 0~9 (共阳极的)
unsigned char code table[]={ //数码管显示码 0~9 (共阴极的)
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
void delay(void)
{
unsigned int a;
for(a=0;a<120;a++)
;
}
void display(unsigned int k)
{
P0=0x00; //消影
P2=0xfe;
P0=table[k/1000];
delay();
P0=0x00;
P2=0xfd;
P0=table[(k%1000)/100];
delay();
P0=0x00;
P2=0xfb;
P0=table[(k%100)/10];
delay();
P0=0x00;
P2=0xf7;
P0=table[k%10] ;
delay();

}
void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256; //计50000次
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{
display(x);
}

}
void time(void)interrupt 1 using 1
{
TR0=0;
i++;
if(i==20)
{
x=rand()/10;
i=0;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
追问
1.消影很有必要吗?
2.unsigned char 只能到255?
3.局部变量i应该不会影响吧?
4.我的程序确实是共阳的没错吧?可能是你看错
追答
消影有必要,不然会乱码。unsigned char 范围是0~255,你可以查一下资料。
你的程序确实是共阳的没错,但是程序中的位选却是共阴极的啊,如P2=0xfe;是让第一个数码管显示对吧?(不然这句是什么意思?)。
创安恒业-动环监控
2024-08-01 广告
智能动环监控单元是通信基站的重要组件,作为基站动环的基础处理中心,它内置位置服务系统,能够实时采集、分析、判断、处理、上报及存储基站内设备的相关数据。这一单元具备强大的功能,包括实时监控设备运行状态、预测故障发生、迅速排除故障以及进行综合管... 点击进入详情页
本回答由创安恒业-动环监控提供
wmgi7205
2012-09-17 · TA获得超过388个赞
知道小有建树答主
回答量:771
采纳率:66%
帮助的人:443万
展开全部
1.定时器赋值把那句话放到中断起始的地方 就是一进去就赋值
2.unsigned char i; 数值范围时0-255 而你的程序判断到了300 会出现奇怪的问题
3.在定时器终端中 关闭在打开有什么意义吗 如果有意义 忽略第一条
4,.尽量还是不要定义名称相同的变量 if(i==20)中断中这句话 为了安全考虑建议更改为if(i>=20)

上面那位 显示8是因为没有消影 正确做法是 位选 段选 位清除 段选清除 然后循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式