久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 3404|回復: 4

單片機新手,請教問題

[復制鏈接]
1#
發表于 2009-12-3 19:57:38 | 只看該作者 |倒序瀏覽 |閱讀模式
前不久用c語言寫了一個數碼管動態顯示倒計時程序。倒計時倒是沒問題,可無論我怎么調延時時間,他都閃爍的厲害,請問高手怎么處理。是掃描頻率太低,還是點亮后延時不夠。如果是以上的原因,那么掃描頻率和動態延時各要多少才能看起來不閃。
6 j% B& J5 z( F+ O6 T/ S程序如下:; k+ C* i: D. ]* o/ `" H" x
#include <AT89X51.H>
/ n5 Y) H4 O# B. N  zunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
! c% r' @* ~% q- P# Nint i=0,j=0,k=1,a=0;7 s9 V0 x5 h1 ?5 H
sbit beep=P2^1;% W1 B% f' w* @2 e4 w, `9 [
sbit P35=P3^5;# X( K+ W" {! i" @. ~, m
sbit P36=P3^6;( j) [( H3 E) m8 M
sbit P37=P3^7;9 u% w* o, g9 o; T
void delay(unsigned int aa)8 W* h: G: c' N' k" p
{unsigned int jj;
! p% m/ q+ ^% d' D1 Ffor(;aa>0;aa--)) z; Y" Y- {0 Z* }' b% o3 @
for(jj=0;jj<60;jj++)
+ Z& j) _2 k; |( t: d0 ^{;}}+ \( q7 y& V7 t/ f$ k: B4 E( Z
void main(void)! f* L. w( U& }6 E6 G
{
6 e( Z8 `+ e( b+ c0 Z0 X/ pEA=1;
& x/ g. G8 A0 U: `! ~" S+ r/ VET0=1;
' }5 h' P* q$ y% b9 DTMOD=0x01;
9 K6 q/ q+ j! t" `  e' o. K2 [TH0=0xff;1 ?5 j$ ?" S% V% g% i9 R
TL0=0xff;
$ n3 _# P  u6 A8 g" T, z: e1 pTR0=1;; s3 p. @% z( \( k5 U
while(1)
) |( m* k. |* P, _; E{/ B" D: i7 M  \* r( E( n
}  }
1 V, i7 d- g( w, k  X0 c
! s  X. s  Y  `) b% _4 gvoid timer0() interrupt 1( G/ G: P4 m1 J5 Z
{if(i<1&&j<1&&k<1)
9 a. N& C5 N" B' P7 v1 l{P37=0;' I: k( B, h  J  F+ M& X1 `
P0=led[0];
+ S9 Y  V, f7 t5 p% ^* B' Dbeep=0;                                 $ ~5 ~' O3 P" \' ~% K  W) ]
}; O2 Z8 w2 Z- `' @- o
else  
3 i+ n* S) y; B, s( a: c{
, M; D2 C# w6 P3 BP37=0;2 ^( V2 a# z( g; Z# O1 ]/ I
P0=led;
- S' V1 K- e3 B; Edelay(5); # R# P: t+ D! d# `+ @
P37=1;
1 m( {1 g* \: E* k5 k} % c9 t. A( K8 }+ L& Z  f  n+ N
if(j<1&&k<1)
7 P$ N) v% ~9 L8 l, OP36=1;
$ P; e! T/ ]0 ^* l+ g1 T$ G: T% `else
, Y+ I4 k2 g' y  P5 S* F$ c- r& N{( W- w- k; }5 r
P36=0;, ~' ?# R# I- E9 o$ c
P0=led[j];! w/ U: X/ l2 [1 A; z4 B
delay(5);
. o! P2 }9 n' H- K0 q3 XP36=1; ' i" I3 S: S* B# h
}
3 v. q. @5 a# k/ Cif(k<1)7 X4 P1 d9 e' H
P35=1;) R- R8 v# K) \% \+ N8 V# Y
else7 f: d9 t- ^4 h
{P35=0;
& L# M  U& b7 `5 P  p' d& ZP0=led[k];# @. ?# D& U+ o) I, C  w
delay(5);  
& U( t5 M3 }+ }; `* yP35=1;
/ w/ v- d) W! ?: G: b# o) I}a++;2 W) ?& }9 e) @7 k7 n1 Y$ \
if(a%20==0)
5 z3 s: ]5 M2 x' z1 K1 n4 P{ 1 M% c- M  Y) a2 _0 a1 L/ @2 f( D' O9 Y
i--;4 b. n3 r( G1 ]0 M/ N
if(i<0)# M2 J2 P! n, m* n0 m
{i=9;
. @& k3 F; a7 U8 t* zj--;}: S3 k/ ~2 k( ]0 `1 K
if(j<0)                     
: @0 n) n' }8 N{j=9;
0 e  }' u) }# X, p2 Xk--;}
8 N2 h; f* ?. ?( e2 H- \TH0=0xB1;% T5 G7 y; Z$ T9 P$ j6 y
TL0=0xE0;
1 f% F+ e/ V/ P$ l1 w0 E}}
回復

使用道具 舉報

2#
發表于 2009-12-4 08:22:36 | 只看該作者
何其 網友好!! k2 z* x4 Q5 ]. I2 C% B

