前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
9 K1 `7 T5 ], |) ?6 p( T程序如下:0 Y! l: j) u, n
#include <AT89X51.H>
" B' F, g7 c+ t+ d$ m* Lunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
) A% x. ?- Z3 X. ]" I/ {int i=0,j=0,k=1,a=0;
Q q7 Q/ ]+ n4 Usbit beep=P2^1;; |: [( f \/ Q5 t, ]& x$ N
sbit P35=P3^5;! q8 e4 X: Y' [5 u5 c
sbit P36=P3^6;9 X; V4 D6 D0 `& N- O' A
sbit P37=P3^7;
, {2 _( o7 f1 ^- Q1 Z) Tvoid delay(unsigned int aa)' r# ~1 ` O; @" x: ^
{unsigned int jj;* v, f% p* a8 j+ y: u V: p4 c9 H: L
for(;aa>0;aa--)
0 q3 _& f3 ]& b) d( X5 q2 Sfor(jj=0;jj<60;jj++)
, I8 A2 N% k# k( B! i" I{;}}
1 F% @% X/ e9 K6 xvoid main(void)
# {5 e" a# U) p7 J- e" p- N{' K1 f. h2 D0 F. _" y
EA=1;+ \1 x* O/ u3 l
ET0=1;/ y ]3 D% v( a# _
TMOD=0x01;$ _' c; ~5 d% A, A, E( o6 E
TH0=0xff;5 d3 Y% E( W: X: d
TL0=0xff;
( J+ G A) P' @! u BTR0=1;
* b/ W" _1 W. S! ]( [while(1)
- Q" M. e7 a( x; s{
" s+ U8 s3 B h6 d } }
+ b: V* F1 m8 O* D' @# P, t
& y7 f4 M% V# O* O! lvoid timer0() interrupt 1
" K: B/ W) U3 W{if(i<1&&j<1&&k<1)
& V6 B' G3 X" K{P37=0;
6 F( S$ k2 ~) ]/ g4 o1 P- C1 EP0=led[0];
: o* [& _$ f! a5 }# Hbeep=0;
9 F8 B3 y _( D% I2 f}* l Z0 d4 e9 L
else
) m, ]: T3 E( s$ ?; u q6 n{8 ]+ Y8 Y" Q' B" G% m# U
P37=0;. m r9 L4 l( W) n- _; B; O
P0=led;
( Y& Y# M. _% p. F9 T" g* odelay(5);
1 @. Z' o% S% m! Q$ _P37=1;
$ C0 D K; K8 p# r1 m} : g+ M0 t( L- j( \6 h% s
if(j<1&&k<1)
+ z7 ~( x8 `1 H: CP36=1;$ L+ ^ f* N2 a. A+ V& y
else
) _7 e- I, B2 w5 W) ^* \1 w{
8 M) u- _+ b$ s0 T eP36=0;: o; Q. v9 E6 Y0 a
P0=led[j];0 a- ?; W+ X0 C/ o4 Z/ k3 U
delay(5); # Y( j9 r b$ G4 ]! T; Y0 X2 p
P36=1;
; i- Z/ _8 i! V1 G6 S3 L}
# G/ X" a0 V2 `# Oif(k<1)
! `+ \0 s+ L* {7 a' t* _P35=1;7 ^1 \* ^+ y% o* p4 c- n1 O8 n
else& Z0 J; J3 {6 m
{P35=0;6 L M1 W5 h: c/ t
P0=led[k]; y5 C- V, |- S+ Q+ `+ e: `
delay(5); 4 H. p) {# M3 E. D. B' t0 v+ J0 f
P35=1;! [1 X" n% s% L2 [# ^3 N0 b% F
}a++;
/ m9 f) h6 o2 x/ jif(a%20==0)( {( G% A* V1 U2 P
{
% Q. e2 W8 i" j% U t' H9 Ci--; p8 N7 K+ u2 N
if(i<0). L; i$ G4 O, g4 s* M2 O4 y, w
{i=9;3 O2 m. C9 C4 {0 u2 |5 t( N* C
j--;}
' E8 |$ _6 B8 ] Wif(j<0) ) d5 B6 P, Y7 \4 K3 f
{j=9;
& J: N. H/ ?/ y! \3 Sk--;}
5 I! z* ^/ ^, I- {$ \" K1 a3 cTH0=0xB1;
# m7 O: \' S0 Y5 `7 @0 V' PTL0=0xE0;
9 q2 Z! n0 Z8 ^) U X- J}} |