前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
+ ]) V: H, c' G, S- \; ]程序如下:+ |; S2 |! B1 z( @, q2 C5 q. N2 ^ v
#include <AT89X51.H>/ R$ x0 U3 \$ |
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
3 E& _3 d, S" @/ Fint i=0,j=0,k=1,a=0;3 t" h! z6 z* Q; ]% a
sbit beep=P2^1;9 X9 I+ l2 c6 l
sbit P35=P3^5;7 X, k' \4 Y" Z1 P) K4 w. I
sbit P36=P3^6;2 M5 G0 y) `" P' v& x& }* d2 g
sbit P37=P3^7;2 K7 P, `$ t: y/ K/ a: x* |7 A
void delay(unsigned int aa)1 {( q* }6 e0 i* A
{unsigned int jj;
6 H/ \( a0 Y tfor(;aa>0;aa--)
! o3 U1 }' R: T p/ l: s, I% i" E/ ffor(jj=0;jj<60;jj++)
3 W9 k2 u; H# R5 a: w: n& B{;}}9 R# u7 l9 f4 w/ {
void main(void)
. C6 [9 X9 h& d$ o1 D8 ~{1 W( T1 b+ x4 @$ v. ]& Q: V" ^
EA=1;9 A6 @) _( B- S2 O
ET0=1;. t/ ^1 l$ d: m1 z2 F& w
TMOD=0x01;) [9 [0 v. _" Z# @$ y3 f' @
TH0=0xff;
0 ]5 ^( [, T/ l( Y7 R: k( V6 X! Q7 tTL0=0xff;! }% B, O( V. ~3 u" t
TR0=1;( Z6 ^" Y [* o/ W4 @% l+ i. f! p9 g; l; u# [
while(1)6 G- E0 }4 s( m
{- l$ l0 Z3 A+ Y3 C- w
} }% [, t% j6 @8 g: E6 u! i
) Z& e1 |, d; Q4 |9 F; N
void timer0() interrupt 1
" B3 m$ i- Q5 z r{if(i<1&&j<1&&k<1)
1 B, g- P3 M4 t{P37=0;# z0 L* ]; P6 a+ ]( g2 K( G
P0=led[0];' a. r( T* S$ k+ N
beep=0; 6 f! p# m* W9 h. P
}
1 S( `9 l. d/ \" X4 \' S: Uelse 1 v$ y9 h4 d- G9 g; l" r1 e
{' K6 q% ?8 I* F( c, P: a
P37=0;! a+ J1 E" F( e' u+ J. q1 F7 }
P0=led;
0 y: z6 z# ^2 [6 G) Q+ d' F% hdelay(5); & a( S' i3 D; A' P$ W. E" u* b7 ?
P37=1;
G; A+ Z8 J" @6 u% n! N3 ?} , K/ G% L- p5 T* B4 F9 L! G% C
if(j<1&&k<1)3 ^% }5 f4 y% _( T
P36=1;
$ c3 k8 j7 t2 c8 ?, ^" Xelse
* x& {( s9 K( ~; q6 k{
- z$ [/ U: F m0 ?" \P36=0;2 k7 K$ E; P4 {! m6 `0 m
P0=led[j];
( H; I1 o2 m2 {7 Xdelay(5);
$ ~, o, q" l& { q' X& bP36=1;
3 @1 s7 I% o9 ?9 J1 ^% Q/ B6 b% a}4 T u: f0 b7 Z* o+ Y3 P
if(k<1), Z( Z( \& J8 u* Y
P35=1;- x: `+ g' v6 w
else
. @3 @7 l8 Q2 U: |{P35=0;5 {( E; m% q7 S! O
P0=led[k];
9 U2 C! @8 S9 Z3 y8 h$ wdelay(5); : f3 l7 K3 q7 A$ ^
P35=1;9 X% T' o; f l/ \# K
}a++;
! Z8 X( h' A) f e( M$ U, L) r( \if(a%20==0)
5 W, ?9 x# ]" @. b7 }$ `) ^1 N0 c! W{ + }( c9 i% Y" e7 \; a5 e- k' E" w
i--;
2 E0 g8 ^- c. o5 K2 |if(i<0)
X# E6 [# t* d( ^1 _{i=9; o- w" M* b7 D. ~0 v5 n
j--;}& v" x, n5 d F3 q' \ \
if(j<0)
o- d9 P$ j, Q{j=9;
; r+ \' J" T9 t0 p9 [7 N+ P0 C. dk--;} }3 n# h+ l+ Q
TH0=0xB1;
& t6 }3 j4 x4 \; j# rTL0=0xE0;
' ^( v: ~7 H; r+ v}} |