機械社區(qū)
標題:
單片機新手,請教問題
[打印本頁]
作者:
何其
時間:
2009-12-3 19:57
標題:
單片機新手,請教問題
前不久用c語言寫了一個數(shù)碼管動態(tài)顯示倒計時程序。倒計時倒是沒問題,可無論我怎么調(diào)延時時間,他都閃爍的厲害,請問高手怎么處理。是掃描頻率太低,還是點亮后延時不夠。如果是以上的原因,那么掃描頻率和動態(tài)延時各要多少才能看起來不閃。
: \$ z$ X/ A2 P; _* A
程序如下:
, _4 c& }0 h; ?0 r2 T- `
#include <AT89X51.H>
3 | c; x; @2 A v/ y$ z+ f
unsigned 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 L
sbit 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% k
void main(void)
% W& e* W& |9 }# F
{
1 n% s; X6 b$ f1 `8 N
EA=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* }. }, w
TL0=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( m
void timer0() interrupt 1
4 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 s
P37=0;
$ `6 b) T& E7 G- S
P0=led
;
# p4 Z8 l$ d' Y/ {: z3 g' Z
delay(5);
* [# A) Q& [* i3 K6 a
P37=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- i
P36=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- x
P0=led[j];
4 ^0 x1 |% K. Y3 p
delay(5);
% P+ x: \* I y+ g
P36=1;
' [( ]8 w* }0 h$ i$ ]
}
$ [8 ]; R- F& K. L( n6 u8 a
if(k<1)
! z4 s" I0 s1 Q! T3 h
P35=1;
8 e* F; l8 w. W3 g h* V1 A3 m
else
% |9 }9 _( V4 F( U+ V/ ], a
{P35=0;
/ h1 w" l# }/ B9 r
P0=led[k];
& o. V2 D U2 E$ e5 L6 o
delay(5);
( J+ M' n' f. J: X3 H
P35=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 }! f
i--;
: f, M9 [& }- g1 s* y
if(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( Q
k--;}
, 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開門造車
時間:
2009-12-4 08:22
何其 網(wǎng)友好!
+ Z, u8 n* v. Z6 |& s9 G: A
- y/ f; g5 h1 ? d5 x( \
你的延時子程序中的延時太長了,所以閃爍。
9 i7 L( W5 I7 h. k: o
.
+ F8 p+ `$ }( g9 t8 A* i+ a4 g0 Y
syw 091204---08.22
作者:
何其
時間:
2009-12-4 13:06
不是吧,開門大俠,循環(huán)60次,一毫秒都不到呀。
作者:
syw開門造車
時間:
2009-12-5 05:11
何其 網(wǎng)友好!
+ Z) d0 z+ {4 |% y
.
, ~+ j" v# N2 m
你用一下我給的延時看看還閃爍不?!
& ?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' U
1 `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
}
作者:
何其
時間:
2009-12-5 22:29
還是閃,是不是這種程序里不適合if語句呀,我用除余數(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. U
sbit P36=P3^6;
' R* G, o' ~- Q' e t3 V
sbit P37=P3^7;
5 u# V: {" s7 b8 d0 k: j" A
void 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$ d
TMOD=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# W
TR0=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+ J
for(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: N
void timer0() interrupt 1
5 |8 Q2 F- Z. H! q1 C! v( V: |
{
% D. ~- d9 `0 N/ ~
P0=led[js/100];
; \0 p% h, ^$ P# m
P35=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" G
P36=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! g
P37=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
}
歡迎光臨 機械社區(qū) (http://mg7058.com/)
Powered by Discuz! X3.4