前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。% H) j& C5 A2 O3 ^. a. _# w8 `
程序如下:
! V2 b3 |. P& ]' S#include <AT89X51.H>( J. Z, {; O6 U
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};/ w& Z J; v$ t) m' o4 o+ W" b
int i=0,j=0,k=1,a=0;
- g) B. d9 C o& Qsbit beep=P2^1;
, T, X+ I/ e* Csbit P35=P3^5;; z: x( E! x5 m+ I2 E% y
sbit P36=P3^6;
1 L8 O6 d4 g+ Nsbit P37=P3^7;+ }6 j) b& Y! m+ V; H/ u3 @, N
void delay(unsigned int aa)' m' Y, E, d8 T7 D
{unsigned int jj;4 \' A7 B& x. _2 C% c% N
for(;aa>0;aa--)
! A% \3 U% u; Q* i# G! h( xfor(jj=0;jj<60;jj++). h! y* {: e8 n9 g
{;}}, T6 M4 q- B# g' B4 X Y# d
void main(void)
7 n6 R, Y6 R) }2 N' u' T- L{
' ^" G# L) E3 vEA=1;9 }7 M) T4 o7 X( y2 A( J
ET0=1;# p P& l h0 Q2 t4 S' W
TMOD=0x01;
7 ~1 y" Y( w' K5 S& r+ g5 ]TH0=0xff;
! x: y( r/ n; Y# ~* gTL0=0xff;* C4 m' c7 O: ^( Q
TR0=1;6 h# v# U; w8 Z! v0 ?/ u) Y! F7 b
while(1)
. ~; S' f% @& R6 {0 m( E1 z{" z4 S5 q( Y* M5 e! k2 A
} }
# Z3 q$ H- C( w$ U- z5 N# ^* H0 H: {+ Z) U S
void timer0() interrupt 1
" i( C3 U) g" E/ U* ?{if(i<1&&j<1&&k<1)
8 Y. r$ @7 G* V6 i" {: h3 B{P37=0;
4 D s$ x! i* B8 x. d1 x3 TP0=led[0];
2 k6 c. q: C# k4 U2 S8 zbeep=0; : X) V* N8 Q. h. [! B4 V
}
$ T) R# ~% p% X5 [( h/ Velse + S8 f e) {, w5 A
{6 l% u: q3 e3 P, ?# B8 S4 ~
P37=0;
3 t3 M. j. L+ g2 `. RP0=led;8 s& ^1 h" [3 h0 ]5 m( g* n
delay(5); ! w1 T) Q& ~: M6 @
P37=1;6 M& r+ a9 L; i; S% D% @
}
# s3 E4 ~; o2 t4 ~if(j<1&&k<1)
4 W; E% ^ s2 V+ dP36=1;
* e- l x' R! _5 s" n/ K) jelse' F8 l2 X: B0 X/ J1 s7 v# ^
{, M2 c1 b) d( H) N% ~) S& D4 w
P36=0;6 a, D- ?5 o& m3 v2 p1 u% g
P0=led[j];
+ M& ~' e6 w7 ^. Bdelay(5); 8 }0 z- z0 ^- ]" ]9 z" m3 _: x
P36=1;
4 U! S& f* ^( ^, e+ g! ?}' G4 c' w$ u$ g5 Z8 W- G
if(k<1)
. J7 f. a- d0 L$ F* n6 rP35=1;
8 f( C* c* y, `5 c6 K6 Yelse
- Y3 e6 z( v% l- k& F{P35=0;5 l6 H+ g& n C2 R
P0=led[k];
9 @. g$ Q- b- _9 F5 E: i: w7 Y! ydelay(5);
O- ~0 d9 J. n0 Q& F5 OP35=1;
& m, Y v3 g3 o}a++; P4 r+ s+ l" u8 Z
if(a%20==0)
9 H1 c6 a0 H: a( w: h{ 4 ]8 {& V9 w x7 K! G; ~
i--;. q- f6 X# Z5 Q- Q l5 E4 b
if(i<0)
' @% h; `# S* E9 o* k/ p! Q3 i2 i{i=9;
9 J: j, h7 E, H* S2 G* U5 ?( lj--;}
" q2 L, u3 i) J- aif(j<0)
$ b7 Y$ b# Q" O; d{j=9;, X( s w/ p! J t
k--;}' J+ J0 G+ q( H
TH0=0xB1;
; T! [( v; i# ETL0=0xE0;* h+ ~2 P2 s1 J! F. N0 u
}} |