|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机计时表proteus仿真和源程序
7 f s- L3 F+ b) J, L( F% {: {/ N; M( B
' y* T' N" u3 o4 u6 h8 p" _
51单片机源程序:
- l2 o; Y& G. Z/ L1 k//简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s
5 Y% N/ O4 G: R; R5 w4 r, t7 _//单片机晶振选择12MHZ 4 e4 R8 q! i+ o# S9 R. k; T# n
//收获,定时器计算1us为一个指令周期,可以通过公式直接 求的所需时间
& D* z7 B/ r9 N. i//在数据传输很容易犯错误,因此要注意在草稿纸上演练4 L& \# L+ v6 z7 ?$ \
//在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误
. Q) M: B& a. H0 U* W3 e#include<reg52.h>1 p" d. w/ @# s# ?+ n
unsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
$ t% c& d9 O$ B4 V( f9 `. b ivoid System_Init();. C/ e6 Z( y. L5 d0 g
unsigned char flag=0;3 i) Z0 c9 `* y( z8 |3 d
unsigned int Timer,Time;
6 q6 @3 D, m: e$ M2 J$ Wunsigned char Dissbuf[3]={0,0,0}; 0 [' G! j! s$ f
void main()7 `: h/ A5 n" I8 t8 x, a# A) F
{- G& V& {9 I& _9 X
unsigned char i=0;
$ @: @4 E& V# Z% l1 k4 ` System_Init();4 O8 i8 V# Y+ ]7 r5 w
while(1)* X/ T' k0 Z4 x
{
$ d, {' C6 M- I1 I 5 z5 Y' l6 B h* q2 w3 d# P
if(flag==0)5 ^# A) }6 U& x# a! h( E# k0 q
{
# U# p! y3 r$ J6 h i=Time/10;& ]; x( u' S% O7 W9 Y
if(i%3==0)' g: d) s. v( |, ^6 G% m$ t
{P0=0x00 2=0xff 1=0xff;}) I8 |+ d8 g4 \* V" u& u
if((i+2)%3==0)% f( s v9 q3 u# Y5 I' S4 ^" L6 _
{P0=0xff 2=0x00;P1=0xff;}
7 s3 Y" ~1 C0 ?+ | if((i+1)%3==0)
. z5 g0 O7 h4 Y; R {P0=0xff;P2=0xff;P1=0x00;}
4 I3 w+ S2 _& g$ ?0 d }5 n0 M& V" g( i$ y
if(flag==1)3 l9 K0 N! `7 p
{
2 }9 ~- C" e* J% ^# X Y i=20;- g' E) v7 m- q2 a" z" i1 |
P0=0xff;
( {/ C* D' s9 S- ~$ T/ @ P2=0xff;5 l! ^0 s- [. _4 ^
P1=0xff;
4 K n' K; R. w& C* K: z6 w while(i--);$ u; ~- |, Q9 ~- [
i=256;6 C1 H6 y: b7 O3 D$ J
P0=Dissbuf[0];
Z- ]! c: f! F, Y6 s) G P2=Dissbuf[1];
& ?! w( X" f8 E- d% E% z P1=Dissbuf[2];& K5 v: T( D8 G+ i) t) J
while(i--);
) \& A" E1 Z. ` Q9 J }
* O" a+ g* o7 c- x4 O( t }
g8 K$ @" D" p( u) y}
* l0 u3 [3 A0 X6 o- @9 n6 L& I
/ Q' [* ], q2 f* `
) }0 B* F3 W2 G5 v9 k/ ^% ovoid System_Init()
8 Q ~4 D p8 i, C0 g {
1 x7 q9 X$ U0 e, x" z6 y 8 j# I# o( n9 S3 n7 ^1 m
TMOD = 0x01;
' ~# Q( H/ v5 X9 Z/ V& `* f- x TH0 = (65535-50000)/256;" I! P) w4 a$ U& _- q
TL0 = (65535-50000)%256;. T( S' Y5 p/ r5 W" U- g: |
EA = 1;
0 @% I; F) j& W* N ET0 = 1;+ ?$ L7 D J9 e. C$ z
TR0 = 1;
& E2 k4 R" _5 q! X" D. C IT0=1;
8 c U' }* n$ K, X EX0=1;
9 n) [: M+ S, _' n- g3 { IT1=1;
5 B6 |4 ?9 A1 s/ A EX1=1;. f7 l) z7 \" O0 `$ q4 K
}
1 u4 ]! D; F$ {/ X' y) i6 |# W! S- { void into() interrupt 0
8 y! p) q x7 n1 c {
3 U9 z, M! C$ H) s# R1 J5 Y2 p flag=1;
3 k$ |5 k) i7 r& u$ Q P0=0xff;
. I: a* h. H( E P2=0xff;
: ^! P0 a" Q v P1=0xff;
- K4 f- W: ?! n# L# h: ^; s5 r Time=0;( G2 G+ v3 R. [- Z- f, w/ `
TR0=1;3 u# {! a# Q' r' {) q
}6 R0 d& h- X3 ` R4 z8 X4 B
void TIMER0() interrupt 1
" i' d# S$ f" m& \) ?9 U5 ~ {; n2 A9 z: T5 }4 I. W! z
TH0 = (65535-50000)/256;" K" C, o: I% }4 Z: a) L" T1 x
TL0 = (65535-50000)%256;) z+ Z# k8 B: U/ ~$ S+ I
Timer++;! N1 Z9 L% ?% L- J" @
if(Timer==2)& ?% @9 p- c: e1 L$ X# r% q
{) b+ }' R& H! y/ R0 y
Timer=0;
$ M# g4 w# J& v4 R0 w$ \ Time++;
& E* }9 t/ X0 |8 L, y/ [ if(Time==999)" ?4 _! b& R" r' e
{Time=0;}
& D- e! w3 n7 j+ y$ \ Dissbuf[0]=M[Time%10];
8 C) n- `1 M! Y) w( z, [ Dissbuf[1]=M[Time%100/10]-0x80;) c( x: O0 u& f6 K- R
Dissbuf[2]=M[Time/100];( E8 k1 T: z$ L. P, p
}
4 R! _' s3 I. r% ^8 ^
~& [$ @9 A5 |3 H2 |+ `2 K9 l
( I9 j, \8 d6 O0 |! T. l9 i; }9 A- Y! P% \) k: | o2 I5 T& w2 I
" E( ~0 g: n0 g…………限于本文篇幅 余下代码请下载附件…………
- Z- l% R- _* k7 O9 t4 C% Y9 C) E. U# _+ d& v
- _1 V9 \2 Z; F2 l
1 g5 f* h4 ]7 a5 i% s
* a \5 r; a3 d% Y3 B
* r# w% O4 Q! m4 w K$ V单片机计时表仿真工程文件和源码下载:+ i% w) u5 e4 w* {6 V' @: M( y7 z
$ @; U, W6 _0 T Y2 P0 D6 e) U# N" i* K! L. g3 [
) p6 P1 t) C- C* p1 z+ Y/ i1 F; i9 I' [9 D* E" G3 `* K1 l
|
|