前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。) l" B8 M: a3 k& ^! l3 R
程序如下:, M+ Y+ J3 f2 S) k9 y5 V' L- d
#include <AT89X51.H>
, g4 s: ~( m4 `. i) }/ m4 \unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
9 M- u- i* ]0 [# s* s& H+ pint i=0,j=0,k=1,a=0;2 ]1 H# e- F3 G) T- ~( B
sbit beep=P2^1;6 E( L4 c2 y9 ]% w
sbit P35=P3^5;1 Q+ y" C, o% l: m. S' V" u0 i) z: m
sbit P36=P3^6;5 k( z8 E9 e" U4 n) z8 C# p
sbit P37=P3^7;- y8 o6 S2 ]! j$ v
void delay(unsigned int aa), v/ S5 E% S. q q* U! X+ l
{unsigned int jj;
- M. u/ Z7 e. f4 D! _for(;aa>0;aa--)
k9 M9 f% g+ o7 sfor(jj=0;jj<60;jj++)
, q2 \: Q3 F9 L' b{;}}
' N- z" [+ ^3 X7 v Rvoid main(void)7 A, Q) B3 g7 w6 N
{( _9 g) S) v$ ]' \; o& D
EA=1;
% j4 [) s0 \1 f) P3 ~ET0=1;
4 ^; s/ @) ~& }) ^; v- mTMOD=0x01;
/ O; f1 }% b* g% A4 D D# F) f) gTH0=0xff;
# g* I* w+ _) @2 LTL0=0xff;
7 G! Q- `- A4 X) L1 OTR0=1;% a T$ {4 {; l( i
while(1)
& }, z: E6 y7 R! s) n' _! {0 v{
2 _! n' ~7 M; Y; j+ ? } }: D( b W9 o2 \+ s' e E& H
* Y( Z, N2 ~# J6 j/ zvoid timer0() interrupt 1: F8 J- z) u" o
{if(i<1&&j<1&&k<1)8 ?5 A0 a+ ? D2 U
{P37=0;
- ]1 { W' W1 Y3 x( a0 C7 B4 g& m9 SP0=led[0];
6 _, Q' L$ S8 h8 c: E b! mbeep=0; # j' k1 w4 S. i0 ~! U
}
9 W4 _+ R9 z; S% B+ ~else * ~* A+ P) ^9 O; f- ]: Q$ V
{1 d( Y" U9 j2 s6 }( q/ n* ?
P37=0;0 O! F) p" D0 q5 T+ k) E; J2 ~
P0=led;
( k& J; {; W( ]0 f' V& Wdelay(5);
z4 }! R, }. [P37=1;
" ^6 J3 Z9 n5 ~" Q}
d1 z Q6 ?7 n& H: H# ?if(j<1&&k<1)
; ~" ^% F G8 ]( C O: b5 \4 WP36=1;7 _2 h0 `: q; X$ N. K
else
# A+ S/ F5 B0 `9 [% e) B{3 u9 b: n3 d8 X# b4 r6 @
P36=0;
! l6 K- o. H+ l. h4 wP0=led[j];+ T* e* p" y5 T* |5 q
delay(5); 9 }1 k1 H7 h& s/ {) ]3 \
P36=1; 3 j% A5 m) z% v8 v; t" }- B
}2 B6 x& h, _" u/ C# k
if(k<1)
. M1 U- v: m7 X4 {! CP35=1;
* x: b3 x8 P( [else
1 H5 I4 Y, t4 I; b{P35=0;' X0 {7 n- ^% X9 g; w
P0=led[k];
( C' q) J! l0 \delay(5);
5 R+ }; _0 P- [2 vP35=1;7 i+ z* b9 E; h7 S# q& s I' |
}a++;
& b) \4 j# D( f1 M/ I' yif(a%20==0)
8 z* @8 i. n. C' P! f% U{ . p' i+ q/ j! _8 Y+ p
i--;
6 |, q+ _3 @8 o/ w1 D( K wif(i<0). O9 Q5 g* m! W- ]6 k1 e
{i=9;0 T. `, A( Y+ d( Z
j--;}7 G6 L; T0 T, S) ~0 n- p0 Y8 t- ^
if(j<0)
8 S4 i5 r* L4 }" @0 `{j=9;# R( x6 k# K$ C( j4 f$ M( @/ N( Z
k--;}: r, ~, \# k& H; ]- n
TH0=0xB1;' \% i5 d2 \" y& A" `- g
TL0=0xE0;9 B/ U% p, D9 c- G! P
}} |