前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
& w; S# S, u* t; V) u程序如下:
c1 I. m# B4 p. M9 {#include <AT89X51.H>; [$ s; ~# }" s( c; I( I! g) N6 N
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};$ ]3 X$ h0 a( s
int i=0,j=0,k=1,a=0;
& {2 n9 u; p; F2 F j( qsbit beep=P2^1;/ Q9 Q% v6 ^& ]/ ~0 i' u
sbit P35=P3^5;7 h Z% D8 V+ V% x$ _4 H$ B) `/ X
sbit P36=P3^6;
1 X3 b; I1 \( e- A, W6 |sbit P37=P3^7;
! X+ A5 P1 y9 i% p9 F* w+ X$ [4 r6 Ovoid delay(unsigned int aa)
1 j6 n8 Y# Z. U P0 N1 d% X{unsigned int jj;" G+ q) {# X0 j
for(;aa>0;aa--)" y# r. P1 X/ x3 M, I c' z8 Z
for(jj=0;jj<60;jj++)
3 [; y9 I9 B7 X, t2 c{;}}8 s/ l- i/ K" y' m8 N& i3 ^9 o
void main(void)$ l9 r2 S- ~% s# k Y) Z
{7 y6 Z3 \1 Q: W2 S
EA=1;- m% Z8 q5 n5 \+ o, o
ET0=1;- V/ ?+ h4 p# t4 |
TMOD=0x01;- W& y8 |. f5 C
TH0=0xff;
. |$ D2 r) s3 h7 L0 yTL0=0xff; U3 Y ?4 p' |
TR0=1;
! ?( d2 }+ Q8 A# t' \ wwhile(1)- S9 o" h+ U7 x
{
* r# \3 L+ Z4 l- e% e; P } }. {# z5 h) @/ B, I; a3 S
8 n. {' e+ L6 B* Fvoid timer0() interrupt 1
1 V! N" }+ Y, d{if(i<1&&j<1&&k<1)
0 n: N* f, g4 w) d7 C3 G. F9 B{P37=0;
- Q2 N8 Z& b+ {, P1 H" vP0=led[0];
( V) H, t8 b$ M- ^beep=0; ! t# L+ g. @! F/ m5 Z n
}3 [2 }4 P& u, N9 ?2 l
else
% ^2 Z( r; K% T4 O6 E{8 M8 w$ Y# A- x3 u* l' [5 m6 l
P37=0;
4 c$ A5 G* I9 o. ^: tP0=led;. D" W7 t9 D/ a9 E0 w n) M! N) T
delay(5);
' y# i6 g) Y( g* @# Y' qP37=1;" W, ^5 {) N1 O/ e; z
} 7 I5 |, b- X' t
if(j<1&&k<1)2 x7 |7 y, b3 d+ g# w# Y
P36=1;
3 _- |3 p5 @- Q! Velse
. b" v3 `% _6 F) C2 _6 h{
b/ V6 Q7 H: f$ U+ gP36=0;
% V; S& l. V6 G3 `# xP0=led[j];% J- i1 G" [5 I( l% ~5 v6 S# u
delay(5);
0 q M: }6 v, i* n; E2 dP36=1; 9 H7 @" c' g! n6 j7 e5 s0 A
}# t5 p# j' M' s2 R; M$ X( ^
if(k<1)
# n: H2 g4 r0 s# h- JP35=1;
7 t# ]4 z7 y$ Y$ s; z. uelse
* J: |5 k, p- `) f- E; |; t+ O! n{P35=0;( e! A# ^/ C/ Y
P0=led[k];
% k" j" i/ @ r1 r1 Edelay(5);
" e+ s- u Y) ~! x% kP35=1;
( |) q; {( D6 d' e- i}a++;
% E5 q' S( x( Q' s- y) E; J' F' uif(a%20==0)& _/ u% k* v- L* Q$ n+ P+ D
{
$ B) d9 I, U) q6 `3 i) zi--;. w, i% |0 q$ j" n( l
if(i<0). p# I# n* \5 [2 I! Y* x
{i=9;
/ E+ X/ n% i$ f# yj--;}# y; M& s1 U) U" m- I
if(j<0)
7 i* u {* g+ g{j=9;4 s% e; e; a. V- {+ J; e
k--;}6 H! _7 k& N7 W+ I( n, h& L4 y
TH0=0xB1;; u. k% }5 T* h; f
TL0=0xE0;1 d4 N, H$ I, }6 e
}} |