前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
7 p: U$ s! _5 h: t1 D2 i程序如下:! j8 k0 Q' o+ Y3 N) r+ w
#include <AT89X51.H>
; w, M3 ^ ^; ~# X! C( bunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
4 M! n/ f8 @8 O, i9 v1 T2 I4 Kint i=0,j=0,k=1,a=0;) M) Q0 f& `4 [. o* X" h
sbit beep=P2^1;
+ a; ~; _7 F6 ~; S$ @' U' L" ysbit P35=P3^5;
+ E( \3 `4 Q, ?7 t ksbit P36=P3^6;
8 y4 f# b! \# |& Bsbit P37=P3^7;
5 p* T. C6 g; u0 lvoid delay(unsigned int aa)
: }4 `, j' P ]3 m{unsigned int jj;/ z0 E8 p8 i0 ]4 e9 y
for(;aa>0;aa--)
* p0 x/ Y& j* s' f7 afor(jj=0;jj<60;jj++)
/ ?' S8 U) s( ~. p{;}}8 R8 H* N5 ^. y/ S
void main(void)" v P( f ? Q! ?' L3 Q
{' t- s+ }6 V! ], T
EA=1;
7 {7 M# _/ `1 F9 N$ QET0=1;
5 T) h* Y0 D3 K& X. S0 D; h# u0 `+ b; ]TMOD=0x01;. t0 S3 i; k5 V! S5 X4 r0 u
TH0=0xff;8 v5 w$ M1 ~, a2 \* U/ v- j
TL0=0xff;+ t2 i7 o) J4 Q; o6 n) T& o
TR0=1;9 }. ~* y2 O7 n6 }' X
while(1)
6 D" D; i8 E! l' h, k" l{, D. f9 S( f$ `4 ^* ]7 a6 ?: G
} }
2 y+ t& L5 B& n( f3 W! {
: H' l1 z' X2 xvoid timer0() interrupt 11 [# W: b$ W8 }' e0 U
{if(i<1&&j<1&&k<1)' K' d, @1 f1 r- o& L) \. _
{P37=0;
* {/ a' ]8 ]& o4 GP0=led[0]; H; K, p. u# y+ N9 [# r9 N
beep=0;
7 [6 w0 A, Y# R' q$ x1 u}
F3 ~$ q# e6 a% s5 G1 ^else 4 q- X! H" k# {; K7 L. z
{1 w4 _1 Q' D+ D7 p
P37=0;2 [& a$ ^6 Q- Q j, O7 @
P0=led;9 `4 ~' }+ }7 k+ x& e$ r
delay(5);
( o6 n4 [ A& S5 x1 ]) p, P* AP37=1;
# ?! r) y3 O4 k+ g2 g} ; m/ G# k. S `; w
if(j<1&&k<1)$ l, B7 _1 W9 n7 V' t$ }7 k: X# I
P36=1;
: G7 ? K/ Z2 X8 ]else f; Q# W& S1 C. ?/ d
{$ ]! j+ r- ^/ O8 [( |
P36=0;4 G' h5 U5 Y% j1 ^: P" I
P0=led[j];
& ~; m6 |; z- a# K qdelay(5); 7 y; y1 s' T0 e3 v# V
P36=1;
# j5 a& ], ^, m1 L}
) U1 v/ |- M. y2 X: Yif(k<1)
/ F6 {# U- @9 {3 O1 u0 f* ~P35=1;
- }3 f/ Z+ ?2 V6 p' h1 e9 lelse$ i+ A5 h9 X9 [8 b# r0 Z- q) \
{P35=0;* _. G2 k7 P; C7 c# n8 C f
P0=led[k];4 @4 ]* b6 m8 G# f' c% \9 A
delay(5); % W9 N* d1 i! u7 V2 e5 e1 y
P35=1;
7 a$ b5 \9 f4 g}a++;! i1 R6 p+ k7 d0 k5 W
if(a%20==0)
& \8 O1 Z& u- c/ O) i{
6 j/ B) t3 H8 o4 l: \+ Ti--;/ q# s' B7 v6 g, ?8 R0 T- a
if(i<0)6 d; z* b& Q) t1 o o" u8 A9 s& L
{i=9; i5 x0 T! t9 v. e
j--;}
8 N3 O& ~2 @& L7 `8 x$ pif(j<0) * I3 y* o u8 `' O
{j=9;
: [5 d- X" Y4 S* Z1 [. ~- Tk--;}% ]8 y1 W( \4 i0 }) j+ Q
TH0=0xB1;. b! D. Z7 O2 k
TL0=0xE0;
5 f; {3 \6 I! |% H8 `; f% W}} |