前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
8 ~7 o% K% x. Y, I程序如下:
- [1 a$ k9 [" V/ [' e: \#include <AT89X51.H>; P( D2 P3 v3 E$ u% D- v
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
! |8 W, [7 e ?8 p' y! g) `7 K; Yint i=0,j=0,k=1,a=0;$ L( j6 a! a& R% K5 @
sbit beep=P2^1;9 @1 }6 g: J$ P& e0 h( _' m1 G
sbit P35=P3^5;$ }5 ?0 }" B- G* S( i
sbit P36=P3^6;* s' z0 M0 i6 u, K0 v: S
sbit P37=P3^7;- Q, n( U2 n* s" v5 Y* T H# o4 ^
void delay(unsigned int aa)
5 N/ `& A7 E0 o8 K{unsigned int jj; q3 G* \, B; a H; j( S3 w3 V
for(;aa>0;aa--)
1 S) f% t4 ]: h: k1 ?for(jj=0;jj<60;jj++)
/ O$ k/ }( X) U, R7 ]- _3 _{;}}
1 H7 w$ [* Y! E1 B3 ]. e" F0 ~void main(void)+ @4 S4 z8 p/ k9 e! I/ L2 ^. b
{7 {; m6 F6 k1 n* f" b2 L8 x- P
EA=1;* o) J+ u& b$ O7 Q0 K
ET0=1; W7 q, y% J: [
TMOD=0x01;' `& h) R: x5 U$ l4 X
TH0=0xff;
7 n2 s% _# E8 m) Z# n9 dTL0=0xff;
3 K/ S- l! c! F! @TR0=1;
! d/ B0 s: S) K, r- ywhile(1)
) C& I5 `, l, o* p1 B k u$ Z{& Q' W! \* |' S. W8 @2 \
} }% {* P' x" l7 ^& N9 Q/ ], I
+ m2 q* b2 P9 F1 v, gvoid timer0() interrupt 1& @8 S1 q0 k; q% B
{if(i<1&&j<1&&k<1); V4 P- H$ n, J
{P37=0;
1 }( Q" K" l+ q2 z/ N: SP0=led[0];
2 K k8 q0 N3 O; T0 X! S! z" g( n# ~beep=0;
! H7 r9 I/ z, W2 b% J}
+ `/ {1 l/ @- delse
* i* H# F/ q! T9 L1 Z U6 x0 Q{# A. i3 y' J) I
P37=0;9 T& M9 b. ~! Q$ R! ~
P0=led;, l2 d# S$ v) A6 F
delay(5);
8 H6 p& L) H' j8 GP37=1;' |' b2 B1 r( l: E1 \5 f8 P
} 1 [# J4 ^. k4 k% m- A2 h
if(j<1&&k<1)) v- ?! e/ T/ E
P36=1;
1 I# G6 p7 l! s. D2 E$ N8 p! i& t$ nelse. W h+ V1 j" f4 @
{0 o5 u; M& I* u i$ E2 N
P36=0;5 Q8 a2 u$ C) q9 ^% m/ |8 l/ U
P0=led[j];+ W I g! e: {" G& j. F4 `: a
delay(5); 9 T! `" L, ~" x2 _* U
P36=1; \* S- ~; }$ C* |6 u+ j W" \" G
}* @/ m4 W- G; X! M+ ^
if(k<1)4 t/ j* j1 z: P O0 ~% q
P35=1;! Y; k b" m: l. p
else
2 \4 E- b7 M/ m{P35=0;
% }& I5 B3 B9 ^6 O' j( l( VP0=led[k];$ ~4 F8 x& g7 F$ Y8 o
delay(5);
0 a4 V. ]6 @7 ~; T: ]P35=1; y& P$ d6 V) a, T x
}a++;7 B( R0 F- [4 t1 ]
if(a%20==0)& D" j2 U0 U6 k) N& u
{
, j7 c; K9 I* H. S' B* ~i--;" p' C: [1 S. F1 t. Z/ Z0 U
if(i<0)
3 Q, y4 q4 n5 T' Y' h{i=9;: ]; P4 w4 I. N6 ]5 a9 `9 l4 }
j--;}
- U& h5 j, {0 F' Rif(j<0)
8 H% N: V" g) p) I# [& `1 {+ j' g! X{j=9;
4 F4 }! ~( j. R9 O7 I7 Y) Ck--;}2 n7 ]+ K% m! X; ]
TH0=0xB1;
9 a, X0 w8 r6 ]; m) ^/ LTL0=0xE0; D/ i5 Z. ]5 c$ Q
}} |