|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机计时表proteus仿真和源程序 H# V4 E5 t0 [) {/ ?0 t
. \2 J) s% q+ j( T p; D
4 I( e; O! ]7 G' ]7 s* r/ k51单片机源程序:5 u4 @2 E3 [- N8 b
//简易计时表,未开始计时时8循环左移,INT0计时开始,INT1计时停止,精确度为0.1s! [* d/ H4 ]( h' N# m# `
//单片机晶振选择12MHZ : a% u. D9 y! P' T6 y; b. q
//收获,定时器计算1us为一个指令周期,可以通过公式直接 求的所需时间* j/ y& l. \9 d# w3 F/ ^7 G
//在数据传输很容易犯错误,因此要注意在草稿纸上演练
$ Z# E0 v/ P: z) Q% k//在获得数值与运用数值时,除了必要的数据转化,尽量不要处理,直接运用有利于减少错误: C: }5 a& x8 Z$ M
#include<reg52.h>
- z" T1 R" f6 K% q9 b0 E9 N4 J+ zunsigned char M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/ {; E/ O" s2 X0 Q I3 s
void System_Init();, }2 o3 B t T \
unsigned char flag=0;6 K, M% {: }3 b+ O6 o& u0 X( u7 n
unsigned int Timer,Time;
9 Y. U6 d$ J. k$ x9 a: P# Xunsigned char Dissbuf[3]={0,0,0};
! v9 q* A5 l1 Y1 Y+ T8 T' ovoid main()
3 `2 s7 K" z3 ^! E# O5 g{
7 u ~, z/ ~5 T' S unsigned char i=0;
# M6 W t( C2 z+ g# [$ [/ p System_Init();
" V- ?. X; n `' @4 D$ C* k while(1)& B' G" R0 \* j3 h
{& l" J2 @' L, m+ D1 l1 y. c
6 c$ d( B$ C" h( j8 w
if(flag==0)
. a0 s* x+ k; m/ l { # X+ Y- l) A* S }" s4 E
i=Time/10;8 h% z! ~2 [4 i
if(i%3==0)7 a, q' d$ s' y7 T/ w
{P0=0x00 2=0xff 1=0xff;}" N) Z! u$ \- U/ D2 T( v. v
if((i+2)%3==0) N [( K& B4 |: B! l4 k$ |
{P0=0xff 2=0x00;P1=0xff;}$ r P6 P- A7 L2 Q/ a! b% s7 ?/ r
if((i+1)%3==0)
. `5 v' z* @" N4 B. c" v2 T6 b {P0=0xff;P2=0xff;P1=0x00;}
5 Y- H# w; M6 l9 `% @ }
& M$ B; h. F. P! e' ~- j& v3 v- j if(flag==1), N' y3 S; J: u- K' n M" u8 L
{
' I0 X, H: p4 V5 |1 N4 R0 h# q7 A* ] i=20;) h& J+ ^. }5 V
P0=0xff;
6 K0 j* {" m1 A; Z! i8 @ P2=0xff;
4 T9 @; p: e' r5 _5 j% E: V P1=0xff;
- u0 F5 ~, i$ _3 @8 a1 q while(i--);( z8 s S6 c3 k7 P$ A/ Q1 d
i=256;
; h, P0 `/ u& l2 [- g P0=Dissbuf[0];
9 ]* R* n4 A5 a. p P2=Dissbuf[1];
/ X* a/ U$ i8 X3 r! Y P1=Dissbuf[2];8 O% x4 d' u$ M
while(i--);
# I ]4 x4 D6 a8 O, n }4 g. w6 U! }- G. |& `
}
+ y8 D& y4 n+ Y$ g: v7 f7 ]}; E! L, C1 [+ v2 c0 W' H0 i# w
; W! J% ^) K4 [' L) z5 s
0 _$ T' w; m) G* O d# r
void System_Init(); p" n4 U: I# J
{
" W1 P7 }8 V* j+ c
% k& o k e) m9 E TMOD = 0x01;$ @$ i- ^( I4 W( h; i/ B- `& m; _ r
TH0 = (65535-50000)/256;
4 ~+ K- i# K* }& m4 k4 c TL0 = (65535-50000)%256;: H( `4 q3 b8 f
EA = 1;% N0 B- N9 ~; V* D t
ET0 = 1;
# x O4 R8 ?1 x9 r0 j TR0 = 1;, `& f4 C' @+ x* l+ P4 B
IT0=1;7 K) c; v; Z( C
EX0=1;' v( Y T! Y' r5 n% Y, \0 H3 v
IT1=1;
9 T" ^( u% z6 y0 X2 P EX1=1;
8 H6 t: T# r: ]% v }
0 B' @% t6 j' _7 \. J void into() interrupt 0
: H; q' T6 \' ], ?5 a" }4 Q, j {
8 y( \* r# ]% k2 p2 {6 C- |; G+ A flag=1;. J# K2 v3 E( I" t
P0=0xff;
) a% D9 |/ N6 A4 J n6 k P2=0xff;
2 V( r8 L8 G. I" A z1 b4 n P1=0xff;2 J- O% s5 Z/ P& p( m$ |
Time=0;2 h1 u' w$ ?3 X" _- d
TR0=1;% z7 j1 y3 G9 Z1 z
}
0 W c8 o* M! Q# w0 P7 ? void TIMER0() interrupt 1
" o* Y9 g" D- J/ R. [% J F$ g% h {
4 I& T2 G1 C( P TH0 = (65535-50000)/256;
! v0 H' ^$ y* _! }9 I4 O2 | TL0 = (65535-50000)%256;* _3 w+ G+ v3 C/ z
Timer++;- `( ?' K* F1 C% x
if(Timer==2)7 M6 y ^$ \, @7 ^
{
; U9 g$ x# R% r% U1 D/ Z Timer=0;5 L2 |3 Y/ I0 B& d4 W. v
Time++;
+ r4 R2 N6 r7 {& v- w$ F if(Time==999)
+ G0 q' O# z7 u; d# } {Time=0;}
9 ~& ]+ B+ j/ D Dissbuf[0]=M[Time%10];
9 |( u/ L, c( W5 Y8 X" X Dissbuf[1]=M[Time%100/10]-0x80;
' e/ U# K, {) H, K& Y3 K2 [ Dissbuf[2]=M[Time/100];- a1 R; v6 E. {! e
}
7 m% ^. F2 O% Z1 X7 s% Q
4 Z8 C- O% r- {' v5 ]4 _) \0 L' E1 J- M# S) {3 @0 s% d3 v
8 s! _) @4 `% ]8 m3 }4 {
$ ?4 a( Q8 q: f, Z6 I
…………限于本文篇幅 余下代码请下载附件…………
# t* a! E6 ], [# z4 U" y+ O8 ^! k) o( W% {7 T$ b& h/ l! @+ E
, h5 V/ Y! E" Z" A& w3 v8 k- Z - K/ c3 m+ W4 L) ~# q( i
( b- _9 f5 d( {! m' y
9 }; T- h7 G& Q3 ~* i* A% z6 N# B单片机计时表仿真工程文件和源码下载:
6 O7 S |1 W9 {' |
L2 }+ e. c7 @/ W, w, ^4 T
$ Z5 o6 h- ^% i8 N" K* L- \3 N; c2 ^" D I4 L; _6 G; \
( z6 b( f( S( x6 C! ?1 F8 ?% T3 F |
|