前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
# v8 e2 a6 S Y4 O6 }8 p; O0 g* P程序如下:
8 w: M( M% b" D( W! }8 R, ~#include <AT89X51.H>
8 A, j# v- E. H/ _! o5 sunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
0 V3 K: M& L8 f% Zint i=0,j=0,k=1,a=0;
5 J7 q, o. s& E% r" y4 Csbit beep=P2^1;, E' K! Y0 Y! c: L* x, |/ X
sbit P35=P3^5;
0 S1 ^6 k8 {; R9 m# l) b% tsbit P36=P3^6;
- D1 W9 g; Y/ |! |sbit P37=P3^7;
% B' t/ a- D9 H% S# N: |8 |void delay(unsigned int aa)+ ~& d, @' `) O
{unsigned int jj; q3 p2 X" [: |' G5 V' b
for(;aa>0;aa--)
8 T: Y8 c1 _/ xfor(jj=0;jj<60;jj++)! [2 [7 d% b* R! S
{;}}
8 f8 ` H; H1 Bvoid main(void)- K3 q2 H0 T- v8 M; K
{
* E; _" f' _9 G" |$ @) p# _1 zEA=1;0 J, q" O; N0 D
ET0=1;; @) G: k% Y0 g: S% P
TMOD=0x01;
. H7 a* E) @7 X% }* XTH0=0xff;
5 P [( y* N8 X) d- r7 {! f! eTL0=0xff;) I; \+ {! Z# r
TR0=1;! _1 w2 C0 |/ {" f0 I# L
while(1)
7 ~3 F* q! d9 V- y( T& M" B6 t{
# G* E9 t+ f0 H3 v g" v } }8 U, Q1 l) C4 N' S
) l; i: {9 f1 t* o4 x. p
void timer0() interrupt 1
& ?' U" O7 a6 A0 @2 H% k* I1 J: O- \{if(i<1&&j<1&&k<1)! \6 N; r, c1 k, a' H9 X; R
{P37=0;
# s6 o3 S2 f2 ?: U3 g3 C9 Y# [P0=led[0];
0 i l& C2 ]5 ~% x/ @. X4 X1 P% G4 {$ tbeep=0; 5 ?/ g; K t; J
}$ E: F6 k a+ d
else
9 m& | Y8 v1 Z$ ?{7 T" }% y# L( _3 p
P37=0;
1 |- f, i2 C0 jP0=led;
2 R2 B( s( ?) c0 ^1 tdelay(5);
0 j, \( h- G9 A3 N/ vP37=1;0 J% p/ ?, R+ M
}
- ^+ \7 }4 W9 r ^/ Oif(j<1&&k<1)
3 c+ F! b1 W4 p& x* `P36=1;
- }$ ?& J% J& kelse' C* L7 N6 P! c; _. R/ U
{/ F; w; ]& y( B* M% `
P36=0;
1 [7 q/ S. e y# jP0=led[j];
/ ], n1 t( b! g f" P4 `: T! h5 o, Sdelay(5); ! P/ q7 D5 x" U2 y
P36=1;
9 o% T: O3 }+ g6 L) a% j2 y, J}5 q4 f4 Y. b& Q
if(k<1)
7 A, S! ?% m1 c4 W" C: h, xP35=1;9 j) x' f# P1 t: S! }% T o* B1 Y
else
! F8 A. A6 F( h9 E& U{P35=0;/ N! v V2 S9 I4 J' k
P0=led[k];$ J$ I: s2 d5 ~* Y3 C+ j& T7 J5 V0 S( c
delay(5);
- C2 F, n4 t& j0 D, z- |" bP35=1;5 c3 y3 G+ W% I2 V" @3 W
}a++;
$ X7 ?& h) K3 e# wif(a%20==0)2 v8 f) j1 \6 _0 d; L c
{
9 ~6 L- h6 z$ ni--;5 d2 i7 B) x# {# y2 _5 T9 J# G6 D
if(i<0)' D9 K* I `* q% ]8 i
{i=9;8 B$ K$ E* G1 X) k* B/ ?! V
j--;}
0 j# A4 S( W- {7 a$ [8 t# V ]if(j<0)
! F' v1 ?( I/ e7 F9 f{j=9;& v ~/ H5 S* l2 [8 n9 t
k--;}
8 D, D; A# ?5 e# I) c# wTH0=0xB1;
& _9 \# _' P; BTL0=0xE0;
$ Y y# z. O1 l" V# p}} |