|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用51做一个0.00-99.9S的秒表 m: _3 x0 \4 J: q
% D- Q# x e( S- N$ U$ Y2 Z$ N* T. Y& A% O$ |3 {9 d) Y
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
2 M$ K. |+ \$ P0 G4 Mtypedef unsigned int uint; //对数据类型进行声明定义, i6 M8 T B/ R2 F
typedef unsigned char uchar;7 O" U l% l% O
% U3 d. z" q/ fuchar datas[3]={0,0,0};
" Y8 ]0 _8 u3 a! ouchar code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值
8 V0 {% } b+ @3 T9 l0 N6 }& K3 @' F8 r! k( o: \
* p/ f& c: k& w, f
uint sec = 0;
7 a1 G' W- X9 w. W0 kuchar i = 0;
5 Z. i1 B. H- X1 Z% [uint count = 0;; i5 k2 l3 z- d N7 p! F4 ^
bit flag = 0;3 J! l6 a; L8 |, K) i
8 C$ b4 y/ P$ S( V' {
; H0 q, D7 ^8 Z! X6 uvoid Timer0Init()# U7 s$ [2 }! u
{
+ e/ I1 G1 n1 x TMOD=0x01;//选择为定时器0 模式1,工作方式1,仅用TR0打开启动。
1 x) y! G) z( ^+ l3 Y* y0 S TH0=(-2500)>>8; //给定时器赋初值,定时1ms" ?0 D4 r: I2 k& v5 a
TL0=(-2500)&0x00ff;
: L+ q, L/ y7 K& a# S# K ET0=1;//打开定时器0中断允许
, w0 U+ K" k# B1 A( c0 p! _ EA=1;//打开总中断; R4 H% O" j1 ^, c E
TR0=1;//打开定时器
/ z1 A- c( a+ W F+ @8 a) Z}
% i3 Z* N4 } V# mvoid jisuan(): I. P$ j2 s! z3 B/ X2 h9 G1 ?
{
* e6 v$ Q' `" ?1 ~ datas[0] = sec%10;
3 x4 z4 A$ U, Y. ?- i datas[1] = sec/10%10;$ z! ?% V* i5 _- x- o4 X
datas[2] = sec/100%10;
% n; u3 C4 U5 w: r5 { A8 O}
* W+ d/ d! [4 S/ I( b4 S1 avoid main(): ]( B) U% E1 p7 o
{ . j5 x6 D* C4 \% S, h1 @
Timer0Init(); //定时器0初始化
( u4 }7 L# ]/ W7 o while(1)5 [' v1 @/ L1 M# n: d- t" V* }
{+ w, j% q( U5 P2 v1 p7 z
if(flag)- G8 y6 {% w. Q! L8 d
{
- c+ V5 M2 q1 z sec ++;) Z) J, }3 w' z1 k6 a' a% v5 I
jisuan();5 K% }2 `) \; \. L8 P
flag = 0;
" w$ O. T& ?3 P/ o; x' ^! @ if(sec == 999)
& A L3 J. Q5 n: c8 [; K {
& C3 p, o+ R, }* o7 d sec = 0;1 _1 @0 t$ D8 n+ o- _9 l
}
* u/ v2 N2 F" y# }: m2 T) B$ C& u$ N# ^ }
' Q) s! }+ p' @2 j }
6 n% Y% ]" X) Y: g" `! e}
$ R* a/ }# v T+ {. H' Kvoid Timer0() interrupt 1
& X; w9 E( ?) j$ P2 {" {{
5 M! a# v* k& s0 N s TH0=(-2500)>>8; //给定时器赋初值,定时2.5ms4 v6 K2 f# G$ c. q- C
TL0=(-2500)&0x00ff; : o6 J+ a( Q$ u$ i- T
P0 = 0x00;6 v/ r* O5 L6 I3 i4 t
P2 = i <<2;7 K1 C: G6 _; g( Q; G+ i. G
if(i == 1) & ^7 S8 |- e5 v% S2 s; i8 v5 ]
P0 = smgduan[datas]|0x80;
8 z& F' j9 A6 C6 Y, o0 } else
8 U$ J) G$ _1 j P0 = smgduan[datas];
. K4 n6 g4 {$ N' c+ s$ d i ++;
2 {0 A; r, I1 d4 `; u+ m if(i == 3)' ]7 i+ ^% u* n, V8 t
i = 0;& i5 X) h [% H s1 m
count ++; G! w. _- |" o
if(count == 40)//0.1S
4 s/ l/ G" R4 x( a& Y {
1 F0 J! a' P* O4 P) a0 a: I4 ^; _ count = 0;& U- x) w" ~: b
flag = 1;- ]2 q- }' b2 L: x& y
}( I6 B0 p8 N7 t) M% A) G% f
}+ Q6 \! e) Z. y! |1 H+ y9 _- q
|
|