
单片机与锁存器结合进行数码管的动态显示
如下是单片机与锁存器结合进行数码管的动态显示,可是显示一直在闪烁着不能稳定,仿真中提示是cpu过载了!simulationisnotrunninginrealtimedu...
如下是单片机与锁存器结合进行数码管的动态显示,可是显示一直在闪烁着不能稳定,仿真中提示是cpu 过载了!simulation is not running in real time due to excessive cpu load!
程序中延时已经比较的短了,也修改了几次延时都不行,而这里貌似也不存在消隐的问题啊!
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar tab1[]={0xc0,0xf9,0xa4,0xb0};
sbit cs=P3^6;
sbit ds=P3^7;
void delay()
{
uchar i,j;
for(i=0;i++;i<100)
for(j=0;j++;j<10);
}
void main()
{
while(1)
{
cs=1;
ds=0;
P1=0x01;
cs=0;
ds=1;
P1=tab1[0];
delay();
ds=0;
cs=1;
P1=0x02;
cs=0;
ds=1;
P1=tab1[1];
delay();
ds=0;
cs=1;
P1=0x04;
cs=0;
ds=1;
P1=tab1[2];
delay();
ds=0;
cs=1;
P1=0x08;
cs=0;
ds=1;
P1=tab1[3];
delay();
ds=0;
}
} 展开
程序中延时已经比较的短了,也修改了几次延时都不行,而这里貌似也不存在消隐的问题啊!
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar tab1[]={0xc0,0xf9,0xa4,0xb0};
sbit cs=P3^6;
sbit ds=P3^7;
void delay()
{
uchar i,j;
for(i=0;i++;i<100)
for(j=0;j++;j<10);
}
void main()
{
while(1)
{
cs=1;
ds=0;
P1=0x01;
cs=0;
ds=1;
P1=tab1[0];
delay();
ds=0;
cs=1;
P1=0x02;
cs=0;
ds=1;
P1=tab1[1];
delay();
ds=0;
cs=1;
P1=0x04;
cs=0;
ds=1;
P1=tab1[2];
delay();
ds=0;
cs=1;
P1=0x08;
cs=0;
ds=1;
P1=tab1[3];
delay();
ds=0;
}
} 展开
3个回答
展开全部
芯片型号看不清,试试下列程序。
void main()
{
while(1) {
P1 = tab1[0]; cs = 1; cs = 0;
P1 = 0x01; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
P1 = tab1[1]; cs = 1; cs = 0;
P1 = 0x02; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
P1 = tab1[2]; cs = 1; cs = 0;
P1 = 0x04; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
P1 = tab1[3]; cs = 1; cs = 0;
P1 = 0x08; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
}
}
void main()
{
while(1) {
P1 = tab1[0]; cs = 1; cs = 0;
P1 = 0x01; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
P1 = tab1[1]; cs = 1; cs = 0;
P1 = 0x02; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
P1 = tab1[2]; cs = 1; cs = 0;
P1 = 0x04; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
P1 = tab1[3]; cs = 1; cs = 0;
P1 = 0x08; ds = 1; ds = 0; delay();
P1 = 0x00; ds = 1; ds = 0;
}
}
更多追问追答
追问
奥,芯片是74ls373!刚刚试了一下还是不停的闪烁(我估计你是把我片选和显示的搞反过来了,cs是片选的,ds是显示的),延时和消隐都不行,难道是仿真的问题?
追答
上述程序中的 cs、ds,反了,换过来即可。
换过来后,程序就是正确的,就可以使用。
动态显示,宜采用四位一体的数码管,不宜用单个的。
单个的数码管,反应慢,动态显示时,有闪烁现象。
展开全部
你按如下修改试试
void delay()
{
uchar i,j;
for(i=0;i<5;i++)
for(j=0;j<120;j++);
}
void main()
{
while(1)
{
cs=1;
P1=0x01;
cs=0;
ds=1;
P1=tab1[0];
ds=0;
delay();
cs=1;
P1=0x02;
cs=0;
ds=1;
P1=tab1[1];
ds=0;
delay();
cs=1;
P1=0x04;
cs=0;
ds=1;
P1=tab1[2];
ds=0;
delay();
cs=1;
P1=0x08;
cs=0;
ds=1;
P1=tab1[3];
ds=0;
delay();
}
}
void delay()
{
uchar i,j;
for(i=0;i<5;i++)
for(j=0;j<120;j++);
}
void main()
{
while(1)
{
cs=1;
P1=0x01;
cs=0;
ds=1;
P1=tab1[0];
ds=0;
delay();
cs=1;
P1=0x02;
cs=0;
ds=1;
P1=tab1[1];
ds=0;
delay();
cs=1;
P1=0x04;
cs=0;
ds=1;
P1=tab1[2];
ds=0;
delay();
cs=1;
P1=0x08;
cs=0;
ds=1;
P1=tab1[3];
ds=0;
delay();
}
}
更多追问追答
追问
貌似还是不行,就是一直闪烁!
追答
可能你的数码管是静态的。
本回答被网友采纳
展开全部
延时函数还有像你那么写的啊!难道是我孤陋寡闻。。
更多追问追答
追问
奥,我一直都是这样用的,那你的延时是什么样子啊!
追答
for(i = 0;i<100;i++)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询