機(jī)械社區(qū)

 找回密碼
 注冊會(huì)員

QQ登錄

只需一步,快速開始

搜索
查看: 3152|回復(fù): 4
打印 上一主題 下一主題

單片機(jī)新手,請教問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2009-12-3 19:57:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
前不久用c語言寫了一個(gè)數(shù)碼管動(dòng)態(tài)顯示倒計(jì)時(shí)程序。倒計(jì)時(shí)倒是沒問題,可無論我怎么調(diào)延時(shí)時(shí)間,他都閃爍的厲害,請問高手怎么處理。是掃描頻率太低,還是點(diǎn)亮后延時(shí)不夠。如果是以上的原因,那么掃描頻率和動(dòng)態(tài)延時(shí)各要多少才能看起來不閃。
- }- V. h& f: R' ?+ \程序如下:# o7 f4 K& E  M! c' I
#include <AT89X51.H>
- [7 y/ W8 \, o" i& f( [$ vunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
$ t" B$ U9 f) e8 b& \  S( p; {int i=0,j=0,k=1,a=0;) z0 Z  n, ~- J7 n
sbit beep=P2^1;7 [1 g" ^& t4 `) S# y( ^; p6 ^
sbit P35=P3^5;
/ b8 J- f  H1 B! f, L( H) [$ n( x) g) Dsbit P36=P3^6;
4 A6 Q. ?$ v3 L0 z8 ^# L& esbit P37=P3^7;
# j7 c: x+ M* kvoid delay(unsigned int aa)
# z7 g8 C$ E7 {( L0 L, n{unsigned int jj;  }, t7 J* [/ b$ Z4 U% C
for(;aa>0;aa--)1 h8 v. J: Q2 J
for(jj=0;jj<60;jj++)
8 l, V# P1 A' B* T* h/ L! n( {{;}}' e3 M( V+ S' k* {1 k
void main(void)8 R/ B9 ?: i2 D# }
{! ]3 z+ p$ R$ u7 D
EA=1;7 D" P3 r2 r0 o7 @6 P) I' u
ET0=1;
4 M& t3 ]" j! Y" l. E; G* |% @# I. bTMOD=0x01;% O3 j8 M! s' E
TH0=0xff;
: K; J9 f" Y; M( _. k& {8 lTL0=0xff;9 G: O/ W% L9 c* o
TR0=1;1 m- Q  Y# U1 `. x
while(1)3 U2 @- F, S( K( f3 X3 W: S
{
3 c' [, g% n9 ^" o% Y6 m }  }
7 S0 B) K5 E% }5 o' t: }
0 n2 g& W" B3 f/ Cvoid timer0() interrupt 1
3 G0 v& b/ W- |6 o{if(i<1&&j<1&&k<1)' V4 F) g, f5 L0 W( \, v9 z$ E
{P37=0;% B- G5 [# ~( G" Q
P0=led[0];6 s. J8 p: u5 x5 D( Z( a7 \
beep=0;                                 6 b6 W' [- ]4 }% n! ^% V# R1 @1 Y
}
5 s% D  v1 p0 B' B8 ^; O1 k7 P* Telse  
. J5 B& r/ u* K' T4 W{" r8 s+ }% X% M
P37=0;: g7 L0 H# U& t- X
P0=led;
) p7 J7 l; z/ f* k0 f8 y: R& `delay(5);
5 l8 t2 g. L+ K# J3 {; c# AP37=1;- `: t: B& t. ^! I3 H* j
}
( T. ]' {6 R$ O9 F) Z2 iif(j<1&&k<1)
2 \/ M! Q/ R4 D2 U& M8 mP36=1;
, I  V' {  U6 ^& E9 melse; w5 {0 m* \' d0 d; u: X
{: F* p" Q) c0 t, N% J
P36=0;
8 C/ e4 w1 ~4 y5 x4 P9 tP0=led[j];
& I  D- \6 \7 P3 A3 \6 w6 y7 s( Xdelay(5); 4 |' Q4 I0 Z  o9 @0 w
P36=1; , W' d0 X( `" `3 ~+ ]: p
}0 F2 |1 h) T; g( t9 _/ M2 C/ Q
if(k<1)
# I; V* [/ a0 y* _: r; RP35=1;
2 b) \, ^5 P/ B/ L! R9 F; telse
, h9 j# k' i& J3 Y) |# p. v7 @9 R{P35=0;
, I6 ~( g; a+ p- n# h; i) fP0=led[k];/ t8 U3 b9 ~/ v. n. {& N
delay(5);  ( H* L% K  D) [) w8 \" J
P35=1;
0 ]1 b% f1 d9 }3 B1 M}a++;
' H+ G% Y( H( j; x5 R- c! R8 d5 {if(a%20==0)
2 _0 t8 E/ h" r; w{
5 `8 N2 T* w: ni--;
. A& a3 R; j9 _+ v5 ~if(i<0)/ `5 t$ l9 o' f- Y) j) {' _4 S
{i=9;
' e" P0 p. v2 x9 _/ `# Tj--;}& u6 s1 U: S& ^6 H% z
if(j<0)                     / x# h) x, f) o- T' e, L
{j=9;
$ f& D, o: _( F6 G! N4 fk--;}8 J; I2 S. C  j" i' i7 `& V
TH0=0xB1;
$ b3 E# ?* @+ l0 r6 N$ QTL0=0xE0;
* p* ]" W! Z6 m, d7 j4 o}}
回復(fù)

使用道具 舉報(bào)

2#
發(fā)表于 2009-12-4 08:22:36 | 只看該作者
何其 網(wǎng)友好!
3 ]* W& N" a. f8 F2 k4 q" |* B& t0 W  K/ N3 l! v
你的延時(shí)子程序中的延時(shí)太長了,所以閃爍。8 o. ]4 \! d; d3 V; u
.; V# E; @2 v) ?
syw  091204---08.22
3#
 樓主| 發(fā)表于 2009-12-4 13:06:37 | 只看該作者
不是吧,開門大俠,循環(huán)60次,一毫秒都不到呀。
4#
發(fā)表于 2009-12-5 05:11:29 | 只看該作者
何其 網(wǎng)友好!9 y; E  }# \; B) C3 r3 x
.  K9 k5 C5 V( X9 l, m3 x
你用一下我給的延時(shí)看看還閃爍不?!
+ v" b2 x' {2 L: @) e# k6 c.! t8 P* a9 l# @+ j8 \6 z
syw  091205---05.11
8 \- N! }( ?8 x) q1 S
( ]" K. N8 N) T1 s& u7 t
! ]; _0 N" ?& o" F, G5 O9 [  F. P. I: o: F) c( f( s) i9 K& z
9 E$ S8 z6 z) |
        P0=xsjs[xsjs1];
