单片机数码管动态显示问题,求视觉余辉效应的延时C语言程序?

我做的程序老是闪烁的 如果把延时参数减少到2500一下就只会显示第二个而已,不知道为什么?
#include<reg51.h>
sbit gan1=P2^0;
sbit gan2=P2^1;
char table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90
};

int count=0;
void deplay(unsigned int n)
{
int k;
for(k=0;k<n;k++);
}

void interrupt_function1()interrupt 0{
count++;
}

void interrupt_function2()interrupt 2{
count--;
}

void main()
{
IT0=1;
EX0=1;
IT1=1;
EX1=1;
EA=1;
while(1)
{
if(count>=0)
{
gan1=1;gan2=0;P1=table[count%10];
deplay(4000);
gan1=0;gan2=1;P1=table[count/10];
deplay(4000);

}else
{
gan1=1;gan2=0;P1=table[0];
deplay(4000);
gan1=0;gan2=1;P1=table[0];
deplay(4000);
}

}
}

你的位选实际上可以直接写,P2=1,P2=2来表示,上述程序P2口实际上有了4钟状态,只是P2=0和P3=3的状态时间很短,看不出来。在每个delay();后面加一句P1=0;消影。
你的延时太长了,所以看起来会闪烁。调到200以内就好了,再加一个消影。
我一般用毫秒延时函数
void delayms(unsinged int xms)
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-19
动态显示,扫描频率>50Hz,如8个数码管 则频率=8*50=400Hz
扫描频率<50Hz, 就会闪烁。
第2个回答  2011-10-19
在gan1=0;gan=1之间加入几个空指令_nop()追问

可以具体的吗

相似回答