前不久用c語言寫了一個(gè)數(shù)碼管動(dòng)態(tài)顯示倒計(jì)時(shí)程序。倒計(jì)時(shí)倒是沒問題,可無論我怎么調(diào)延時(shí)時(shí)間,他都閃爍的厲害,請問高手怎么處理。是掃描頻率太低,還是點(diǎn)亮后延時(shí)不夠。如果是以上的原因,那么掃描頻率和動(dòng)態(tài)延時(shí)各要多少才能看起來不閃。
- }- V. h& f: R' ?+ \程序如下:# o7 f4 K& E M! c' I
#include <AT89X51.H>
- [7 y/ W8 \, o" i& f( [$ vunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
$ t" B$ U9 f) e8 b& \ S( p; {int i=0,j=0,k=1,a=0;) z0 Z n, ~- J7 n
sbit beep=P2^1;7 [1 g" ^& t4 `) S# y( ^; p6 ^
sbit P35=P3^5;
/ b8 J- f H1 B! f, L( H) [$ n( x) g) Dsbit P36=P3^6;
4 A6 Q. ?$ v3 L0 z8 ^# L& esbit P37=P3^7;
# j7 c: x+ M* kvoid delay(unsigned int aa)
# z7 g8 C$ E7 {( L0 L, n{unsigned int jj; }, t7 J* [/ b$ Z4 U% C
for(;aa>0;aa--)1 h8 v. J: Q2 J
for(jj=0;jj<60;jj++)
8 l, V# P1 A' B* T* h/ L! n( {{;}}' e3 M( V+ S' k* {1 k
void main(void)8 R/ B9 ?: i2 D# }
{! ]3 z+ p$ R$ u7 D
EA=1;7 D" P3 r2 r0 o7 @6 P) I' u
ET0=1;
4 M& t3 ]" j! Y" l. E; G* |% @# I. bTMOD=0x01;% O3 j8 M! s' E
TH0=0xff;
: K; J9 f" Y; M( _. k& {8 lTL0=0xff;9 G: O/ W% L9 c* o
TR0=1;1 m- Q Y# U1 `. x
while(1)3 U2 @- F, S( K( f3 X3 W: S
{
3 c' [, g% n9 ^" o% Y6 m } }
7 S0 B) K5 E% }5 o' t: }
0 n2 g& W" B3 f/ Cvoid timer0() interrupt 1
3 G0 v& b/ W- |6 o{if(i<1&&j<1&&k<1)' V4 F) g, f5 L0 W( \, v9 z$ E
{P37=0;% B- G5 [# ~( G" Q
P0=led[0];6 s. J8 p: u5 x5 D( Z( a7 \
beep=0; 6 b6 W' [- ]4 }% n! ^% V# R1 @1 Y
}
5 s% D v1 p0 B' B8 ^; O1 k7 P* Telse
. J5 B& r/ u* K' T4 W{" r8 s+ }% X% M
P37=0;: g7 L0 H# U& t- X
P0=led;
) p7 J7 l; z/ f* k0 f8 y: R& `delay(5);
5 l8 t2 g. L+ K# J3 {; c# AP37=1;- `: t: B& t. ^! I3 H* j
}
( T. ]' {6 R$ O9 F) Z2 iif(j<1&&k<1)
2 \/ M! Q/ R4 D2 U& M8 mP36=1;
, I V' { U6 ^& E9 melse; w5 {0 m* \' d0 d; u: X
{: F* p" Q) c0 t, N% J
P36=0;
8 C/ e4 w1 ~4 y5 x4 P9 tP0=led[j];
& I D- \6 \7 P3 A3 \6 w6 y7 s( Xdelay(5); 4 |' Q4 I0 Z o9 @0 w
P36=1; , W' d0 X( `" `3 ~+ ]: p
}0 F2 |1 h) T; g( t9 _/ M2 C/ Q
if(k<1)
# I; V* [/ a0 y* _: r; RP35=1;
2 b) \, ^5 P/ B/ L! R9 F; telse
, h9 j# k' i& J3 Y) |# p. v7 @9 R{P35=0;
, I6 ~( g; a+ p- n# h; i) fP0=led[k];/ t8 U3 b9 ~/ v. n. {& N
delay(5); ( H* L% K D) [) w8 \" J
P35=1;
0 ]1 b% f1 d9 }3 B1 M}a++;
' H+ G% Y( H( j; x5 R- c! R8 d5 {if(a%20==0)
2 _0 t8 E/ h" r; w{
5 `8 N2 T* w: ni--;
. A& a3 R; j9 _+ v5 ~if(i<0)/ `5 t$ l9 o' f- Y) j) {' _4 S
{i=9;
' e" P0 p. v2 x9 _/ `# Tj--;}& u6 s1 U: S& ^6 H% z
if(j<0) / x# h) x, f) o- T' e, L
{j=9;
$ f& D, o: _( F6 G! N4 fk--;}8 J; I2 S. C j" i' i7 `& V
TH0=0xB1;
$ b3 E# ?* @+ l0 r6 N$ QTL0=0xE0;
* p* ]" W! Z6 m, d7 j4 o}} |