|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机计时表proteus仿真和源程序
+ U) L. j. I6 n* t/ a) |, s1 M5 V8 \$ z2 D
& Y7 x5 W+ _: `# Q' q c& r
51单片机源程序:- _/ j# j* B# x, e
//简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s6 ]( b q d/ }
//单片机晶振选择12MHZ $ [, [1 K1 T+ R6 P
//收获,定时器计算1us为一个指令周期,可以通过公式直接 求的所需时间) \1 b, z+ z, B2 X$ ^% t
//在数据传输很容易犯错误,因此要注意在草稿纸上演练0 X7 T+ R ~% e+ I% M8 R$ V" {
//在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误8 Q3 c3 b; q# v; d7 ^
#include<reg52.h>, m, d" p5 _, @3 C3 H: _
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};- _0 Q& U; e) B* s
void System_Init();# A7 d+ g# ?5 a, }: {
unsigned char flag=0;* m7 f! ?6 T A8 G
unsigned int Timer,Time;
& y% ~6 D! y! x3 @5 Funsigned char Dissbuf[3]={0,0,0}; S4 B! I' U# h0 w1 u; x, R
void main()5 B% K3 A1 x/ {
{& P, ^( P- S6 n# r5 B" ?- B- d
unsigned char i=0;
( k& I8 M8 t; E System_Init();
; [1 [' h. ?9 E t# [9 k while(1)
! {# C6 a E# C( R% [ {
* p! u( q4 g$ ^( L2 }
0 g6 |( {! n s/ e8 E. h if(flag==0)
/ |, ]' a% ^- k6 u4 \4 {: H {
' G6 {" Q, M4 Q! ^ i=Time/10;) g$ @5 e; T& N( a3 F; t& _' j4 L) q6 @0 N
if(i%3==0)& ^' ?; q8 S: c. A( ^( h- S4 f. O
{P0=0x00 2=0xff 1=0xff;}9 U+ ? f5 G9 y6 \% w
if((i+2)%3==0)
- ?, l$ R1 _" i- L {P0=0xff 2=0x00;P1=0xff;}; m2 M3 Q t0 B3 q9 G# Y- ]
if((i+1)%3==0)
3 a1 \# C" X# v {P0=0xff;P2=0xff;P1=0x00;}3 ]6 W6 ~- ^3 B: b* h1 J9 n: @+ \/ I
}
* t& V8 O3 ^0 J8 R2 ]* C" @1 e& ~ if(flag==1)
* w' o9 d; F' I2 b9 E) q: v1 A0 M {+ i/ x* [$ g6 Q; F% V
i=20;
V: c" p& J" K3 Y/ ^9 z P0=0xff;! \( F: l- ~$ y
P2=0xff;8 v( m- i2 T9 Y* |' o
P1=0xff;
. J4 X1 \! L/ r3 J; R1 Q$ j5 @ while(i--);) C, l9 d9 `, A. _' v0 G3 F
i=256;
2 {& n( V6 d, K m l" `, g P0=Dissbuf[0];
' H. m& w# C" T( Q' a P2=Dissbuf[1];
9 F# C: t3 W4 W C! U P1=Dissbuf[2];, m# o/ C+ f3 u! ^
while(i--);' w3 w, l' F- F9 ^0 s6 H
}
! n2 ^: R" \. F# z; E }8 }1 D3 ^' Y/ S( B4 i
}' g+ P$ a7 F6 w, ~" `9 l- n4 V, d
7 D* E5 G/ G5 Y& q
& t" H E) b0 @. q$ j/ [+ I1 d' m& R8 Hvoid System_Init()
/ R& j4 z% V# F. Q3 D {0 [: X, a6 z$ f4 h
7 k5 g0 v) y: J TMOD = 0x01;0 I( ?0 R* x; F
TH0 = (65535-50000)/256;1 V. B0 k2 u! X& T# }! N. o
TL0 = (65535-50000)%256;: N# u# B; O# `1 Z* D% R
EA = 1;0 S+ ?" j+ [ G" g7 g1 P( J5 M* H
ET0 = 1;2 y5 [, j, w+ ^+ _, v. }
TR0 = 1;
! {# o- V8 q1 ^/ v( U; q9 t IT0=1;5 Y( {! e }3 I# I: V W$ ]; Y
EX0=1;3 H3 {; h/ t2 U
IT1=1;. q" A8 \6 ^# T8 w
EX1=1;* i1 [: s$ I* N! \1 A
}& X6 L4 j/ T2 O, E7 o% }; _6 b
void into() interrupt 0$ j$ h6 R' s' n h& k8 h) c
{
; P) M5 @5 ?4 u) v flag=1;3 Y, Y8 ^+ y" j/ y1 m# n/ I
P0=0xff;/ G+ b! Q9 \& S4 l3 c( A
P2=0xff;+ q1 Y6 U, s3 Y* X' _8 j" ^
P1=0xff;
% P: Z6 X6 v0 B8 _2 \$ R Time=0;& ?: i: M. ?; t h
TR0=1;
5 s$ x5 j& ^2 w7 ^ }
( f5 |) G2 `' h* k, d void TIMER0() interrupt 1
% g! j. v. v% M1 [$ c {- P6 t/ @7 c% L
TH0 = (65535-50000)/256;1 m8 H* A3 b* {- B" M0 b
TL0 = (65535-50000)%256;
' I: s7 O4 F( D Timer++;- I% j9 y0 ^# ?, }" L. w
if(Timer==2)
) o: c, V8 O- n {
/ c( j' D/ k1 A" \ Timer=0;9 A, R: R$ W" L4 Q
Time++;
. ^% e* _: n* ^4 T" X+ I6 [ if(Time==999)3 W: t* V6 l( F' b; |
{Time=0;}, k, o( t3 u' b
Dissbuf[0]=M[Time%10];. P/ N2 @7 M4 Q, b6 I
Dissbuf[1]=M[Time%100/10]-0x80;
7 Y2 z( P- D' x) T/ r; O, @ Dissbuf[2]=M[Time/100];
/ n/ x( L2 }% V7 N2 k9 p5 u }
) f* Z5 ] s( L( }3 j" l/ h! J% V# }- t; f/ ?* S9 Z
% ?) f! t* t7 d$ A# h
- _1 T7 u" L6 c2 c- Z
5 l6 X, B3 Y# q8 |1 b; l$ I+ n
…………限于本文篇幅 余下代码请下载附件…………
+ }$ m) e J, y8 K4 T2 e$ @
6 I$ h% {5 U# b1 ?0 F, d r5 M7 @8 b2 x& J: j6 K
/ h6 M- w6 t9 \' T. a5 c/ J0 B" d: t
! c! B# u8 s# C/ @* r2 q; @
单片机计时表仿真工程文件和源码下载:: Y8 t- o+ f2 N s
! Q1 W* N: @0 ^# o+ r% _; F7 q, v$ `, \" D
6 i; { K( Q& o
1 A$ d& ]$ v2 O |
|