9 j) f+ ~) c. D你的延時子程序中的延時太長了,所以閃爍。0 R) t7 P* G/ x, `9 X
.# E9 L$ p  H7 B0 Q5 G" M3 U$ D0 G% T
syw  091204---08.22
3#
 樓主| 發表于 2009-12-4 13:06:37 | 只看該作者
不是吧,開門大俠,循環60次,一毫秒都不到呀。
4#
發表于 2009-12-5 05:11:29 | 只看該作者
何其 網友好!& D% X0 M6 t6 R+ P! [
.
; d8 i% P( ^3 Z  u4 b' O你用一下我給的延時看看還閃爍不?!
- q; J; j  ]( p3 a.
4 r# |7 i5 ]0 c$ m- S6 t1 y5 Gsyw  091205---05.11
9 e& E8 K& g5 t3 F0 R
; e' G( {4 `  W
9 T$ E6 q8 R, L( V. n& h, q6 Q1 s: j) b( P: ]$ Z
* S7 z3 B' `8 v* V
        P0=xsjs[xsjs1];
: V4 n0 U/ z$ H$ s& k         P1=xsws[8];2 f8 \& t: \) H  b6 p$ v
        delay(10);8 |9 U, p2 [1 V3 K8 [
//***************************** b9 y: Z) C3 [5 f" n( K5 O! I0 Y
    void delay(int x)& P  z) h! R" t; `" Z" N
    {# T5 V1 K# C- O: R) v
      int  y, z;/ _; w1 U3 P; v, Z4 g
        for(y=0;y<x;y++)
8 u/ D' K' K3 G! h, T+ i2 @  h        for(z=0;z<2;z++);) U7 l8 l1 A; u0 z
     }
5#
 樓主| 發表于 2009-12-5 22:29:30 | 只看該作者
還是閃,是不是這種程序里不適合if語句呀,我用除余數的方法如下程序就好了。- C# H& _/ j: I+ {1 f& K6 l- i( h1 R
#include <AT89X51.H>
( v; w8 K9 ]6 Dunsigned char code led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
( W9 y3 W$ h  J2 E0 Y/ rint i=0,j=0,k=1,a=0,js;. j& o$ J; Q$ P! v( w
sbit beep=P2^1;
' N, c9 F" r! z4 ]& r+ Ksbit P35=P3^5;
/ c, M/ I9 B* [( Z! q0 hsbit P36=P3^6;
1 N3 q& _5 k9 Z% tsbit P37=P3^7;) p6 {8 r9 E4 N( `2 D/ @
void delay(int aa)2 T9 V( Z4 y) s7 }7 c. M. t% |
{int y,z;: y6 |% [* \9 G) I( w" b  r
for(y=0;y<aa;y++)% g6 L  {( c8 _
for(z=0;z<60;z++);
; z0 F5 ~& i3 p  ]& i! ^}* ]; z: ?/ N+ S, B* ~

) @3 ?9 N- `& v+ P8 x. c) x0 Avoid main(void)
0 d; \' p5 l0 L" D, P& C{" j/ J8 b" y5 _
EA=1;
6 v; P& |! F3 V- sET0=1;
% G( o' W/ y/ |+ l# ^TMOD=0x01;5 Z* J& m8 G8 f" G% ~6 S
TH0=0xff;1 F$ x+ O. Q; a: t: n4 ]
TL0=0xff;" [# f# u. P  R* c
TR0=1;0 h8 O) l5 R) x8 _; h
while(1)
9 b( A1 w! c3 v1 ?9 E{0 v* U1 h. M; ]3 l: ^1 c. g; G1 Y
for(i=100;i>=0;i--)
; U9 `+ F' d. c7 r& Q{8 q/ U. F) p; w. W
js=i;4 \7 g! W4 T3 S
delay(500); } & v* E' H0 g; a4 W
}         }9 W2 l* Y; \, p2 ^$ h

2 d2 p6 {! f& k/ B. o; V+ n0 v; v6 A) v
void timer0() interrupt 1
3 `  Q5 F! R7 S- d2 G$ i{+ D) r* n+ P# c4 S& j# M  X
  P0=led[js/100];) V! p5 s* |* R4 M8 B
P35=0;) N! L* |  }' v' V2 Q
  delay(5);
8 L9 B5 w! O) X# L1 \0 H          P35=1;
+ G+ }+ b  W; r2 D, n3 n# ^- D  P0=led[(js-(js/100)*100)/10];
* b* d8 }, f/ R; O- r8 |7 XP36=0;
$ G; p8 K# H2 Q& q7 ]: N  delay(5);- \6 N+ R5 e8 j
P36=1;
( d2 I1 j' O+ }. E P0=led[(js-(js/100)*100)-((js-(js/100)*100)/10)*10];
: W/ W) h* U' N, aP37=0;
3 D' W7 v7 H! |. ^ delay(5);
0 u8 e" [4 T) T. V+ T& o3 O. U- q0 ?  P37=1;
" a8 S7 N) h5 v+ B! K) {0 b) J: z% D8 ]
6 H) o/ @  V1 e; I' [7 oTH0=0xB1;
" f: I& _! ~) n1 TTL0=0xE0;
0 |" H, E7 K1 \. Z) h! @
; R. r: C2 r# L6 d; y3 m}
您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規則

Archiver|手機版|小黑屋|機械社區 ( 京ICP備10217105號-1,京ICP證050210號,浙公網安備33038202004372號 )

GMT+8, 2025-7-14 15:00 , Processed in 0.075191 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表