机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

单片机新手,请教问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-12-3 19:57:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
+ ]) V: H, c' G, S- \; ]程序如下:+ |; S2 |! B1 z( @, q2 C5 q. N2 ^  v
#include <AT89X51.H>/ R$ x0 U3 \$ |
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
3 E& _3 d, S" @/ Fint i=0,j=0,k=1,a=0;3 t" h! z6 z* Q; ]% a
sbit beep=P2^1;9 X9 I+ l2 c6 l
sbit P35=P3^5;7 X, k' \4 Y" Z1 P) K4 w. I
sbit P36=P3^6;2 M5 G0 y) `" P' v& x& }* d2 g
sbit P37=P3^7;2 K7 P, `$ t: y/ K/ a: x* |7 A
void delay(unsigned int aa)1 {( q* }6 e0 i* A
{unsigned int jj;
6 H/ \( a0 Y  tfor(;aa>0;aa--)
! o3 U1 }' R: T  p/ l: s, I% i" E/ ffor(jj=0;jj<60;jj++)
3 W9 k2 u; H# R5 a: w: n& B{;}}9 R# u7 l9 f4 w/ {
void main(void)
. C6 [9 X9 h& d$ o1 D8 ~{1 W( T1 b+ x4 @$ v. ]& Q: V" ^
EA=1;9 A6 @) _( B- S2 O
ET0=1;. t/ ^1 l$ d: m1 z2 F& w
TMOD=0x01;) [9 [0 v. _" Z# @$ y3 f' @
TH0=0xff;
0 ]5 ^( [, T/ l( Y7 R: k( V6 X! Q7 tTL0=0xff;! }% B, O( V. ~3 u" t
TR0=1;( Z6 ^" Y  [* o/ W4 @% l+ i. f! p9 g; l; u# [
while(1)6 G- E0 }4 s( m
{- l$ l0 Z3 A+ Y3 C- w
}  }% [, t% j6 @8 g: E6 u! i
) Z& e1 |, d; Q4 |9 F; N
void timer0() interrupt 1
" B3 m$ i- Q5 z  r{if(i<1&&j<1&&k<1)
1 B, g- P3 M4 t{P37=0;# z0 L* ]; P6 a+ ]( g2 K( G
P0=led[0];' a. r( T* S$ k+ N
beep=0;                                 6 f! p# m* W9 h. P
}
1 S( `9 l. d/ \" X4 \' S: Uelse  1 v$ y9 h4 d- G9 g; l" r1 e
{' K6 q% ?8 I* F( c, P: a
P37=0;! a+ J1 E" F( e' u+ J. q1 F7 }
P0=led;
0 y: z6 z# ^2 [6 G) Q+ d' F% hdelay(5); & a( S' i3 D; A' P$ W. E" u* b7 ?
P37=1;
  G; A+ Z8 J" @6 u% n! N3 ?} , K/ G% L- p5 T* B4 F9 L! G% C
if(j<1&&k<1)3 ^% }5 f4 y% _( T
P36=1;
$ c3 k8 j7 t2 c8 ?, ^" Xelse
* x& {( s9 K( ~; q6 k{
- z$ [/ U: F  m0 ?" \P36=0;2 k7 K$ E; P4 {! m6 `0 m
P0=led[j];
( H; I1 o2 m2 {7 Xdelay(5);
$ ~, o, q" l& {  q' X& bP36=1;
3 @1 s7 I% o9 ?9 J1 ^% Q/ B6 b% a}4 T  u: f0 b7 Z* o+ Y3 P
if(k<1), Z( Z( \& J8 u* Y
P35=1;- x: `+ g' v6 w
else
. @3 @7 l8 Q2 U: |{P35=0;5 {( E; m% q7 S! O
P0=led[k];
9 U2 C! @8 S9 Z3 y8 h$ wdelay(5);  : f3 l7 K3 q7 A$ ^
P35=1;9 X% T' o; f  l/ \# K
}a++;
! Z8 X( h' A) f  e( M$ U, L) r( \if(a%20==0)
5 W, ?9 x# ]" @. b7 }$ `) ^1 N0 c! W{ + }( c9 i% Y" e7 \; a5 e- k' E" w
i--;
2 E0 g8 ^- c. o5 K2 |if(i<0)
  X# E6 [# t* d( ^1 _{i=9;  o- w" M* b7 D. ~0 v5 n
j--;}& v" x, n5 d  F3 q' \  \
if(j<0)                     
  o- d9 P$ j, Q{j=9;
; r+ \' J" T9 t0 p9 [7 N+ P0 C. dk--;}  }3 n# h+ l+ Q
TH0=0xB1;
& t6 }3 j4 x4 \; j# rTL0=0xE0;
' ^( v: ~7 H; r+ v}}
回复

使用道具 举报

2#
发表于 2009-12-4 08:22:36 | 只看该作者
何其 网友好!
3 s8 e( j* }1 Y& ]0 g- x6 u3 F9 p/ c% t. W+ D
你的延时子程序中的延时太长了,所以闪烁。
" e, l8 |. w$ ~1 q.# {3 U7 R3 l( J+ h. m% H
syw  091204---08.22
回复 支持 反对

使用道具 举报

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

使用道具 举报

4#
发表于 2009-12-5 05:11:29 | 只看该作者
何其 网友好!
# p: P2 a7 I+ \- c7 m8 P8 j.
! j+ k4 s0 L5 y8 _你用一下我给的延时看看还闪烁不?!
* x" X; l0 J2 y5 F' r.; \. n/ o2 o( Y7 Q9 J
syw  091205---05.11
7 Z! s7 N8 A! M. S( D0 T/ k# j, X
( v4 K2 S5 j4 k4 H0 D9 k
$ m9 O5 H% v( N4 W2 X( y4 M( _3 }) N! M: E

: H+ F  m' v+ z- M        P0=xsjs[xsjs1];+ d% \! f. ^# R
         P1=xsws[8];$ A2 \. F6 I- s% M' L( p) r
        delay(10);
. D9 ~# x5 c& K//****************************% j" n9 ]7 G4 h) G
    void delay(int x)# b/ A4 j* w: I( ]
    {
# y, g5 d. I0 n" Y% j      int  y, z;8 G3 y# F3 Q8 D' U
        for(y=0;y<x;y++)% o5 r& ~: C- z* b) s2 {0 [3 m
        for(z=0;z<2;z++);
6 v& L/ V/ b4 A5 S: r( O     }
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2009-12-5 22:29:30 | 只看该作者
还是闪,是不是这种程序里不适合if语句呀,我用除余数的方法如下程序就好了。
5 M0 ?: n$ y/ M) [#include <AT89X51.H>
& h/ O  h2 G9 c' {/ w* t" _' ?& m( kunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
, b' e6 i  C( i  p& Jint i=0,j=0,k=1,a=0,js;5 D  M- |$ x/ C$ |$ U% j3 p* A& T9 u
sbit beep=P2^1;" Y# S6 T. u7 u) `6 [) }2 |
sbit P35=P3^5;5 _% U2 U1 w0 N- z, @# n! X3 A
sbit P36=P3^6;
* q9 O4 Q0 _/ q2 {/ xsbit P37=P3^7;
4 ]( |) A. o; K2 l. tvoid delay(int aa)7 P% D; F5 z, W1 l% z  A" s
{int y,z;& S- N3 e8 x' s* Y! s9 {* L% u
for(y=0;y<aa;y++)
1 E9 G$ i2 z' A7 n1 t1 \+ ffor(z=0;z<60;z++);, a. s) g) [. [, |0 ]
}# D# Y; w+ ?. |

# T( y5 X7 Q  _void main(void)+ A- T  R  P0 h: _
{. I0 v0 A7 ^+ t( }- P; f: D
EA=1;
# o5 D8 ^, ^) N  p6 j7 O/ ?1 gET0=1;8 N, d1 G, J8 l8 ]- U+ q
TMOD=0x01;
1 `. g/ M; g! P# h% q4 I/ CTH0=0xff;
6 t4 ?& L# E- m2 p8 c* D( ~0 @5 |TL0=0xff;( K  s# f" c4 I5 L
TR0=1;0 O8 p; n' q4 f. \7 g% z  n: V7 r
while(1)
5 p, I5 X' V8 e0 q; H{
% b1 ]; t8 f  g8 ~4 _for(i=100;i>=0;i--)
$ s' D8 |" S4 E& S: N3 Q{
/ |' J1 e- ?( f; w' fjs=i;
# \. u" j6 V/ }9 ~ delay(500); }
' S* J: M% K: {2 @6 w4 q7 X, M }         }) O5 m$ `" i) F! X0 E, D
& O2 N2 Z8 B9 H& q/ K3 ^! \. d8 n

8 A/ m+ [3 Y- d+ h* |4 _" Evoid timer0() interrupt 10 e' t+ [5 G  G
{$ |, h0 Y- v$ z: \; Q  J
  P0=led[js/100];# W; J$ H* m/ [8 ^# @
P35=0;; S2 d4 c* u6 J7 M
  delay(5);6 F( S( c; e5 h7 M! o* p4 R
          P35=1;
0 N2 x- ^6 R4 a1 d+ ?: W3 Z  P0=led[(js-(js/100)*100)/10];
, I+ u/ X  a0 A" Y# @. j2 z- N) |P36=0;
/ m5 L& n% R( o- {  delay(5);; {6 ?* A) l6 I" k6 J: f! X) K
P36=1;
4 B  I2 o& b# P' f$ H6 r P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];
4 C) Q7 x, k) p5 c; V& G8 U2 AP37=0;
5 z0 A. h/ ?7 {$ C  W8 A delay(5);: V# T1 c. k; [$ R5 \
  P37=1;
! y' N2 e% t- v7 `% b8 E; M  W3 ?" x" b. C% j7 s
TH0=0xB1;* T; [9 d; {# \% b
TL0=0xE0;
! ]2 Z2 I# _4 Q1 F4 g/ g7 a. S% J2 ?7 g6 P; Q
}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-19 06:26 , Processed in 0.085077 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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