|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机计时表proteus仿真和源程序9 w, u: u c K: g
) g( M) | e/ m) O: O/ H, A
c4 C7 n. [1 y O; L
51单片机源程序:
8 m" A4 y3 O1 _0 T//简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s$ s) R3 ^4 r; b! k
//单片机晶振选择12MHZ 0 b+ @+ l) m1 ?: H
//收获,定时器计算1us为一个指令周期,可以通过公式直接 求的所需时间
4 J- C. M$ @7 O//在数据传输很容易犯错误,因此要注意在草稿纸上演练 {% R4 H# ~+ `+ Y
//在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误 G: ~$ {9 I9 d
#include<reg52.h>
6 M! l" C# I. G1 i# Ounsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};1 ~5 h. \ r% u4 n. d. {) l
void System_Init();- V- `" |, g" o) J5 r+ Z$ N6 J! j
unsigned char flag=0;# g! O* a( ^( v5 ~& i8 E
unsigned int Timer,Time; , }6 G- S2 h3 ~! g5 d7 {; N- o
unsigned char Dissbuf[3]={0,0,0};
" n% t" v, `5 {' [# Svoid main()+ K4 r/ w3 s# m4 u: u
{) j% G5 ^* [+ I* R0 x1 L1 I
unsigned char i=0;
5 I* H% Y( h* p3 L+ \ System_Init();
# ^' D ?/ n- v/ z* f while(1); J5 F7 S" a0 t
{' z4 i+ F4 k1 ^. p
: I& z$ T1 B9 E# F, W
if(flag==0). \) v) O0 i: V) G# b
{
`; j# B4 l5 [$ e$ b+ m7 ? i=Time/10;% o& P6 @( @; @# ^; M7 b1 }
if(i%3==0)
, f: p3 g! M4 U6 k {P0=0x00 2=0xff 1=0xff;}
|) c4 b- Y+ f9 _. S/ Q. \* I, t if((i+2)%3==0)4 K1 h+ M6 A* y
{P0=0xff 2=0x00;P1=0xff;}, i6 q. m9 c; i
if((i+1)%3==0)
1 G! ?9 w" w* l+ J0 z# W4 C {P0=0xff;P2=0xff;P1=0x00;}
$ q1 J; ^! @* w" e5 Z8 O! Y4 ?/ D6 ]5 A }
+ w: s6 l: S% z2 w if(flag==1)
6 |5 k# D* I, U6 Y$ |" L, ] {
; R, ~( G& O" F! N i=20;0 Q3 T6 Y3 p$ q) F1 v
P0=0xff;0 R: C( Z/ N5 {, `5 m+ Z
P2=0xff;
0 y! ~6 |, K1 L% K3 E7 _- c8 x3 d P1=0xff;
+ W( g9 \" S6 r4 z8 l+ X: A3 e while(i--); y0 O. j H" J; F
i=256;2 w5 d/ X4 C6 U# T9 j! d1 c
P0=Dissbuf[0];1 i! V) N) C: ]; V3 L5 a
P2=Dissbuf[1];
& B4 |/ h7 A' c/ R- k& ` P1=Dissbuf[2];: ?$ u, v9 X: o1 [: `
while(i--);
! K# A0 Q c6 E8 B }
5 R! h. C x: t' I: d. ^% J }- I5 V! V L8 a* n8 k! M
}
3 t$ R0 p0 k' p7 ^7 q1 j, ^4 P0 |9 U1 s0 n( c8 r
6 s n: N; q/ }6 {void System_Init()
, n ~" F P2 q5 [2 F% E( { {& l& U8 l' j7 X9 U
, D: L+ W" d b/ c1 o o h( b3 S
TMOD = 0x01;
5 _+ [4 k9 H4 q3 h7 G! Y' h" m TH0 = (65535-50000)/256;
% H# M3 t m5 G9 j TL0 = (65535-50000)%256;4 V# s5 m) Q/ O# t
EA = 1;) X, ^9 I- \8 z! i; {" m& J& d! o. D
ET0 = 1;: P8 V2 m2 q w+ m4 i, k$ `
TR0 = 1;6 o5 _" g# C" A6 Y
IT0=1;
) P# T1 j& G6 P" ~# U EX0=1;: \( X2 o- f* e
IT1=1;0 [+ h9 \" }# X" y+ J
EX1=1;9 O9 p4 Y# Y) v) r7 e. e1 B% ]
}
3 Z& B/ D8 C5 }8 V3 a# @: U void into() interrupt 0+ n9 |: W1 S% f/ o; i9 G$ s* j
{% S! b/ ]) O8 _
flag=1;% C0 |% `: h0 Q. B- I% @
P0=0xff;
c1 Y4 t+ X; R8 {7 \ P2=0xff;
/ L& G. Y/ k4 u+ @/ r" ~ P1=0xff;1 S& m5 a; u. M
Time=0;% G% V- j6 L4 c2 H3 P5 i5 E
TR0=1;
" N8 l: S: `* D8 j }. O1 G f/ t9 q* B( u
void TIMER0() interrupt 1
5 |- p, H6 z! o5 w {
) n7 l7 S8 S1 m8 Y$ m TH0 = (65535-50000)/256;' A( g* v( V# E, {7 d, y
TL0 = (65535-50000)%256;
' X, g! X4 u+ H; P: D Timer++;
: h* k1 f$ ]/ x o7 {, Q+ T# [- f8 l if(Timer==2)9 H% I. B7 f! n" K2 G) q9 ]* Q
{
! N4 N$ W3 f4 P3 c2 A& B- g! D Timer=0;. g/ b4 l' C8 ?+ J1 m% f( t
Time++;' }/ @1 a3 q7 |
if(Time==999)! _) H: f7 }* a" ]" C" i6 E8 L
{Time=0;}
1 D& W! O. ]1 s Dissbuf[0]=M[Time%10];- P3 q3 w2 {+ K& e/ M8 A4 u
Dissbuf[1]=M[Time%100/10]-0x80;3 O, s5 \0 Z7 R6 ^
Dissbuf[2]=M[Time/100];
; P- Z0 p# ^) N' c9 Y2 x }
_; [- Z: H* e5 x5 F8 M! y" Y
- D7 A4 k' i& N. U- A! x7 h7 s1 C4 g2 _$ h
" y4 `" p9 J* m# |5 J' O# @& M! d: x/ Q' O; a* D B6 }
…………限于本文篇幅 余下代码请下载附件…………* |# i1 q" p% u& `
( b8 g; w2 o+ t# B
- Q5 ]1 ]% Y+ c+ k7 l4 x
. v( {1 j# {! F8 ]% E8 G
9 Y# p+ p" e3 O# G& R5 f+ I" y- f) c, ?/ H8 a2 y- k b( s
单片机计时表仿真工程文件和源码下载:
0 x0 b5 r5 R# H4 z" T: I$ v3 ~$ D- ]8 _ A
+ P! C3 u" a: ]% ]+ h5 g
_/ r. Q2 Z: K9 h; N' B
3 E" J# N* j* Q* n3 R$ T |
|