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

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

QQ登錄

只需一步,快速開始

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

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

[復(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í)間,他都閃爍的厲害,請(qǐng)問高手怎么處理。是掃描頻率太低,還是點(diǎn)亮后延時(shí)不夠。如果是以上的原因,那么掃描頻率和動(dòng)態(tài)延時(shí)各要多少才能看起來不閃。8 _- g- x- `+ B5 T. i
程序如下:
, l# {. g. ^: b$ F% Z: Q% _#include <AT89X51.H>8 {# \5 E6 T' J( X+ x
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
* i9 ?9 t9 x  s0 m1 s! f% A/ H3 G& m; \int i=0,j=0,k=1,a=0;, ?- H! B* L. q" E1 d' G# M$ d( {/ U) {
sbit beep=P2^1;% m# W0 D8 f+ B1 P0 t- e: Q
sbit P35=P3^5;6 V6 ^" P9 K/ G. Q
sbit P36=P3^6;) P: q/ p8 S8 d9 d
sbit P37=P3^7;% ?0 u, l( X0 Y+ u+ c1 ]; y  [. x
void delay(unsigned int aa)2 C& t; s: M7 w$ A3 a
{unsigned int jj;# E! b) O- U4 }, |
for(;aa>0;aa--)
, g0 g( m! ~( r/ `# A1 e* h4 jfor(jj=0;jj<60;jj++)
/ a9 F( F- K- r: L/ Z' l- o4 J- U{;}}3 h" b$ z+ J! c& b
void main(void)" Q) o5 r( ~: l. d5 g
{/ S2 p) U( |( B, L  t2 p# c; ~
EA=1;
  K9 _6 r9 V3 ~ET0=1;# i, ~+ l- A) ]# F$ m
TMOD=0x01;
# K+ K4 X0 P0 h8 ^' g* g7 {TH0=0xff;% c* L4 x2 f- \3 c; X2 i
TL0=0xff;* s4 Y: X* P6 m; j- t
TR0=1;
4 y5 P$ y9 p* E9 H3 w* _while(1)  Z9 }/ U7 d) e' t/ e
{$ k0 d; n: {' {* @- c
}  }3 U6 |. y2 Y, G& u7 f

' w9 T0 M- l) i: a7 N% Wvoid timer0() interrupt 1
$ b. a/ g# M9 D& u+ N{if(i<1&&j<1&&k<1)
0 T, {% ]6 y9 F{P37=0;
  n' ]! V% V+ I3 h) o. f$ eP0=led[0];( X( T6 U: x4 }1 k  x0 _( V3 j
beep=0;                                 ( K6 @4 L$ q$ c6 _0 H% t
}$ l1 T6 Q: R5 g4 H$ n& [: z
else  
( I% w, b6 z4 Z! F- T7 N{
' O/ h- h+ p4 n3 _1 H  P) c; pP37=0;
. t! A' M+ {; E! j0 `9 _P0=led;. ^4 _1 h) v8 g. p/ W
delay(5); . y+ a- j( V# L0 j' O
P37=1;( C/ o/ S& X3 L/ j1 M# I6 h5 X* m
} 4 d; X% q6 D# ^' ^/ ^2 ]
if(j<1&&k<1)
( [. X6 g: y# z. a) Y( BP36=1;
& c7 {0 p. E6 t! Q9 H( jelse
+ _( g3 U3 A( P7 ]0 O; \7 c  @{0 [* l. N2 z! z$ q4 [: k
P36=0;
" A2 x6 H6 q3 f+ EP0=led[j];" P% y' D9 G% T$ B
delay(5);
' s7 P, ?' O* z- b* R& h8 YP36=1; 8 V( G8 N1 [3 m3 r7 U
}+ m: \" j$ \1 p4 r6 `1 t
if(k<1)
) T8 @6 |( t% M% i, `P35=1;% Q( [, J" d- a1 ]
else7 h8 I7 b4 X' ~0 R( \0 t
{P35=0;+ j4 V1 d& Z/ \8 C$ \, ~
P0=led[k];; y) F* l8 @, T1 F0 Q7 G' r. }7 X
delay(5);  & e/ b0 k" p1 F; v& Y# o
P35=1;
3 I! Y& r) L* U# a1 s}a++;/ _- s2 ^4 o# s5 ~3 N: f
if(a%20==0)$ [$ F  j/ w; q/ I2 d$ `# G% o
{
3 G  f6 i6 T" z1 Q$ ]& S* P6 |% Oi--;
# M/ `& i' l! {; gif(i<0)0 w% \* m9 L$ t4 h- n
{i=9;: O7 H; o+ N7 h/ X) a9 t' g' a
j--;}
9 @3 }2 X; t1 L2 l6 @: f! F: u: xif(j<0)                     
3 _2 h% U, u/ d' \( M{j=9;
: b/ c1 W- d6 n9 B" Yk--;}
# f& m& ?  ~! u; y: q+ XTH0=0xB1;$ N- `( V9 ?: k* ~
TL0=0xE0;
7 E, @9 b2 {5 \9 w}}
回復(fù)

使用道具 舉報(bào)

2#
發(fā)表于 2009-12-4 08:22:36 | 只看該作者
何其 網(wǎng)友好!
) |6 `, u0 J7 P% |7 @2 {$ `2 |1 f9 H# d5 `- \
你的延時(shí)子程序中的延時(shí)太長(zhǎng)了,所以閃爍。
4 w  p* q" ?$ y% d.
2 X  s- M, `4 Hsyw  091204---08.22
3#
 樓主| 發(fā)表于 2009-12-4 13:06:37 | 只看該作者
不是吧,開門大俠,循環(huán)60次,一毫秒都不到呀。
4#
發(fā)表于 2009-12-5 05:11:29 | 只看該作者
何其 網(wǎng)友好!3 {: L3 A! }/ H
.
9 H" @% y( C9 w( h! C6 [* V你用一下我給的延時(shí)看看還閃爍不?!
* s+ ?5 P& i, ?' F, [0 L.$ _% q7 t) Y0 t4 f
syw  091205---05.11
' p0 i' i: P4 V+ f: `& u
2 o/ U2 i$ D+ N8 P: W6 k: b
5 E, m' a5 |1 i0 x
3 X- o6 O3 ~  O. s3 m7 H' B( _; j
' r  H  w$ i; {, s        P0=xsjs[xsjs1];/ R0 K3 n( {. Z; i
         P1=xsws[8];$ O' A% @, N: v6 Q5 A6 t& R+ v. _
        delay(10);# g  `1 ^6 B! S! Y, `: l$ F
//****************************
6 L5 L; ]4 y3 c    void delay(int x)
8 \, }' Z1 j( c& J    {, f. k6 z: n: B% D" u" a  I/ S
      int  y, z;- O0 d+ z3 D/ |* m* H8 Q) j& f3 T
        for(y=0;y<x;y++)" B7 S+ T% _" Q- N
        for(z=0;z<2;z++);5 _# C4 Y) {4 ?: O. Y- M' E: B
     }
5#
 樓主| 發(fā)表于 2009-12-5 22:29:30 | 只看該作者
還是閃,是不是這種程序里不適合if語句呀,我用除余數(shù)的方法如下程序就好了。1 A3 I! B$ Z) [0 z( w
#include <AT89X51.H>
' b9 V7 V' F8 ~/ q5 ^unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};3 k( d# ?9 k+ B5 `! s8 L5 ^6 ~
int i=0,j=0,k=1,a=0,js;2 ^* J5 I3 R: Q% ^- \1 `9 r
sbit beep=P2^1;
+ k9 B/ F) \- j5 Q+ A; ]- Usbit P35=P3^5;
- l  W' b- E* q7 A( f+ msbit P36=P3^6;$ f8 U( N5 O4 K9 p; r- s) n! y9 F
sbit P37=P3^7;& N3 A# U/ f& G8 R) C0 h' ]
void delay(int aa)
8 V4 J7 T6 y/ _! ~  G{int y,z;# V8 j, |& D- A: d2 U( I
for(y=0;y<aa;y++): ~, X* Q  x4 ]1 e* r
for(z=0;z<60;z++);9 A; m9 V% A1 }- y" E
}8 F# t* E' o3 ^) o, u
4 v7 E. }8 S: \' o! n! H5 {
void main(void)2 D& ~* F* Q/ D% J7 m2 P/ E3 P
{. s6 D) [9 u+ k' }% e8 u: G# l6 `; b
EA=1;) r# }) C$ S. L, M2 u! S  ^# O
ET0=1;
3 y2 r( O1 k; _2 D! K# ?& f4 |TMOD=0x01;
. d  |9 W1 E+ O4 d9 S' A& h- p+ `+ P. OTH0=0xff;
  h* e- X) ]8 M; q$ F& CTL0=0xff;
# k- a$ [! K: @2 ]. S' jTR0=1;
1 |" n+ _) u2 i3 {) {( `while(1)/ u6 P2 b) I# y* g
{4 f, E! q! \2 J% ?. E9 i2 r
for(i=100;i>=0;i--)' s; J5 T: d+ j) Z
{9 q% d8 |3 `/ X6 f' N
js=i;
' e3 ^: T6 O& D# J/ r/ {! v; s delay(500); } 9 @9 N. a3 u9 O& K) u% F
}         }
1 s- B, W! y3 h2 P8 z! N# n: [1 Q% e5 C# _* F! s  O
. L* g& W' U: b7 @2 y0 f
void timer0() interrupt 1
$ a0 l! s/ P5 W0 }4 ?1 s9 V{
' D- b- C5 a$ X3 q+ @! V2 d4 u  P0=led[js/100];
9 _3 a# Q9 u( _P35=0;
9 G2 T+ W9 s& R* E! h2 E4 E2 M  delay(5);' Z% S- `( T! ^) n1 X, P  a
          P35=1;) t1 p3 r$ a6 x4 R" E
  P0=led[(js-(js/100)*100)/10];6 y( r' c5 E, k1 h% W$ N' H  f. V4 [  v
P36=0;7 |  m$ T/ N& i6 ?/ |: D
  delay(5);
' e8 T& O) _; b" O! B8 H8 y8 v- C6 w P36=1;, N- J  r- x! W' |9 m2 G9 \
P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];
7 O8 O# Y  G: y  Q9 AP37=0;$ o: p4 Z7 J* S. k2 G+ W- q
delay(5);
  G1 s+ H" H0 c4 w! T) |/ M, j  P37=1;
2 [" G; v$ C1 g- h8 v: p- n  r( G% h2 a# }" h( P
TH0=0xB1;
0 X, x5 x, Y( _; ~: j8 ETL0=0xE0;
/ x9 B7 p. A2 e3 W0 l4 E9 y) m& v9 O0 p3 a
}

本版積分規(guī)則

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

GMT+8, 2024-9-28 13:27 , Processed in 0.051894 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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