前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。# z7 `9 T: y) T6 t6 K9 Q
程序如下:
2 }3 e( F! y4 Y9 ?#include <AT89X51.H>( F; X0 W/ Z! v2 m* n
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
. y+ J7 O- ^5 C7 Pint i=0,j=0,k=1,a=0;
/ h7 [. d2 e- O) M# V! y8 H' ?sbit beep=P2^1;5 M- @# h4 ]) ~# S
sbit P35=P3^5;) D7 n* b+ I% ]1 Z; M
sbit P36=P3^6;' A+ r& N/ S* D. k
sbit P37=P3^7;. C) }# F7 E3 ]9 C+ s6 Q" p
void delay(unsigned int aa)8 ~/ G# C# V) y6 S5 w
{unsigned int jj;
2 O1 r% z) t* ofor(;aa>0;aa--)
1 }8 Q; M( {5 t3 t8 a8 [6 Q8 Tfor(jj=0;jj<60;jj++)( u& @* S+ q( G& \
{;}}; e/ E9 ]' s$ i! E
void main(void). Q( t$ _/ p$ j9 S }2 H# c
{" s8 N. p& t6 w- l$ P
EA=1;
6 r! P- `4 U5 Z7 cET0=1;
) I; l. T% b2 \: E- ZTMOD=0x01;/ q5 f: ^2 P8 [% x. F; k8 v. _
TH0=0xff;) [+ ]- h: l; O Q4 `* @
TL0=0xff;
; q/ b0 K% {3 i; U5 t4 VTR0=1;
. [4 i) _9 U6 O- v" `& @while(1)9 }: V9 s0 c" l; j$ k
{
) G5 F) d% _$ Z: l' b& o' R } }
$ b% H$ C2 H0 R6 y
7 Z. @# ?5 W+ r/ u; w9 I$ uvoid timer0() interrupt 1' x7 x' T( @( X- E7 e8 I3 `
{if(i<1&&j<1&&k<1)
6 D/ t* T L7 W O) u{P37=0;0 t# |3 S+ a h! p. {
P0=led[0];
& a7 x- ?* q- {; x Ebeep=0;
. d+ F- M: `! c: P}
2 p# A" B6 s6 U* l1 K) Telse
+ ]" B4 j8 ]* J& n& B/ ~% K{7 D2 p6 H8 Q. s* R6 ^
P37=0;& O1 P ~+ t$ k7 U
P0=led;
$ O: L- @8 Y. i" @, Z0 [! k! gdelay(5); , e2 [2 i( M) f3 Q! B- L _5 H
P37=1;
( E+ w- _2 j# A0 ~* u}
: X. z( e7 [3 wif(j<1&&k<1)
2 e: U% X O( Z! s1 c; H; Q! ~/ I& h6 i" oP36=1;% z3 ?* l7 Y5 D; i, w8 B4 N! ?
else0 d, e: o; l* x
{
; t2 X I! s" D# A' S NP36=0;: L1 B% F% ]" c- V" O, x
P0=led[j];
) @% }5 a; t% F4 ?& q5 X4 p1 @delay(5);
. W. F3 U3 w7 ?2 q, T/ WP36=1;
; {4 j. C I. k, |8 u}
* T1 ^4 R# l' ~- R% ^if(k<1)
1 P0 M9 x; K1 Y( S& P# N% ^P35=1;/ _1 J9 n1 X2 r7 o- O
else* |6 X& m: _% s( k9 l
{P35=0;. y% i9 O- l& k3 Z9 Q" i4 H" I" B$ D
P0=led[k];
5 g" P1 B9 Z& ?" I1 J, tdelay(5);
9 M% H7 B6 l& L l7 a2 T! eP35=1; K7 ^9 h- k6 J/ p6 r
}a++;0 E0 s; r W( Y$ p% a1 a' E
if(a%20==0)
1 q' x/ B" l+ ?9 c. s& G D, R{
7 ?0 y/ ~- E! b* ~ B, _3 G' E1 vi--;
) q( ~+ x- w: m! v! m, j; _if(i<0)6 g9 P* Z1 ] p
{i=9;" u0 ]% x6 ?# i1 F! |% I
j--;}3 \, G# h( Z, K* J) r5 [! k6 E' |+ U
if(j<0) * w- u0 [, P$ c. t! i& ^& `3 a; m
{j=9;5 \- R! c1 e4 W5 z! j; ]( c4 v' a
k--;}
8 E5 c4 M, w4 I/ z: @- NTH0=0xB1;
; t$ V% `9 g2 O7 B4 n/ }0 K& [/ ~* aTL0=0xE0;
5 E& h+ t% G7 l' {# P) D% J+ ^}} |