机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

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

单片机新手,请教问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-12-3 19:57:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前不久用c语言写了一个数码管动态显示倒计时程序。倒计时倒是没问题,可无论我怎么调延时时间,他都闪烁的厉害,请问高手怎么处理。是扫描频率太低,还是点亮后延时不够。如果是以上的原因,那么扫描频率和动态延时各要多少才能看起来不闪。
6 C- W3 F/ f# ?) C, O: |5 H# `程序如下:- k/ A; p( _5 ~  a4 m
#include <AT89X51.H>9 f( z$ g/ v7 G4 S+ h# S
unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
. k. {# U1 ]& C( l- i$ K9 _int i=0,j=0,k=1,a=0;
9 A0 G* Y% _( O& ]( zsbit beep=P2^1;
4 D1 |9 o  T  |4 w! X# M  l9 m* I: lsbit P35=P3^5;
. z) F! t8 l) H1 w7 O8 K6 l  Qsbit P36=P3^6;
' y1 E! M& N& S  c- [7 Fsbit P37=P3^7;: F- ]% s9 U" I, J, I" n8 X
void delay(unsigned int aa)
9 M3 T3 F8 [  e  v' S3 S{unsigned int jj;
. C, ]  B  u( d) ~: @" E9 g( rfor(;aa>0;aa--)
7 f! I% ^5 V& p. F6 i# Q: ffor(jj=0;jj<60;jj++)
9 r3 W/ V5 O4 ~, l) f1 Q{;}}
- o$ x; s6 j! W' S" ~7 y" @2 evoid main(void)
- g2 M8 N! ]) o/ i! L" |4 K{
- L, Y3 X$ c1 EEA=1;
! R- H  j3 `+ |; T. M: n+ Y3 S- l- XET0=1;
9 N  m) e/ G' u9 N8 a# oTMOD=0x01;
  X& e, Y& `2 ^; U: VTH0=0xff;
* y: E7 c8 x" W% y. lTL0=0xff;) c3 A3 X. p, q2 t" j
TR0=1;( p1 J( w( T! F2 h& ]
while(1)
) }# e( s" @! [5 R{
6 m' c) ~/ v2 t0 h }  }" S& M0 t9 D! P/ b
) G5 d! A( q2 y: o! B9 O
void timer0() interrupt 1
& J3 M* Z% h9 c: R. i{if(i<1&&j<1&&k<1)
) W- a5 x, h6 a4 j9 R. g{P37=0;
8 ~0 E1 ?+ L7 a# q- z7 c* Z/ AP0=led[0];: E& i  h7 H: w3 j
beep=0;                                 . H% N8 \5 ?7 X( D
}& B8 w- x$ E% O2 S7 X! K( h
else  # ~; ]9 F* c! k! q" Q
{
& N& K  w8 Q& H* E3 f, KP37=0;
- m6 H  F3 a: s) M" x1 nP0=led;# E; O9 @! F$ m. o& N; u
delay(5);
8 P+ y' _6 n7 \+ \5 GP37=1;
, _+ i9 E+ N# o! [: F6 p% z}
1 F" V9 P" [4 }% N0 }# L( i( {if(j<1&&k<1)
' Z4 L* o* x# b# E( T6 Z5 vP36=1;+ x6 G3 F' d, g# D' L1 \
else
5 E) V5 `1 J3 Y8 E{1 u2 }8 t5 M* q8 B
P36=0;
  |( O; r; K8 q4 D/ a, Z8 GP0=led[j];
) c" z' J5 T+ {2 x# Tdelay(5);
2 p1 O8 i, h2 \' QP36=1;
+ e) O8 K! x& v  ~. b- v* }}3 Q+ {  X% Q! U& k$ n8 \; K
if(k<1)
3 t% g; [6 m6 l7 j  V& QP35=1;
% t+ o' R' M( h  Oelse* H# w" K. ]7 E
{P35=0;
# L2 J& [4 {1 q4 W( V8 hP0=led[k];6 b5 A- \) e- X, q8 v
delay(5);  
* M% A% a; {8 c6 F& c, i% nP35=1;. f& W' |9 q  ]5 [
}a++;
- z: ]6 Q( O4 G& E# x8 Y/ Kif(a%20==0)% p+ B4 u0 i0 k
{
: _1 Q$ T# Q$ D* N  k& Ai--;& t1 |) f% i/ V& X2 _+ j8 ~
if(i<0): y6 i% [8 h+ I) Y
{i=9;
6 R& q, B# G9 d2 D! d  s6 ]% E: _j--;}
& Q6 h$ A% M: p- oif(j<0)                     
2 t8 V$ n4 p5 K! k{j=9;7 l. ]. M" s2 H' O& r
k--;}/ c1 J1 A' g) @$ ?4 _  S# h
TH0=0xB1;
0 k: {2 I3 V# `/ ]  D/ l6 {TL0=0xE0;! w, ]: ?  C% Q) j
}}
回复

使用道具 举报

2#
发表于 2009-12-4 08:22:36 | 只看该作者
何其 网友好!
" C' m: c& i% v" u* k# N$ j' ~6 x. I: O; X! g, q" Q+ D* L
你的延时子程序中的延时太长了,所以闪烁。
" z! o, }/ Z4 C$ ]* t.' ]4 e# H0 j9 v( h
syw  091204---08.22
回复 支持 反对

