|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用51做一个0.00-99.9S的秒表
5 Y: o; Y" q* P! X& b* O# m9 Q0 \' N C* H! X8 T1 o9 Z( g
8 c; \0 E3 M1 C- ]8 W% K, c! A1 n: w
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器9 X9 M8 L4 l ~8 r
typedef unsigned int uint; //对数据类型进行声明定义( h' }% t8 [+ f& k
typedef unsigned char uchar;* U3 z: `) V: S+ @5 v) o. K
0 H2 L/ J5 z0 }
uchar datas[3]={0,0,0}; / y G) `/ C/ D7 l& F+ Y4 u
uchar code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值4 D6 G. a0 E/ U0 O1 o
* c; c& P. D' z& z( \# g
9 ]" t0 F4 ^$ q. {* Ouint sec = 0;
. A( V- l* e; R: O I8 [; d7 Luchar i = 0;6 d8 } s8 M6 _4 S; X! \4 S/ \
uint count = 0;3 M* x8 Q( v2 U3 U
bit flag = 0;, g$ Z$ O/ S5 w5 a' W
$ K" @( U/ V1 l' l4 u# {4 o6 D
6 o! l8 F# B: H4 {; a! d. L5 c
void Timer0Init()3 W- q4 j. {% X3 r+ q
{, P. d, T# T! c) J* P2 c5 p* j
TMOD=0x01;//选择为定时器0 模式1,工作方式1,仅用TR0打开启动。
/ L7 l6 A+ S+ Y* D+ I6 ? TH0=(-2500)>>8; //给定时器赋初值,定时1ms
0 m7 A3 A+ b+ X1 Q9 [$ r9 v8 z TL0=(-2500)&0x00ff; 7 g+ J+ g8 f4 G( O2 I
ET0=1;//打开定时器0中断允许
V* K% z5 ?2 I, G1 b EA=1;//打开总中断
; \- k1 ?: S# x+ ]$ R TR0=1;//打开定时器 % s2 o, ?1 w& U: _' Q/ ~( K
}
) F" H/ M7 t/ _3 v- ~7 ]( nvoid jisuan()
\: V9 D$ _# a) h; g1 t{
! b$ `# R) \* { p. S: Y: R1 e. V datas[0] = sec%10;
$ z6 g% A0 E X# y+ b2 a datas[1] = sec/10%10;
, J- ?- M; v4 i$ D datas[2] = sec/100%10;- X' J8 m! |" z
}
D: M2 M6 b( X$ U# Qvoid main()$ ? K! _) S: |. A3 v8 O! I
{ 4 u6 u) W/ q8 z
Timer0Init(); //定时器0初始化
: x/ r1 F+ g( X' J9 \ while(1)
7 m; z5 s3 j. [9 s; D% q9 i* s {
8 I0 B: G1 O' _8 k1 n if(flag) W5 g$ ~ h1 k2 |! X7 \
{
2 f: I" C, j+ Z( p9 t7 C) W sec ++;
/ C' c4 t4 n/ ]# f jisuan();
% S4 h9 K9 v& L2 j flag = 0; o* \) g, \# l8 i1 p/ w) b+ f# O
if(sec == 999)
- O( h5 a5 o( |2 |" J7 {! @* q/ R {
2 | g! z4 |5 o sec = 0;! d5 R8 }. o2 {% L
}
) m& X; h; F! r$ X' ~- _' {- O }* c/ e: z9 L( n
}
# T. }3 J. B3 c* [% T6 ?# n: O: f}
# A. \9 o3 d8 X8 h$ r* S0 ?void Timer0() interrupt 1) [. W( \7 r* Z( _# h( \
{ 4 m( H2 I# z. y1 n1 p3 G
TH0=(-2500)>>8; //给定时器赋初值,定时2.5ms$ y u: k" S. E- u7 {& v- T5 D
TL0=(-2500)&0x00ff;
5 n& ^, o {& I# ?# ~6 d P0 = 0x00;
1 c; `0 v) c! I P2 = i <<2;
+ X0 v' ~' b/ ?+ Z0 u7 o0 h if(i == 1) ; t1 I0 x: l; p. C' R
P0 = smgduan[datas]|0x80;+ T# P, C& {+ E; L# v
else
. F. {, f; W5 T2 K+ `: P5 o n& q3 s P0 = smgduan[datas];
+ Q/ a2 S; C& }. ?+ V i ++;' r1 D$ b+ I0 ~0 F
if(i == 3)
: D6 C# G* r, ]9 C& f5 m i = 0;7 m! ]% ~ D; R
count ++;' L( H2 c8 @7 b$ y' A' N- e
if(count == 40)//0.1S
/ l6 |) x1 c2 i. x: v/ z {
& x" h k1 H4 ], e7 @5 | count = 0;
! g; t1 q9 e/ ? flag = 1;) m$ y9 b2 {' D* a: L9 q3 f, m: o5 ]6 N
}
8 e9 {2 p, h5 O( v# S: Y0 B. m}
& b/ |4 j5 O' J$ Z o: p d |
|