|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机计时表proteus仿真和源程序' K" w+ d- R3 W
' W, S* v- z- t8 S2 i+ L1 G6 w
! i! r6 ^' }. b/ o, t51单片机源程序:
}( X2 s: f$ n/ \1 S$ R2 P1 }* ^//简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s
2 p0 j! L# ^) F3 i+ O//单片机晶振选择12MHZ $ m: t" f$ T& ]% v0 w5 g
//收获,定时器计算1us为一个指令周期,可以通过公式直接 求的所需时间
/ k& x" k1 z8 }2 F9 e- ^5 }//在数据传输很容易犯错误,因此要注意在草稿纸上演练
* l4 o1 x; h; g" T//在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误
1 [6 M6 r0 y: ?5 }$ K* E: i/ l. ]#include<reg52.h>( k0 w+ k7 t- j
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
% C9 r7 k8 |$ p" d! R8 b2 @# G0 kvoid System_Init();
" u( |2 y9 t5 X0 J) O& eunsigned char flag=0;
9 L3 y! D. V. junsigned int Timer,Time; ) p. V+ B2 G( |! s8 d
unsigned char Dissbuf[3]={0,0,0}; 2 @# ^. E2 A% Q' S7 Q% {
void main()
- {0 X1 k \0 d( l. D7 X3 C{" Z6 G& d) x8 K- V3 e# P
unsigned char i=0;
( d; ]4 D% ^( F( C0 D( Q System_Init();& f9 B6 }6 e" ^( E" z. C
while(1)
2 w' F/ _ R2 W, b& F) W/ I {+ x) u, W' l3 u$ x H' I
4 W% l: P! L) D* U) g8 Q; L4 |( n if(flag==0)9 J7 K( F, _ P2 d* N
{
! {% ^$ `+ a" } i=Time/10;% f/ k0 p2 U6 N/ w# j
if(i%3==0)
+ y$ H8 W: l2 g3 C1 r" k {P0=0x00 2=0xff 1=0xff;}
) n3 b5 I7 W9 I+ m+ s d if((i+2)%3==0)
: i8 G( T3 y& V1 Q {P0=0xff 2=0x00;P1=0xff;}$ f2 y9 C6 ?3 T; ?4 y
if((i+1)%3==0)5 \+ R( B0 e! `& h' {. I3 \
{P0=0xff;P2=0xff;P1=0x00;}
9 l" |& l/ P+ u. M' ~7 g8 m }5 e& T: m# G5 n; B' B, |8 m) c6 k
if(flag==1)! n1 E* r. |: V% D, U$ \
{
# H i8 c+ y& D8 A' d# Q( j i=20;# \% G' q5 `: m
P0=0xff;3 ^$ S! _) v. Y" ?
P2=0xff;
3 Z. w& P7 b9 k P1=0xff;: o6 [' ^& S+ |5 ^( @
while(i--);8 B0 z ]5 D7 T! e7 ~; B
i=256;
& W: Y, ]4 `& r( S0 n1 A P0=Dissbuf[0];% \0 Y3 v: x4 [" [+ t6 \8 S J3 r( `
P2=Dissbuf[1];+ J: e8 `1 U3 s/ ?$ u6 V
P1=Dissbuf[2];1 Y" Y- M0 ^1 t- h ?; c
while(i--);8 A- i8 [1 c, R. p( e
}
" ^3 |, v0 h( y: l: Q4 \ }
9 H; V6 G- s& Q2 v}* j+ N1 W) Q* g
8 m& X" Q: ?9 A- P/ Q& ?' J* W( P; W e1 w+ g [
void System_Init()& ]9 w( i1 h! I# I6 K
{6 N [5 J/ ]' V
5 a V/ t/ \$ N9 H* ?9 J TMOD = 0x01;3 Q8 o" b t _8 |2 T* s
TH0 = (65535-50000)/256;
/ F( R/ r) Q+ W( a7 k4 p" ?4 Z) s TL0 = (65535-50000)%256;
( _% |. Y5 u& c8 H1 p: `+ v( ? EA = 1;& g4 z3 F- M: h2 c. V `" S
ET0 = 1;5 O* H1 {% y- \4 l7 E
TR0 = 1;0 ~0 N$ q; N: [' `7 f
IT0=1;+ l- s, D4 r0 z- }6 [
EX0=1;
9 X/ K! N( C" c IT1=1;
) i( h& G6 v* Q EX1=1;2 b) w! u# Q1 d( Y+ o
}) U: Z2 d! n6 ^0 U% @
void into() interrupt 0
$ q ?8 Z( h h1 w" B Q& z4 B6 ] {# N1 C7 J* O D
flag=1;
) D: u4 @, q) }4 X/ u8 B P0=0xff;9 o3 y; o$ a4 m6 E( I" Q
P2=0xff;
" X, [! L, a" ~7 g* z5 J P1=0xff;
7 B# a4 P$ A, e* U Time=0;
; r7 R8 i- I" [6 O TR0=1;
( r5 {% s+ `$ c. G }
$ F4 A9 ~9 k7 }8 @/ {! N8 N void TIMER0() interrupt 1
+ k; d7 v. [/ C3 A% \5 D9 T {
/ j) y+ p3 ]8 M' F+ _ TH0 = (65535-50000)/256;+ d8 ~4 L4 a! Z1 `3 }
TL0 = (65535-50000)%256;
, d4 ^ P8 _( g+ { Z5 |) O Timer++;
% ]9 ?4 k2 X$ Z! c7 G if(Timer==2)0 J5 y1 M* _ s) h' D1 o' a
{
1 `1 n3 N5 }3 c) `) `+ M* J Timer=0;
5 T% O* a% r: a( `( f Time++;$ B9 T) X5 ~5 o1 j; P& k4 N4 s
if(Time==999)
* i) H+ [ l/ R {Time=0;}, x, l. E3 }; j d4 ?! r
Dissbuf[0]=M[Time%10];
( E- P F) s, }) @+ g8 D' \- V Dissbuf[1]=M[Time%100/10]-0x80; d" v0 A( E+ k5 B4 Q# W
Dissbuf[2]=M[Time/100];; d: z; P6 [* }% \; {+ }8 J/ E6 \- w
}
# \1 |$ `' H; O3 A: J- f
8 j, A+ y) i3 m/ y9 \( ?5 P! r/ |" H' R: u
1 g; B! T, R3 ]" Z6 {$ Y, ]) m; h; ^. p9 l. `4 G
…………限于本文篇幅 余下代码请下载附件…………
' \; S+ W! k4 r! D5 s9 I
( `2 B5 l/ _7 d6 h6 a# L8 C, E3 t9 }2 V/ D, x/ f$ X6 h
: k M! A4 T) w& @
' J# G# o1 [6 @4 v* y0 K
, W) j% L/ R- z2 j( W单片机计时表仿真工程文件和源码下载:% D# I5 t" j5 ^* B# k: K
% W& [+ G" ?; ~- J! T# K \- [6 }
4 Y" A# `# ~2 B
) B5 x# K) X7 F" Q0 r" C
0 H' E4 z" M) q3 S0 K |
|