使用道具 举报

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

使用道具 举报

4#
发表于 2009-12-5 05:11:29 | 只看该作者
何其 网友好!
* F0 o  W: [9 t8 @6 p6 T% M( s: K.0 x- Z1 b5 c0 E6 Y
你用一下我给的延时看看还闪烁不?!* s+ m- ^5 ~2 p- |- a
.) z% V% m2 t/ [& X! e$ a3 r
syw  091205---05.11
( C8 Z- L* x- C! {6 u( q/ Y# k& g3 z( ?) `) ]
1 e1 n$ J/ \4 g  p/ q( o: E
5 @3 h) h+ [* P* q4 t
  u2 i: I0 l% X$ W( w8 w
        P0=xsjs[xsjs1];
& G/ W9 i6 N. }( H2 @6 I4 k7 t' C7 B         P1=xsws[8];
+ Z" [+ H' h- A; ^) u+ g        delay(10);# A' A2 {/ S1 N+ |* k: b
//****************************, z1 y, _" g/ O1 d5 c$ O$ h
    void delay(int x)4 L  F& L7 x% \; m0 A
    {
- X* g& r4 i: H      int  y, z;
, B( Q4 {6 J0 i7 ?# }        for(y=0;y<x;y++)6 {( A& ^, x# z% j: _: S
        for(z=0;z<2;z++);, S0 \3 i8 N/ t) Z5 H" t; A; `1 F
     }
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2009-12-5 22:29:30 | 只看该作者
还是闪,是不是这种程序里不适合if语句呀,我用除余数的方法如下程序就好了。
1 A0 D( D& T+ P$ N* w, }#include <AT89X51.H>
9 ^7 U- [' a% L/ F& X7 L, S3 M3 |unsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};7 W) e' x4 j4 J% C" u
int i=0,j=0,k=1,a=0,js;6 A2 c( K7 a# w" _, G
sbit beep=P2^1;6 H1 c" q- d; g. @; c& i: O) {+ F
sbit P35=P3^5;
3 F2 n3 S( f! P! M5 x( ?/ S* v' ~sbit P36=P3^6;
0 j3 d% g1 Z* T9 O3 xsbit P37=P3^7;
( |% v8 F- I& X8 g' Jvoid delay(int aa)2 {8 D5 P+ ^8 S# d; G4 y
{int y,z;( D  L! W, W" N! x, B
for(y=0;y<aa;y++)
. [/ Q* A% f+ w1 Ffor(z=0;z<60;z++);% i: V! ^" S0 d* X) U1 o
}8 D% ^# M( Z2 t; M8 c

# b2 w: ?) n: B7 `void main(void)
6 m1 |" |+ U! a# {{0 r9 G) v: D+ l# ^$ D+ c
EA=1;
3 k% s% A/ G( w: gET0=1;
0 k  n% ]* V6 f& N- A8 J% b* HTMOD=0x01;
6 j' d$ K. |$ M( W4 _/ a& H% ATH0=0xff;
, _3 P4 ~' t! K# t8 hTL0=0xff;
" w! T, k: H( `: U# \TR0=1;
% v$ T: w, I4 R' Z5 Mwhile(1)& A$ ]1 ?: @5 C, H( r
{1 R9 \& A2 S0 N9 x; S. r! l
for(i=100;i>=0;i--)
0 F( U: o/ @& i% k6 x+ r{
0 n8 O3 d' F7 v6 zjs=i;4 V# v, \0 [) c6 S6 `1 f4 z: _
delay(500); } ' v, T6 F5 s' c8 }5 q7 H" ^
}         }& [# e3 C4 {# h) C
( \9 v9 N8 N0 w9 M' P

& n9 n# A. i; F& N5 svoid timer0() interrupt 1
4 z- e; }% V6 X# H4 h0 L{) a3 T+ J. W9 s. r
  P0=led[js/100];/ W8 _# I/ @1 o
P35=0;: ]$ J/ l* {# {$ `
  delay(5);
5 r& d1 U  r/ d; @          P35=1;6 o- Y/ k* E7 M; b: V$ E. Y  L, V6 f/ z
  P0=led[(js-(js/100)*100)/10];
: w9 v3 p' j3 ?4 G1 Q9 rP36=0;
* Q# _, [/ v# n+ b  delay(5);
0 _, O' i. P. _2 A. \$ d P36=1;/ z% W7 _; ]' R- }$ ?/ ^- R1 J+ b( D
P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];, S+ l' W- [, g
P37=0;
9 D- q+ u# S: m+ @1 y7 }# s delay(5);
% s, P, d- u: `5 Z+ [) E/ x- \! G4 m  P37=1;
& |0 X9 G- _  p% H4 b) o/ Z, n. a1 ~
TH0=0xB1;
8 d/ x$ M6 F4 |* f( ^- M4 @TL0=0xE0;/ v8 j0 I' K, `7 R/ ~
; s5 D  R! D: B/ W5 v
}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 00:17 , Processed in 0.049824 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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