3 f  A* n# L, l7 r         P1=xsws[8];) f3 b& t9 U# u) g8 }% h
        delay(10);
) s) d: |) R+ C1 ^- u. z5 J//****************************
- J) d  \7 X$ r+ `    void delay(int x)
8 J7 A- r: E% `) F; x7 j9 }' o    {
  M9 O/ H7 w$ j% r- k6 D      int  y, z;
+ n! L- Q* t+ c* d; `        for(y=0;y<x;y++)  J2 u, ^% L, t- w0 ?" l2 ?
        for(z=0;z<2;z++);
0 \6 ?2 _* _: k0 d     }
5#
 樓主| 發(fā)表于 2009-12-5 22:29:30 | 只看該作者
還是閃,是不是這種程序里不適合if語句呀,我用除余數(shù)的方法如下程序就好了。' h+ H8 o9 P5 E
#include <AT89X51.H>
: J* a# s) g& H4 B0 W2 G7 \* Funsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
3 q2 |' y9 u0 G! ]6 tint i=0,j=0,k=1,a=0,js;  o0 W% l9 @/ G7 S# C; `: e+ a
sbit beep=P2^1;
+ h; k& b6 ~* u( |. f0 A" n! Z' C( Xsbit P35=P3^5;
# @" |$ V) j$ ]9 {2 O+ h2 bsbit P36=P3^6;
) E- S+ X- a# o! Lsbit P37=P3^7;, Y( C  `/ O. L$ ]) D; i  s& A
void delay(int aa), t, U: y# P% M6 v  Z
{int y,z;; A* _8 v/ n6 H" l1 H3 C8 O  D: [7 e
for(y=0;y<aa;y++)2 r: W5 y+ R* i7 ]" j" Z
for(z=0;z<60;z++);6 d+ q& p! P$ j* O/ |3 }
}
' |5 o  L8 `. T0 w9 X: d" @) L7 b7 b4 E- W! a- a& s7 t. B: C9 m- f
void main(void)2 i4 A: X) Z4 b
{8 @( w6 R2 b/ I  c# s) {8 [
EA=1;6 H; B% D- C8 J
ET0=1;' }) i  ^: s' ^$ x; ~
TMOD=0x01;
4 r: Y; @3 s6 @# g$ eTH0=0xff;( X" Y# `! @; b% D' K6 S  Z
TL0=0xff;
( Z0 C* G5 R- }1 l1 [TR0=1;" ?. e$ n' C- u
while(1)  c2 e( W+ J+ o
{  B" W: E7 n8 `; l2 t: w5 E
for(i=100;i>=0;i--)
5 z6 E* C& S+ d+ ~/ q* D{/ I/ O( E4 q  c3 u( ]# J+ N
js=i;2 l! d6 ?( ?0 C3 E
delay(500); }
6 o/ _5 p% ?4 ~% ^* ] }         }
; `. }  R/ o# C- Q0 x. M3 f$ U% q
' M9 @$ m7 C, I; U2 z: X3 k# Q
8 a/ g" z" o0 X1 zvoid timer0() interrupt 1
6 `( j# R# V1 \/ o3 K* V{' V; A! R9 N! O5 y
  P0=led[js/100];" \4 |% T7 d0 y8 v- I% H
P35=0;
6 F/ y- W' _% V9 [) Y9 i0 k8 g/ i' U  delay(5);
; I: B6 h! E' w' J! U: V          P35=1;1 ]! |! X8 b" q: Y$ L% p' ^# p7 C
  P0=led[(js-(js/100)*100)/10];/ ~: w8 k+ ?9 r3 M' f$ G7 {
P36=0;
- Z4 N$ m- ~( ]$ Z' G0 @' O( b$ W  delay(5);
. Z  U0 a1 k( M' g P36=1;& D$ }$ X$ T' }, c* ]) t
P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];0 y6 i2 J# k8 m) n5 {: ?- G
P37=0;
: R1 }) b" O8 Z7 c& r delay(5);
: u  j$ S( G5 P/ o  P37=1;7 Y3 H: K, G) l/ g& y
5 j( v' l! g2 ]! a9 t, I
TH0=0xB1;( B! S' Y) D- f3 u
TL0=0xE0;
9 V. }0 D( Z( k$ w0 s
; g9 y9 E9 u  ~2 w7 @" V& C}

本版積分規(guī)則

小黑屋|手機(jī)版|Archiver|機(jī)械社區(qū) ( 京ICP備10217105號(hào)-1,京ICP證050210號(hào),浙公網(wǎng)安備33038202004372號(hào) )

GMT+8, 2024-10-30 19:24 , Processed in 0.049512 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表