单片机新手,请教问题
前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。程序如下:
#include <AT89X51.H>
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int i=0,j=0,k=1,a=0;
sbit beep=P2^1;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
void delay(unsigned int aa)
{unsigned int jj;
for(;aa>0;aa--)
for(jj=0;jj<60;jj++)
{;}}
void main(void)
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0xff;
TL0=0xff;
TR0=1;
while(1)
{
}}
void timer0() interrupt 1
{if(i<1&&j<1&&k<1)
{P37=0;
P0=led;
beep=0;
}
else
{
P37=0;
P0=led;
delay(5);
P37=1;
}
if(j<1&&k<1)
P36=1;
else
{
P36=0;
P0=led;
delay(5);
P36=1;
}
if(k<1)
P35=1;
else
{P35=0;
P0=led;
delay(5);
P35=1;
}a++;
if(a%20==0)
{
i--;
if(i<0)
{i=9;
j--;}
if(j<0)
{j=9;
k--;}
TH0=0xB1;
TL0=0xE0;
}} 何其 网友好!
你的延时子程序中的延时太长了,所以闪烁。
.
syw091204---08.22 不是吧,开门大侠,循环60次,一毫秒都不到呀。 何其 网友好!
.
你用一下我给的延时看看还闪烁不?!
.
syw091205---05.11
P0=xsjs;
P1=xsws;
delay(10);
//****************************
void delay(int x)
{
inty, z;
for(y=0;y<x;y++)
for(z=0;z<2;z++);
} 还是闪,是不是这种程序里不适合if语句呀,我用除余数的方法如下程序就好了。
#include <AT89X51.H>
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int i=0,j=0,k=1,a=0,js;
sbit beep=P2^1;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
void delay(int aa)
{int y,z;
for(y=0;y<aa;y++)
for(z=0;z<60;z++);
}
void main(void)
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=0xff;
TL0=0xff;
TR0=1;
while(1)
{
for(i=100;i>=0;i--)
{
js=i;
delay(500); }
} }
void timer0() interrupt 1
{
P0=led;
P35=0;
delay(5);
P35=1;
P0=led[(js-(js/100)*100)/10];
P36=0;
delay(5);
P36=1;
P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];
P37=0;
delay(5);
P37=1;
TH0=0xB1;
TL0=0xE0;
}
页:
[1]