Proteus仿真,动态显示时数码管一闪一闪的,不稳定。
本人单片机新手,求大神指教。我在做显示学号(学号:201015020137),利用的是数码管动态显示,但是仿真时数码管一闪一闪的。程序如下:(没贴完整程序,因为贴不下。)...
本人单片机新手,求大神指教。我在做显示学号(学号:201015020137),利用的是数码管动态显示,但是仿真时数码管一闪一闪的。
程序如下:(没贴完整程序,因为贴不下。)
#include <at89x51.h>
#define led11 P3_0
#define led12 P3_1
#define led13 P3_2
#define led14 P3_3
#define led15 P3_4
#define led16 P3_5
#define led21 P1_0
#define data P2
void delay()
{
int i;
for(i=0;i<30000;i++);
}
void main()
{do
{
led11=0; led12=1; led13=1; led14=1; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x5B;
delay(); //显示学号第一位:2
led11=1; led12=0; led13=1; led14=1; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x3F;
delay(); //显示学号第二位:0
led11=1; led12=1; led13=0; led14=1; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x06;
delay(); //显示学号第三位:1
led11=1; led12=1; led13=1; led14=0; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x3F;
delay(); //显示学号第四位:0
led11=1; led12=1; led13=1; led14=1; led15=0; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x06;
delay(); //显示学号第五位:1
led11=1; led12=1; led13=1; led14=1; led15=1; led16=0; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x6D;
delay(); //显示学号第六位:5
led11=1; led12=1; led13=1; led14=1; led15=1; led16=1; led21=0; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x3F;
delay(); //显示学号第七位:0}
while(1);
} 展开
程序如下:(没贴完整程序,因为贴不下。)
#include <at89x51.h>
#define led11 P3_0
#define led12 P3_1
#define led13 P3_2
#define led14 P3_3
#define led15 P3_4
#define led16 P3_5
#define led21 P1_0
#define data P2
void delay()
{
int i;
for(i=0;i<30000;i++);
}
void main()
{do
{
led11=0; led12=1; led13=1; led14=1; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x5B;
delay(); //显示学号第一位:2
led11=1; led12=0; led13=1; led14=1; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x3F;
delay(); //显示学号第二位:0
led11=1; led12=1; led13=0; led14=1; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x06;
delay(); //显示学号第三位:1
led11=1; led12=1; led13=1; led14=0; led15=1; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x3F;
delay(); //显示学号第四位:0
led11=1; led12=1; led13=1; led14=1; led15=0; led16=1; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x06;
delay(); //显示学号第五位:1
led11=1; led12=1; led13=1; led14=1; led15=1; led16=0; led21=1; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x6D;
delay(); //显示学号第六位:5
led11=1; led12=1; led13=1; led14=1; led15=1; led16=1; led21=0; led22=1; led23=1; led24=1; led25=1; led26=1;
data=0x3F;
delay(); //显示学号第七位:0}
while(1);
} 展开
4个回答
展开全部
数码管动态显示,每个管间的延时时间以1-2ms为宜,如果是这个范围,显示是不会出现闪的。
但是,你在PROTEUS仿真时,由于你的电脑速度或者你的仿真内容比较复杂,计算机的仿真的运行时间长实际的时间,因此我们可能看到了LED的闪烁。这个你可以不用管它,实际运行不会有这个问题。
如果是这个情况,在运行时有信息提示,大意是计算机的CPU速度不是以真实的速度运行的。
但是,你在PROTEUS仿真时,由于你的电脑速度或者你的仿真内容比较复杂,计算机的仿真的运行时间长实际的时间,因此我们可能看到了LED的闪烁。这个你可以不用管它,实际运行不会有这个问题。
如果是这个情况,在运行时有信息提示,大意是计算机的CPU速度不是以真实的速度运行的。
追问
我已经解决了,延时程序改了很多遍终于弄对了。
void delay() //计算延迟1ms
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++) ;
}
名片
2024-10-28 广告
2024-10-28 广告
HyperWorks是一款功能强大的工程仿真软件套件,由优菁科技(上海)有限公司代理。它提供了从概念设计到详细分析的全面解决方案,支持多种物理场的仿真分析,包括结构、流体动力学、热分析及电磁场等。该软件还具备拓扑优化、形状优化和尺寸优化等设...
点击进入详情页
本回答由名片提供
展开全部
延时时间缩短。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题是Proteus的BUG,先显示位选,再显示段选,闪烁现象可以消除了(延时5ms到20ms之间都可以)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
延时不对啊
可以交流
可以交流
追问
我也觉得是延时不对,但是我试了好多,还是不行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询