机械必威体育网址

找回密码
注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3229 | 回复: 4
打印 上一主题 下一主题

单片机新手,请教问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-12-3 19:57:38 | 只看该作者 回帖奖励 | 倒序浏览 | 阅读模式
前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
" `5 k4 [! X% ~9 k. W& P- \* j% C程序如下:
b2 z9 I2 |' y#include 8 p8 `# }! y; c+ {1 L0 f% S. O
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};. Y0 m: p/ ? Z4 }9 R, T% m
int i=0,j=0,k=1,a=0;
, U/ d& I- V) i# `& X, `sbit beep=P2^1;l K2 d9 S# m) F8 l
sbit P35=P3^5;
& }! A5 a0 M! O8 a0 v& ~) A: j6 Usbit P36=P3^6;- p* g- d) |! R
sbit P37=P3^7;
) y% {& |! P: B0 Wvoid delay(unsigned int aa)
1 J+ R5 Z% }8 V& \' Q* u{unsigned int jj;2 v' E. z$ o. |) \+ F9 }
for(;aa>0;aa--)
" \/ w1 ^9 {+ Z1 C x# u* o; ffor(jj=0;jj<60;jj++)
# Z4 D: U- D. n( }6 p% K{;}}
7 i4 `1 \/ V8 g9 N6 ]: wvoid main(void)
( H/ T% `2 B" Y3 O1 v7 B{. T( k0 w% P8 P. s
EA=1;0 E5 E0 c- z2 E0 a8 M# a8 T- ?( A
ET0=1;: m3 z. j9 n# H h7 S* H; \
TMOD=0x01;
( n5 D! R$ g3 D$ HTH0=0xff;) d. n( s M% ~
TL0=0xff;7 }" ^% W; t6 j/ K4 u1 ~, I
TR0=1;
/ M! A v) C0 Q/ twhile(1)3 R E8 C8 Z, D% j% a
{
: s/ M0 M i. S7 h# m' o' j0 N} }1 X4 K/ L6 P1 c; Z
. a& u7 W: S& c0 g
void timer0() interrupt 1- u- y' Z2 o! f$ I& r4 b' o ^9 U
{if(i<1&&j<1&&k<1)L" h1 o& ?* ^! u. H$ h
{P37=0;
" a, p& G5 Q' K% f( k+ N% }- YP0=led[0];
* ?+ p9 b( g! o7 T) M; L0 W5 u6 ybeep=0;" R& @; @4 D2 _
}# F" g. u9 B0 F8 H( g
else& ^3 T& q) e/ C* ~/ r" k
{+ ]6 _7 N* o, |4 W
P37=0;; ^' J$ e2 T' |! {; r
P0=led;! U5 G( k# o" t9 t: m) F
delay(5);" s. L! c% ^: B
P37=1;
n0 y( v+ o4 i0 D# G}
8 u9 `. P" g5 z/ i+ j* O. R2 V# J) Mif(j<1&&k<1)% j9 u8 N8 v( t: n8 [ a- T" m7 e
P36=1;# F' h3 y" x0 y7 C
else2 D* i+ j4 J8 M' v
{) j3 k0 T( U4 `: b
P36=0;
2 g S* [% T9 q& z, eP0=led[j];+ B: x) h! z; L( D: z3 _
delay(5);& i# ~# u, q, Y) b* f
P36=1;
t a, U' ~+ c2 h9 _- i; K* K}, K R, V# d! u- o
if(k<1)
- t/ j9 Y# \$ M3 x8 ]5 lP35=1;
1 X# J4 M2 q0 q( Yelse
+ l* p1 o' o* f{P35=0;# V- A9 V$ W8 k* ?9 @! m' {
P0=led[k];
, `: G i( j; T3 ?. K& Y! tdelay(5);7 \$ N: c# W6 n& B7 A g/ E
P35=1;
H2 T' N N/ ]}a++;' t3 B5 `" _. C9 Q1 c
if(a%20==0)
$ O: z; H* y) f$ k7 t{2 U. t$ `! x. W ~3 G A8 w; x
i--;
! N9 i$ M) s6 h; @if(i<0)3 W1 ^2 }( B2 f
{i=9;
- p; A4 j5 J9 } K1 O dj--;}
6 x# H0 y! o* z0 Z y) ?if(j<0)
0 W6 U _) `2 D# O3 X{j=9;- V v& G; B9 {3 z
k--;}1 v& }, ?5 B9 B4 [" t; _ G
TH0=0xB1;4 K! A" z' }) Y+ ?& x
TL0=0xE0;7 R2 C+ b$ H! [0 d6 Z
}}
2#
发表于 2009-12-4 08:22:36 | 只看该作者
何其 网友好!
0 v) p# W8 H) B$ I; P5 Y8 Y
7 x) j3 y, S7 K4 {( `% F. D0 u# D你的延时子程序中的延时太长了,所以闪烁。N6 c+ h* d. t7 m
.5 q! w7 i, l) j9 D" Z2 K x
syw 091204---08.22
3#
楼主 | 发表于 2009-12-4 13:06:37 | 只看该作者
不是吧,开门大侠,循环60次,一毫秒都不到呀。
4#
发表于 2009-12-5 05:11:29 | 只看该作者
何其 网友好!
* Q1 Y+ c9 F+ G" `' `.
7 }$ }2 x# I- Q4 b. i$ l- L你用一下我给的延时看看还闪烁不?!
% M7 T6 @0 w7 l% S.8 Y( p. z* s+ g" j- z6 l: `
syw 091205---05.11
2 D; ?9 B5 `5 `# H# T) h$ B" k
- G0 A# q: G3 T* b/ ~$ M. ^8 p! z8 U1 z+ C( R; b

9 x* E9 ^- j' r
+ z- u/ K; P' i$ v L9 J1 A, xP0=xsjs[xsjs1];+ L3 {: p" L. G& L& M
P1=xsws[8];) }4 _/ D& n( ]9 L# I- o7 z ]6 g
delay(10);
. z0 c" X7 U! X4 n4 W A7 M7 K//****************************
" f p, J2 q; ?7 k4 gvoid delay(int x)7 J- t+ m, `: ~; k# W
{4 j" q0 W. `2 s1 o3 E- X
int y, z;
" f; ]2 X% j1 f7 I2 \+ }# wfor(y=0;y; q. X6 u1 K( l3 D6 J
for(z=0;z<2;z++);
, H" p" O& w# u4 b9 T: D1 i}
5#
楼主 | 发表于 2009-12-5 22:29:30 | 只看该作者
还是闪,是不是这种程序里不适合if语句呀,我用除余数的方法如下程序就好了。* U% R. w% [4 Q5 O) `6 ~: p
#include 4 a1 T, V/ k& K# J
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
: ^0 P" I9 g( y, Rint i=0,j=0,k=1,a=0,js;: V- T, G! Y& k. o( y
sbit beep=P2^1;
# X9 U o' s! {. Zsbit P35=P3^5;8 h6 G6 g2 w2 n8 a
sbit P36=P3^6;7 u3 r8 w8 ~, u' K' p, P. W; `/ _% p
sbit P37=P3^7;: E5 Z5 C5 w0 p! i
void delay(int aa)
( z- b; I" ]9 r' W' \6 f2 g{int y,z;( S' {6 z$ I" |( P; O n0 X
for(y=0;y/ E1 X% `4 Z7 b2 E- I+ L
for(z=0;z<60;z++);
3 ^9 F. D( R: B3 J {7 O3 ?8 y}
0 c0 r; n0 F9 b) [3 y# |. X- E2 ?" u, i3 e3 w
void main(void)8 H6 u# r; w# V0 b$ `, t; D
{
; n4 D0 J1 e" [EA=1;0 B4 A4 a/ K) R$ Y4 ~
ET0=1;6 f. T8 h, D9 S" Y; ?4 B; l
TMOD=0x01;
8 O; D. I0 H% @- F) cTH0=0xff;
# r* N0 E6 s7 h) f2 RTL0=0xff;
$ o$ M& N1 B( f k5 p( HTR0=1;$ ^) f" B/ I" r7 @" m/ ]
while(1)
9 N M0 i1 D/ d{
4 p N' w8 V& E2 ~for(i=100;i>=0;i--)3 @* K% p" K8 n3 s q0 H
{- I* J2 u g% S# ^5 c; E& k8 K
js=i;
$ B+ ~" p* h: m- e% ddelay(500); }9 G9 p3 M! k6 c- C
} }6 E, m; u' t% F# ?# N9 v- H7 i
) d1 m. d+ s# k" |. L. w

1 w, f! {! y9 j' ^* t( cvoid timer0() interrupt 14 ]/ Q1 [6 c' b; o
{6 ?* d0 v5 M6 _ _ _5 F% V9 D: _( W/ d& O
P0=led[js/100];
$ G u" L% C' mP35=0;& |1 f. }3 k' {
delay(5);
% j8 c% x( D6 X& z* a- @( RP35=1;+ K! e( U4 H+ ^4 ]
P0=led[(js-(js/100)*100)/10];7 F4 h; Z$ o& _. s
P36=0;
8 C* _. r3 E L: v5 v% w3 Q% W1 J, Pdelay(5);; ~, \4 M( V0 J# W' y
P36=1;
6 ]' l5 r: e* S9 |P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];
& T E) A3 P* p: m t! ^2 HP37=0;; ]0 _2 A' I+ Z, x( e
delay(5);: _7 ?3 J& f) b; e7 Q% |% \
P37=1;9 b6 D3 X3 M& \
& s( U9 @* S; k) {6 L0 [
TH0=0xB1;
; x# d4 I6 l- X6 B) X$ ]TL0=0xE0;. s/ I* }( T9 ~+ r

" f1 [ U. s. g$ |. n}
您需要登录后才可以回帖 登录| 注册会员

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址(京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号)

GMT+8, 2025-1-26 03:19, Processed in 0.073680 second(s), 13 queries , Gzip On.

Powered byDiscuz!X3.4Licensed

? 2001-2017Comsenz Inc.

快速回复 返回顶部 返回列表