前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
" {; o# m3 D9 P8 P4 K0 D程序如下:! X& f( l& e& T A& t' Q
#include <AT89X51.H>' u3 \. i0 [( O) z( i. e4 u' g
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
" H! l9 m% | N, xint i=0,j=0,k=1,a=0;; T# D/ O+ K, A- V6 l
sbit beep=P2^1;
- w V+ h1 A2 W, ksbit P35=P3^5;
" {+ j* i! U ~7 Isbit P36=P3^6;
" D1 R0 f& E; C0 S! q( [1 A$ Fsbit P37=P3^7;
5 I4 @" S+ F3 m8 H1 yvoid delay(unsigned int aa)) z0 @( M; k* S7 M& {$ v, \0 N: B
{unsigned int jj;, x, l6 }2 V4 z/ S
for(;aa>0;aa--)2 Q' A0 n+ D5 V1 O' l, P4 o
for(jj=0;jj<60;jj++)2 ~0 G" }2 u! p% X" I9 ]
{;}}
% n/ V' a# b3 P. Mvoid main(void)
" A* X6 u8 W- t( d6 p- M Z+ _{
5 w8 h1 g8 M+ b) c9 `1 I. jEA=1;
1 K( S7 z4 V1 K, AET0=1;0 Q# q; N# g3 Z4 M9 d
TMOD=0x01;! u1 d, W u4 D& Y8 a2 }2 B% s
TH0=0xff;% r* j; G; v v1 u1 v t
TL0=0xff;
. p# A* n) J$ _* }: XTR0=1;# {, q3 K) O! O7 v& V
while(1)
* A9 e' a4 W" W; G" o2 ~{5 r. Q, L0 T. P( I( O1 N
} }% `3 ~* ^7 {! o9 I
) v# _; t3 ~' P$ Lvoid timer0() interrupt 1
7 k% p- n" m3 a. v{if(i<1&&j<1&&k<1)
' _+ i4 t3 [* G0 f, f{P37=0;+ A- s5 ]( K0 c3 i; p. ^$ }
P0=led[0];
. k5 F9 N: e8 L1 bbeep=0;
3 w+ B. V" `4 x& a+ R. `}$ ?, d' i8 i5 h9 C
else ; T+ W; p2 b: d8 Q& s) T ~
{7 N! R* Q1 B8 M4 ] ]) }/ n- X
P37=0;# W) W. h. }$ v3 W- s8 m( s/ Y- B, g
P0=led;' d" `( W6 P6 X; r& b
delay(5);
' l4 M8 F( v; J" V2 o. D& |P37=1;( A) j+ P- T5 n) a, s- r5 _+ y) S* X
} % r: K+ f; A Q2 n! ]
if(j<1&&k<1)
0 s7 F4 q. f& S. nP36=1;; J0 B# d# D; @2 z
else6 x; `, B+ `+ \" W. C8 m! [6 ^
{
% _2 g w/ o3 l; Z0 y1 }P36=0;
8 \ y& L+ d( ?/ ^/ R& D% V( l [P0=led[j];1 k+ g+ z- o2 q; u
delay(5); ; z1 B& N. m H7 R& N
P36=1; 3 M" x- n2 a/ c$ L* [2 G @
}" U0 ?' s* T$ Z4 L$ A' n/ M9 v
if(k<1)
+ h9 u8 d/ x3 G; Y8 T5 ]P35=1;
( }) x# \4 Y* Z0 delse) X& @9 [5 x# c! G
{P35=0;
. W) f. q: p7 S/ g% K6 L1 @* LP0=led[k];
& N% f y! V7 _, Q/ `7 b _delay(5); 5 I$ M( |+ A5 f( j% U4 l3 C
P35=1;6 g, j# g% n4 X1 N( j+ Y
}a++;
" ?( b' ~" r$ D5 E# z- v3 w7 J( Y' Wif(a%20==0)& i$ Q) _" y! a/ {2 S) ?
{ " m$ N' A# t6 m7 d$ Q
i--;
) B7 \$ R" Q/ _' |8 O- eif(i<0)/ V }* e: F/ b+ o' }- T
{i=9;& t' X6 Y, }$ R/ {9 n; h! w
j--;}
1 W! m& y1 l6 {/ u0 A H! P/ oif(j<0) ; h- O* h: Z+ G7 V
{j=9;
6 Q, }& V7 i6 A$ ]9 tk--;}
/ k5 D/ D* d( c; m0 |: U) JTH0=0xB1;& g, C& N. q; `1 C
TL0=0xE0;
U p9 E/ H4 `8 c% f- Z}} |