机械必威体育网址

用户名  找回密码
 注册会员

QQ登录

只需一步,快速开始

帖子
查看: 3304|回复: 4
打印 上一主题 下一主题

单片机新手,请教问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-12-3 19:57:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。: L+ i0 t) {+ V. i
程序如下:. m* d( r9 z: v. U, |8 {
#include <AT89X51.H>5 B$ u1 s! T" c1 j3 h3 Z& |7 z1 u
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
( \2 f# `8 R" D4 P0 b) Y2 Tint i=0,j=0,k=1,a=0;
9 O- R% o0 n9 v0 K9 |1 h; u  [sbit beep=P2^1;
. c. z( H9 P! x. I' esbit P35=P3^5;! \/ w3 |, b* B! T$ l2 Y
sbit P36=P3^6;
7 J5 }3 P/ z- qsbit P37=P3^7;7 M( v8 x4 }8 k, ~8 B
void delay(unsigned int aa)& F& r* i3 Q/ l# M! G+ ]( t) {
{unsigned int jj;* a6 b* L8 f' E) z2 r4 U
for(;aa>0;aa--)
0 U4 r5 w5 ~8 W. Q/ `/ Mfor(jj=0;jj<60;jj++)
5 i: d$ p3 o4 k( Y! x5 o{;}}  j- b) Y! u3 A+ K+ L
void main(void)/ m, c% N; k. |4 ~# d
{8 U5 c! T; N5 p& X4 h' J
EA=1;( b. X5 M$ O" b: F
ET0=1;! h7 V6 `/ t1 Y8 ~
TMOD=0x01;" Q, \' e( }* G- S3 ]. T8 T
TH0=0xff;
! X5 _& V6 M4 p3 m) A" C, l3 CTL0=0xff;
; ]7 M" Y3 @' J; k- [8 WTR0=1;
9 H+ y3 [- A0 D; }' g5 Zwhile(1)* t% q, a# f- X; z! _! X
{2 e* |+ |9 l- `7 |8 }
}  }( p9 z, K) [+ J) h

1 z/ f) U" ?% y' U& z' r. ovoid timer0() interrupt 1
5 {( W" P4 g, p- x/ y3 n% S5 m' i/ V{if(i<1&&j<1&&k<1)
4 z2 U4 c9 F" t" i{P37=0;
% M  P8 O  w* i! M5 S0 Y9 l' HP0=led[0];1 s5 B5 B( Y/ O/ v$ j! i5 V
beep=0;                                 ' \9 g& U+ C# A% a' ]
}
; z$ ]) @" f8 S8 }, [else  
' Z0 s+ L9 U3 W; p# m{# L2 S2 g8 I* z( F8 S* L8 F
P37=0;3 K- u. a1 p4 d) d
P0=led;: c/ U, _4 x  g
delay(5); ! A# l, i( v" m; Q0 }
P37=1;* R* F* H2 x2 f, c
}
2 A6 x) x6 r# m5 l6 h. rif(j<1&&k<1)$ a5 ?- m% j, M
P36=1;# F3 H0 W! _3 i& ]5 ~  G1 f
else7 r/ ]1 I5 k. n; \# ?9 f
{
: l! R# B  v/ H2 r+ A0 V( QP36=0;, q0 V, ]7 x9 J, b; _. v$ s
P0=led[j];" p  [+ `+ @% `; w% ?
delay(5);
* J  q& Z: h& s% o  P, CP36=1;
( v8 G6 p6 a% r7 l' p, q$ A  h}6 S- X: z  Y8 L9 l& @* g$ K
if(k<1)
0 ^$ P; O) v$ e7 b( {$ A; L' UP35=1;
* B' `* W' U' Aelse7 |6 e/ R  A' W' q* s5 T* v$ B) G
{P35=0;
- F. C4 u* T( h) ?3 _8 CP0=led[k];: D  y3 G% {* P. H% [& d
delay(5);  " X  Q( p* E, X, L
P35=1;$ E( n  L$ Y5 T
}a++;2 v8 `6 _  x1 @4 B; ]+ \
if(a%20==0)
$ U* u( E  r+ g6 F{
6 P* K& K5 R! F! n1 Pi--;
* ^5 Q1 g$ _- L6 pif(i<0)
1 O' w8 d( Q& ~7 f1 T{i=9;
- R$ _( h8 o0 O, H) b  `j--;}
) D6 P5 B5 J; d$ T( @- _if(j<0)                     4 X4 z  g4 ~8 \% e1 }5 u9 t3 w
{j=9;4 b* M7 o; d- ~
k--;}
: W$ C$ w# v! R5 I! r! c$ {# wTH0=0xB1;
+ P/ ~3 O) M- STL0=0xE0;
, ~; v. X* \4 E8 F}}
回复

举报

2#
发表于 2009-12-4 08:22:36 | 只看该作者
何其 网友好!. `1 ^9 \1 l' K' n% G* e
6 g, ~) O5 t# J4 A, Y, i
你的延时子程序中的延时太长了,所以闪烁。
) X7 r* N  f( |* }) }.
7 ?4 g$ b' ?8 O8 S; q, j* |syw  091204---08.22
回复 支持 反对

举报

3#
 楼主| 发表于 2009-12-4 13:06:37 | 只看该作者
不是吧,开门大侠,循环60次,一毫秒都不到呀。
回复 支持 反对

举报

4#
发表于 2009-12-5 05:11:29 | 只看该作者
何其 网友好!
0 |: ~) G  x; Y: \.
3 j& E8 L4 {8 S你用一下我给的延时看看还闪烁不?!
  R1 c. d7 J/ t.# _% x2 Y8 Q3 c+ ]- {- g
syw  091205---05.112 G/ y( P* h- G0 C, d5 x; }* |
: I8 d8 S; P, V3 f! ?
* p0 Z, S5 c; p
( g$ ?9 K8 u% r
$ N! U7 C8 ]0 b' |/ P) X" j) G4 R
        P0=xsjs[xsjs1];" N2 R8 M  v- u5 o) ^- @$ t1 T
         P1=xsws[8];. f6 g6 `# ^) c* z/ l' G* n
        delay(10);
- V; H9 z! H- a0 t//****************************- {$ R. o7 G% j5 Q
    void delay(int x)! \# k0 W, n( d
    {
% \/ ]# N8 z# V  T: U4 N: T      int  y, z;1 A* U2 t+ w. s. {& W6 q4 b$ ?- l
        for(y=0;y<x;y++)
$ v  E4 b$ ]  F' h  w        for(z=0;z<2;z++);5 Y% t2 ]/ e" w
     }
