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

標(biāo)題: 單片機(jī)新手,請(qǐng)教問(wèn)題 [打印本頁(yè)]

作者: 何其    時(shí)間: 2009-12-3 19:57
標(biāo)題: 單片機(jī)新手,請(qǐng)教問(wèn)題
前不久用c語(yǔ)言寫(xiě)了一個(gè)數(shù)碼管動(dòng)態(tài)顯示倒計(jì)時(shí)程序。倒計(jì)時(shí)倒是沒(méi)問(wèn)題,可無(wú)論我怎么調(diào)延時(shí)時(shí)間,他都閃爍的厲害,請(qǐng)問(wèn)高手怎么處理。是掃描頻率太低,還是點(diǎn)亮后延時(shí)不夠。如果是以上的原因,那么掃描頻率和動(dòng)態(tài)延時(shí)各要多少才能看起來(lái)不閃。
: \$ z$ X/ A2 P; _* A程序如下:
, _4 c& }0 h; ?0 r2 T- `#include <AT89X51.H>
3 |  c; x; @2 A  v/ y$ z+ funsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};2 M; S# @1 G, `, A
int i=0,j=0,k=1,a=0;
4 Y& u$ W* A$ t) Y5 R9 Lsbit beep=P2^1;& F5 M& U. R. J* b3 Z" j& R0 L
sbit P35=P3^5;5 x1 o- f7 o. X$ B0 {- y/ U
sbit P36=P3^6;' e- X0 d% N8 n* j" g
sbit P37=P3^7;7 A7 x" k+ m3 ], P* Y5 D( h
void delay(unsigned int aa)( L/ _. a! @" g0 _+ T
{unsigned int jj;1 V4 |: I' c4 q$ Q' N) H
for(;aa>0;aa--)1 U5 Q! \4 o8 F$ V( u" [
for(jj=0;jj<60;jj++)* i. M# L5 w- q) ?% C
{;}}
8 @1 t% D" E5 T. V7 M% kvoid main(void)% W& e* W& |9 }# F
{
1 n% s; X6 b$ f1 `8 NEA=1;" |; e$ l& b( M/ Y
ET0=1;6 Y3 Z9 q- p) }$ w0 [
TMOD=0x01;! L* q- y' H& a# z( G
TH0=0xff;
7 J8 g0 I5 M/ b* }. }, wTL0=0xff;$ D4 [! I" `9 _" K' N6 o+ ^
TR0=1;
& M/ w$ |, M- {while(1)+ V% V3 l5 \" S- x, Y
{, z* q6 e' l! G: g- K
}  }
- {3 \& ~# Z2 l8 \$ z3 j3 q
' b# z. ]5 G( mvoid timer0() interrupt 14 x& D( r" c# x) r) \
{if(i<1&&j<1&&k<1)
- G0 O; r! _2 a5 {3 A8 K{P37=0;) `6 l# K* \7 ?  V* b) V
P0=led[0];0 c! o$ _! z' r: |3 P) C$ u9 }6 q4 U
beep=0;                                 
% C3 A+ b6 K1 l( ?5 C}3 B8 M$ M* O% u8 X8 ^
else  
- a3 Z" W) ~' ~7 x8 |{
9 h% L# Q& ~& m; ~8 sP37=0;
$ `6 b) T& E7 G- SP0=led;
# p4 Z8 l$ d' Y/ {: z3 g' Zdelay(5);
* [# A) Q& [* i3 K6 aP37=1;
$ ]. ^3 Y: k( E+ q. q+ }0 G" ?} 4 L0 k9 L( p- W% {: u0 H7 ?: R* o
if(j<1&&k<1)
* M+ U( L& w8 e3 q0 c- iP36=1;9 ~" `- U7 m  C8 _6 s  H9 W2 _# Z
else
1 S) r, Y* H4 t/ R: F) O{
. N2 _. N2 w. ]& |: ?P36=0;
. E2 {4 v7 B) H- `/ O- xP0=led[j];
4 ^0 x1 |% K. Y3 pdelay(5);
% P+ x: \* I  y+ gP36=1;
' [( ]8 w* }0 h$ i$ ]}$ [8 ]; R- F& K. L( n6 u8 a
if(k<1)
! z4 s" I0 s1 Q! T3 hP35=1;
8 e* F; l8 w. W3 g  h* V1 A3 melse
% |9 }9 _( V4 F( U+ V/ ], a{P35=0;
/ h1 w" l# }/ B9 rP0=led[k];
& o. V2 D  U2 E$ e5 L6 odelay(5);  
( J+ M' n' f. J: X3 HP35=1;
* z4 n6 [: P' H- s7 p}a++;
, H( l5 Z" n" Z1 r/ a. x+ U! V8 [if(a%20==0)
- `3 a$ z  o- I{
: G. [; Q& R" p8 }! fi--;
: f, M9 [& }- g1 s* yif(i<0)1 s3 v- G9 V, }+ a! w1 V: ?
{i=9;+ j! f+ \8 b3 ]0 @/ s) |9 N
j--;}% ]5 z9 d; V- e+ y% W$ D( ?2 b5 D
if(j<0)                     : M, y. @) s5 y3 T
{j=9;
  N& u' j- }8 z; I' }% S( Qk--;}, d2 ^3 a- [9 H
TH0=0xB1;0 L0 m% q( C/ h1 S; c7 a/ |- c
TL0=0xE0;  y: v; ]7 E& {5 a
}}

作者: syw開(kāi)門(mén)造車(chē)    時(shí)間: 2009-12-4 08:22
何其 網(wǎng)友好!+ Z, u8 n* v. Z6 |& s9 G: A
- y/ f; g5 h1 ?  d5 x( \
你的延時(shí)子程序中的延時(shí)太長(zhǎng)了,所以閃爍。9 i7 L( W5 I7 h. k: o
.
+ F8 p+ `$ }( g9 t8 A* i+ a4 g0 Ysyw  091204---08.22
作者: 何其    時(shí)間: 2009-12-4 13:06
不是吧,開(kāi)門(mén)大俠,循環(huán)60次,一毫秒都不到呀。
作者: syw開(kāi)門(mén)造車(chē)    時(shí)間: 2009-12-5 05:11
何其 網(wǎng)友好!
+ Z) d0 z+ {4 |% y.
, ~+ j" v# N2 m你用一下我給的延時(shí)看看還閃爍不?!& ?8 w. a1 v3 e' \
.5 D/ g" B/ F# x% _
syw  091205---05.11
8 v; Y6 K( d  u! A) g
+ E* ^( b( c3 `1 \7 V5 s5 A/ A; I9 B: i

. K0 v1 Z# C) N% A. N& t' U1 `7 T( v) t. N3 W( q/ \
        P0=xsjs[xsjs1];
& I1 t* W1 [* `. F         P1=xsws[8];# Q/ d5 @% Q1 p. w2 N
        delay(10);
. j0 C! ~- N2 f+ Y" o6 s//****************************
$ Z( r; B1 @+ w1 |% F, [. b    void delay(int x)
+ k- I2 g7 W# r3 }! n- J7 u  Z3 x    {( h9 T, t" O! `+ q
      int  y, z;! w& m5 [3 F) g) T0 @* a
        for(y=0;y<x;y++)
6 R, X, e. o  K& o        for(z=0;z<2;z++);
& R2 R9 Z& w  N* R     }
作者: 何其    時(shí)間: 2009-12-5 22:29
還是閃,是不是這種程序里不適合if語(yǔ)句呀,我用除余數(shù)的方法如下程序就好了。
) v* `9 D9 I) |: ~- j#include <AT89X51.H>) H* {1 q$ @8 v
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};. P9 I# R+ O7 X  M1 ]5 u4 ~
int i=0,j=0,k=1,a=0,js;9 H) p3 s. h/ ?+ l* X" F6 ]6 M/ G8 @
sbit beep=P2^1;1 Z$ {. a2 }! t9 `
sbit P35=P3^5;
+ a% Z* `! `/ r/ ^  j. Usbit P36=P3^6;
' R* G, o' ~- Q' e  t3 Vsbit P37=P3^7;
5 u# V: {" s7 b8 d0 k: j" Avoid delay(int aa)
' H  m; [+ l0 g0 K1 g{int y,z;0 o9 m/ n& D& [# n- b
for(y=0;y<aa;y++)" C# ?, v  X1 T+ R4 I3 e1 {9 R
for(z=0;z<60;z++);9 f& R  f' h* d* n
}7 t7 h! B1 K+ |2 e# l9 j
9 {$ P4 @; ^' _/ P4 q: Z. i, `
void main(void)
4 `( y& L. ?2 e( z* u0 b# J{# P" @3 D' N" P
EA=1;# S% }5 k: R" `5 _
ET0=1;
: e: A, r+ i2 G" L( b$ dTMOD=0x01;$ ~, k7 B' n: P9 S! w: I' j
TH0=0xff;. {% z; K* k" u. S5 k1 A& g
TL0=0xff;
; J8 q- P! O4 ~( W7 T: |' k# WTR0=1;5 Y- V; s1 j9 f; \: W7 R
while(1)* u( Q7 u, ]& f2 x5 ~6 ~9 a4 W" R
{
# B" Q; w1 @: }7 A3 r9 o+ z+ Jfor(i=100;i>=0;i--)
: w! @" n, _3 `* k, Q% U$ @{, l8 Z5 |+ g9 J
js=i;6 a& p4 U% i7 \1 g& K0 B
delay(500); } # ?! c7 `/ ]4 i2 u3 ~2 t8 M
}         }( m2 f! Z; R& @& x9 q8 @
7 r& ?+ ]2 J* M$ x* V8 E4 n  ?

  `! \( M* F& T' X, c: Nvoid timer0() interrupt 15 |8 Q2 F- Z. H! q1 C! v( V: |
{
% D. ~- d9 `0 N/ ~  P0=led[js/100];
; \0 p% h, ^$ P# mP35=0;
" j3 z4 P1 |0 D1 m% [% G  delay(5);- r4 E5 S. A; ]7 C" T, m1 y1 O. v
          P35=1;$ Q! @' p" i$ ]8 Q: q  t
  P0=led[(js-(js/100)*100)/10];
- U) J* v; h/ d" GP36=0;
- I+ X$ p, |; Q% ^5 v/ E% e  delay(5);6 _$ O8 T6 y; p8 }6 f0 ~- ^( _
P36=1;3 N; D2 j; V; ?5 S8 @3 d& s3 ?# I
P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];
! q- V; y7 e7 |2 e* p( e' O. i! gP37=0;4 J) K  Q! y) c& }
delay(5);( o8 _) Q# V# k8 l- J& |4 s
  P37=1;
4 R* V+ F; B* a, C9 E& Y- Y$ K/ k7 @7 u6 J$ T, ]+ [
TH0=0xB1;+ T) d2 u9 X# X1 h* x% ]
TL0=0xE0;9 u+ \' ]/ T  h: B3 L# U

! S  e5 s5 ~" Z( U6 T. Q9 T4 s}




歡迎光臨 機(jī)械社區(qū) (http://mg7058.com/) Powered by Discuz! X3.4