前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
2 k1 k7 R; u/ f) O: C程序如下:
; d8 Q/ l2 b) @) L2 P. v#include <AT89X51.H>7 n* k8 y8 j3 y$ l% C$ \
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
0 u$ h6 O/ `: G2 i% M& P' L( v4 m4 nint i=0,j=0,k=1,a=0;: o3 ^# t; x( _8 ^1 ?1 Q
sbit beep=P2^1;6 n- S. `' m! N! e" j7 }% s
sbit P35=P3^5;
* x% t5 f. X6 A+ s2 ^* Wsbit P36=P3^6;
* d! v- `' x. E) O; Rsbit P37=P3^7;
7 e* j9 U2 h7 i# m0 R% L; qvoid delay(unsigned int aa)
1 {$ \" n( L& K- ?* v7 ^{unsigned int jj;) G9 _* }2 d5 s w
for(;aa>0;aa--)& X: e# S4 h3 i+ R+ o
for(jj=0;jj<60;jj++)0 O E, W0 u+ l% [7 Z @6 f
{;}}
) i0 _4 [# x K$ Gvoid main(void)
& p( T4 y Q$ I3 D# `{' }9 V6 [' H- _! K) X8 r" F, E: f" m/ U
EA=1;
5 U# @; K5 R# L" _+ pET0=1;% H5 \! T' e/ _8 T+ h; Y
TMOD=0x01;, j7 c1 p7 h7 F
TH0=0xff;2 {: F- s# R' d9 w. j
TL0=0xff;
0 G0 n9 D! Z$ c* C2 b. c( ITR0=1;; B6 [, _6 u9 O- G
while(1)% |& B* S* \ O+ |) V& J% |
{( d' B& R: |% ~% O b; ]/ v
} }
. q" _% d% `8 a* _$ v5 Z) x0 n+ B. o$ k% O: u& |5 {
void timer0() interrupt 1
& e$ F" Y/ F8 V! r8 K' Z{if(i<1&&j<1&&k<1)
' n5 M; | y2 r2 e) m8 o6 V{P37=0;! g3 T7 B+ ^/ x7 N: t" q6 a* Z% k
P0=led[0];
! x2 e0 y. G8 Ubeep=0; 6 H8 F& |) a! K9 X% _
}5 `2 S4 Z! D, y4 y+ z
else
4 }% ~+ j+ ]2 S& d% C7 X1 Z1 N0 r{
+ J6 P [3 x, ]6 f$ }# t: BP37=0;
- z7 {0 _9 e4 [, k& N$ T, b' U3 ]P0=led;0 W3 B- r! v7 Y1 W( F' A
delay(5); ( k7 G0 K2 W* q" P
P37=1;
, O1 ?3 q! R! K+ J}
) R7 R, E0 _- l; u8 O" dif(j<1&&k<1)7 |6 w' V# D# v0 ^
P36=1;, u% o* y+ N- N; C% `
else
8 H" B( h4 g# i. y{# u0 M1 E3 n8 h, q8 e" x
P36=0;
2 ~9 P1 R3 I9 _ C7 w. RP0=led[j];
$ G2 l3 P! A, mdelay(5); 1 |! ]8 t& I# ~+ g: g- f. i
P36=1; t& Q: r5 I& @$ j' v3 E( ^- W
}
+ G, S! u2 @) P# c6 k- a4 Y! fif(k<1)& c! w) g) e% U) g( [* j+ C
P35=1;( |& e% f- M) }9 w
else3 _8 ^; y3 s: q8 C9 z
{P35=0;( E ?+ u/ R( D; {
P0=led[k];3 Q+ B1 G5 e4 i% I# Q
delay(5); . L$ J$ u7 d2 `- k" O5 b
P35=1;4 j* Q/ g) v: e2 B6 a- @
}a++;
2 K- C; @6 ~) `- v( jif(a%20==0)
+ M/ O& D& y# J, n' o# x9 e9 g{
6 |. I9 B, g. W& Xi--;4 S: }7 ^$ q2 m- q+ ]6 h/ r" b* I
if(i<0)
5 S; x5 D3 F7 b8 W( U{i=9;4 G% N/ X9 F$ g: V0 m' O3 e
j--;}
, j' k3 E4 B. r" E9 ?/ A |# G6 yif(j<0) + i& K" Z4 T$ V" C) F( C/ p- w
{j=9;
' e. R* o- G$ \% b4 Ek--;}
9 C" x# J* L3 u1 j: VTH0=0xB1;3 l' k& Y3 h# p# g! M" \1 c2 t
TL0=0xE0;2 F7 Q( m9 a. g. K, a/ w; ]
}} |