回复 支持 反对

举报

5#
 楼主| 发表于 2009-12-5 22:29:30 | 只看该作者
还是闪,是不是这种程序里不适合if语句呀,我用除余数的方法如下程序就好了。, p3 x: }2 h0 o' Z' r# |3 K
#include <AT89X51.H>/ J* b9 \' E" l
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
0 `) u7 D. J/ |int i=0,j=0,k=1,a=0,js;% M2 w/ A6 [) V5 E% q
sbit beep=P2^1;
, Z& b: N! W4 z+ ^sbit P35=P3^5;7 O& b3 w2 I& V0 Q' I7 b$ m5 x
sbit P36=P3^6;; H' u0 M; g  e1 e" ]
sbit P37=P3^7;0 ]7 Z  g* u- R: H
void delay(int aa)& F2 r7 N& s- o% A* C
{int y,z;5 C2 p/ L0 ^  v! [+ o8 }9 I
for(y=0;y<aa;y++)
. i( ]# I8 u$ ^1 N+ K  ^for(z=0;z<60;z++);3 {. D- m) k0 {; a
}8 b5 \  Y' w$ ~
; t6 [. `1 j) v: j5 \  \
void main(void)4 V7 v% w& s8 r) o
{
9 x: F1 M( @/ ?8 GEA=1;
! a5 [7 l/ ]1 Z5 A1 @5 W: S1 hET0=1;
" b- c3 ?" Y' S6 v2 }TMOD=0x01;
1 _9 k3 ~( W3 y9 Q. H) F( mTH0=0xff;
  ^6 N4 ]$ z( W6 n" f; j" YTL0=0xff;
/ `6 P( ]' i2 W6 uTR0=1;
- N) s; [+ z$ E2 j5 Z" K, ^# Y" rwhile(1)
7 N/ S, d( _% k; v) K  f& t: p: e{
( p: _0 T3 y5 A6 ?! x7 ofor(i=100;i>=0;i--)4 @' [1 v8 k  ?  S. o, E) o' J
{- J$ {' q) Y& `' a
js=i;+ x" s) M4 x5 u2 d! t
delay(500); }
' y+ P/ m1 S! \2 L6 k }         }, j3 f* o9 e- @/ w

$ a* O. M5 K4 d; P- i2 H  C6 N6 k# A$ f. T3 K) \9 q* s
void timer0() interrupt 1! J# M  R4 j3 A* b: y; H  u8 h+ [
{# Y2 n  D* b; Z2 Z
  P0=led[js/100];' j, J, G* W0 o
P35=0;
4 T% L! `  G+ k, a  delay(5);
3 D. @- y5 ^, P          P35=1;
" A  {7 T2 i& H  P0=led[(js-(js/100)*100)/10];2 q2 X. {9 Z7 Q8 v) u- U. o
P36=0;8 _$ K5 U. H, x9 ]) K5 R: X
  delay(5);
: ^+ K- p; H( q% X- D" ?5 w* }5 a# w P36=1;" F3 x8 w- m  e  |$ n% |
P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];
' }0 C3 M' M# W, N+ AP37=0;
: n% f" `1 |/ L5 m0 U8 f  A delay(5);& v+ M% E: p! K- m- h+ D
  P37=1;5 A( ^/ d" O* A2 ^3 P: }
9 T  d6 }: ^8 b
TH0=0xB1;
, f7 u( E2 V* D  QTL0=0xE0;9 U' t. K' Z) e( Y; K
  W1 _! J$ M  s3 |8 h
}
回复 支持 反对

举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-4-3 01:58 , Processed in 0.054064 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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