前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
7 X7 l" ?4 K) e& Y程序如下:
` h8 R4 y* [+ i+ |6 ~#include <AT89X51.H>
; B& V c: b' C2 t2 d$ u9 @% hunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- H+ t5 ^* s" k" o1 oint i=0,j=0,k=1,a=0;8 m- ?: e0 s# u8 F
sbit beep=P2^1;
6 Z4 t& C7 o1 D7 K* Jsbit P35=P3^5;" O1 h; H1 u4 {9 D! A! d1 j
sbit P36=P3^6;0 M/ I7 L0 b) O2 M* E- |
sbit P37=P3^7;
2 r$ E5 t- Z) @% V) mvoid delay(unsigned int aa)8 T, ~/ ~: u$ d1 E
{unsigned int jj;9 C/ R% a+ H, ~& R) v# l. H8 t
for(;aa>0;aa--)' [) `( N. E* W+ j1 y) |7 G
for(jj=0;jj<60;jj++)& V- C4 a$ H8 \0 d6 d f9 H* N
{;}}7 c; B# \" Q$ j6 J* T' U0 W# N
void main(void)* t" e+ I: B: C. ~; P* Z- m5 W7 f
{
) m4 f' C" n7 k6 J: w& \EA=1;& W4 G4 W$ V7 S0 \; n
ET0=1;
. l! P7 e3 o5 K W6 x3 ^7 CTMOD=0x01;( N( l; y* x8 ^1 m
TH0=0xff;/ Q, f3 k) R. p) @) g
TL0=0xff;' a9 T( R. B% s) v
TR0=1;& t8 }# M9 d. w
while(1)+ I! P, C" O/ E. R5 ^4 e/ Q
{: X! g7 c# j7 ^4 o! G: {
} }
) c8 z1 `9 }$ s5 B4 m6 T8 [! G, l
void timer0() interrupt 1* C) B, R5 _; S5 n
{if(i<1&&j<1&&k<1)7 X: O0 E0 C5 R3 m
{P37=0;
% _) x1 i0 T& m8 |: WP0=led[0];
9 b: n }* ^5 Nbeep=0;
0 |4 J0 d( [8 j}- m8 X: e' n/ s1 c3 r- G' j
else * y! b. G& W! J0 V/ H: h) J
{" v7 y' i, T: B4 E3 B) Q& L
P37=0;
( E* R O+ F2 ?P0=led;
4 g+ M. G2 M9 F% h. M" vdelay(5); 6 |5 ] o1 q8 o j
P37=1;3 A! k: \) z& R B4 f, j- }
} * W, B8 F1 V/ a: L
if(j<1&&k<1)
- n5 ^- M/ ? P- y5 |% w& \& DP36=1;
& S" z \; d# G1 b& S) L3 velse+ A p1 H i2 u: {
{
6 v( m* b/ f: ] m G/ U ]& DP36=0;& P1 b2 q0 y: H9 u# H% z/ S
P0=led[j];9 h* l# c$ D! E# i
delay(5);
9 \ L* Q" e4 y( I. b HP36=1;
. R3 q @6 a. g6 E5 k1 g. i}
) V* q* ]( b, j8 j. \if(k<1)1 Q) H( `+ Q l" q7 l1 f; M
P35=1;8 b$ s8 o, j, _0 j6 Z4 z
else
1 w3 @ t6 W: P! V/ I) C{P35=0;/ y6 g2 q) m: a% K! L) X4 A" e8 Q/ |8 ~
P0=led[k];
9 J2 X7 c, k! Z) ?# A$ W: s7 Ldelay(5);
. P* {/ m# B) @; zP35=1;
0 C( S" U% H* p# f. O0 z}a++;
, q3 {5 p; t- R. G1 T2 Wif(a%20==0)
* G: Y7 `$ b( `9 x& T9 P{ + ^5 n" @( v; W3 r
i--;5 J- S& J' m& N$ J) k$ T5 Z: W
if(i<0)
. c2 @+ z; R4 b& _+ A6 P% P{i=9;
2 R W: D2 R4 N# Qj--;}
8 R# K# o4 ]! O# _1 Eif(j<0)
O U6 E0 ?3 h6 K* \% y8 }{j=9;1 V9 _ `/ V H) \- j. l+ v7 _; o
k--;}
1 Z: X. B* Q+ ?+ k( Y: H, OTH0=0xB1;
+ K. D/ Y. v: y0 t% P/ KTL0=0xE0;
) F7 T$ S; w/ y: f1 q}} |