前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
; L5 g) w5 q5 k7 ^0 L& |7 E: [程序如下:
6 v+ l9 j8 Q3 H+ i#include <AT89X51.H>3 T# d2 D4 x% ]- P7 z3 `
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- m- Z3 H x4 e/ Vint i=0,j=0,k=1,a=0;! I z' c8 h/ g7 q- m; y/ u( ?& p
sbit beep=P2^1;# M* [! R7 k7 {1 v5 Z
sbit P35=P3^5;
1 e5 v4 q2 }1 |, v ysbit P36=P3^6;
! m" G9 V/ c1 }8 ~/ D+ i. Qsbit P37=P3^7;
- F" i: V: A( M# Z1 v; q, B+ wvoid delay(unsigned int aa)
, ^8 q4 z4 C# J{unsigned int jj;4 ~2 W U/ c% W) m* V3 {
for(;aa>0;aa--)
0 b, T7 M, X! F2 bfor(jj=0;jj<60;jj++)
: @# O' B1 l2 N9 w5 [; S% E{;}}
; ]* m) X- K, C$ ]5 \7 Rvoid main(void)
5 D0 x( }" ~$ S h/ v- Z' a{
* J2 B3 Q5 x+ m1 [EA=1;2 l7 H6 G) ^. W- K* Z) R& T
ET0=1;
4 C7 q& A$ e5 ~% Y0 l8 `& \TMOD=0x01;# ?3 |4 c* E- Y9 z
TH0=0xff;. S( U* N/ x* u) G+ B
TL0=0xff;
2 W, c( z2 O x r: M7 @1 eTR0=1;
% l, A, b3 L' Q7 gwhile(1)
: K J7 a0 F3 {1 ?9 y; X{ T: }% [8 [" q8 {7 j9 z; |) z
} }
% ?, T4 Z' H; B' M: c% U
' a2 E# b) J& k+ f* P& E3 H: rvoid timer0() interrupt 1! S* N* v) m! _2 d# H
{if(i<1&&j<1&&k<1)
' P6 q* `8 a9 n8 F" y{P37=0;; Z) `8 ]- L% |4 v
P0=led[0];* o/ _7 m1 ^* X: N+ e; O% v' h
beep=0; 8 ~5 L. p. E# L( R
}) Q' A: V- E; W: o8 H! Z
else
1 u" U& N _" \5 w4 T) ]2 A{0 p y6 j6 e1 Z$ E" ~, z4 @
P37=0;$ _+ r6 @& M( B' W9 j
P0=led;
' O Y9 D0 I0 qdelay(5); " s9 k# p2 Y" |% ]8 x
P37=1;9 Z! S! Q5 I3 A, P2 H8 ~
} , }" X& Q4 ~1 k$ t
if(j<1&&k<1)+ U! d# w3 }. G2 H5 M
P36=1;
' u6 U$ Q& g' i A @, y/ k1 Gelse4 R" Z) Q& {9 k$ {4 R+ F
{# f. Q; c. u* e$ d' c3 f6 M- i8 D: I
P36=0;7 Z( c: A2 `5 l" r& X
P0=led[j];
6 g' U$ @! Y) f! X; x; Kdelay(5); 9 G& f% z$ I. D& Z
P36=1; / C5 A( A) B: V! f
}
# G. Q. N) L; gif(k<1)
7 O4 B- @8 Q8 D, r) b6 uP35=1;
. Q! u* s2 i% w" ]& D: velse
- u8 _1 m3 s, ^% a: @$ u{P35=0;
2 C' Z* A6 M% z2 `# UP0=led[k];
4 n9 u" a! k+ d+ t# x( h! {8 {delay(5); 4 u% w' x- R, l
P35=1;
3 }& t o3 h: |3 d, m7 D}a++;4 S' m0 u X! x; N
if(a%20==0)
7 Z' q0 _. r4 y' V2 f0 J{ 2 M5 ?9 h( X8 b0 i Y, P2 ], E3 n
i--;
9 D, U2 i% E+ R. W* Z2 yif(i<0)
- L$ r. A- g/ j7 \8 o* O% k{i=9;
3 x+ m0 q7 n) T, Bj--;}
9 K8 D) h% x& ^if(j<0)
- P+ W/ ` ~7 P, m( T{j=9;& B' A3 h t1 _& @/ N9 w3 H
k--;}
; M3 ]6 J' X5 P' |% W/ OTH0=0xB1;
2 W# Y; Q( q& XTL0=0xE0;
, P2 Y, g3 j7 t8 d% }}} |