|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用51做一个0.00-99.9S的秒表
% C0 l+ a9 a& y3 H9 _& c Y5 S- I4 n1 n& g
6 y% b7 F4 X) t3 g, Z
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器9 b& q4 [2 ~/ O' x7 _0 N" \* p+ h
typedef unsigned int uint; //对数据类型进行声明定义
! _0 Q# ]- \* D' l3 j/ ptypedef unsigned char uchar;- j, ^" W) G1 Z1 u/ O
" c2 O3 P- d+ }# ]uchar datas[3]={0,0,0}; # ?4 W4 r' O, @. ]+ C! n
uchar code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值
" O3 G2 x* k2 u# X* P2 Y4 L0 \8 [# J
" E @+ D: O' |/ h3 z$ [8 R! j' E8 \
5 c$ k, Q. l& X) ~8 Y3 Xuint sec = 0;
( } Z& ?' _/ a/ f" ?9 b) e) Vuchar i = 0;
- g/ O5 ~' x$ G/ t2 N8 u' s7 ?uint count = 0;
! [: T/ _- L7 t# A* D$ Rbit flag = 0;% ^% x+ F, H2 l9 C+ o; }9 @
3 m2 m: a; n; L* O7 U) |* b' |
- m7 G( _. Y9 `6 g u/ ?* zvoid Timer0Init()
0 ?. B: L- G6 @- Q! d# s/ H{
* _8 L9 U$ _9 c. X- X8 o& k TMOD=0x01;//选择为定时器0 模式1,工作方式1,仅用TR0打开启动。
" p5 g5 P A+ H* I5 B% J TH0=(-2500)>>8; //给定时器赋初值,定时1ms
9 W$ t: R" g# L/ f* m$ ?, s0 T TL0=(-2500)&0x00ff;
7 _/ J9 d {' K$ V9 C, p7 Q ET0=1;//打开定时器0中断允许9 U. L m3 D6 Z. V9 \
EA=1;//打开总中断" T8 I& w) D- x& M& c% X' ]
TR0=1;//打开定时器
9 n- W: \) n4 J0 n}
4 L! D( e& i5 ]4 Ivoid jisuan()
9 |# J9 P1 p/ X& L/ H{
) E; t5 a0 q7 F; w! H, S3 d datas[0] = sec%10;
9 V. }$ I* O/ t* i$ ?4 ~4 R datas[1] = sec/10%10;
4 V9 W8 ]0 G( P) V1 Y% G' p2 y datas[2] = sec/100%10;
# w6 g+ x1 Y$ m3 z2 ^& r) X1 S- Z}7 h! t" K) w. [5 Q. [. j. n! L
void main(), j d: M; c$ n: H
{
# b }5 b! G6 } w; {& C Timer0Init(); //定时器0初始化
5 m, o# } }( e8 a" X while(1)1 h6 e' B) x1 H, J
{9 h [+ W0 ~0 }, R- O" i
if(flag)
) J/ _0 F$ D, |+ ~2 S$ a8 j {. Y" y8 W _1 y0 E7 j5 L% ]3 C
sec ++;
H h* E) m+ x1 _$ t$ [4 o jisuan();
$ [$ z& m+ O3 z! x9 X flag = 0;: `& @2 m% N- C" b
if(sec == 999)
$ h* X0 m) K' B/ { {
* H4 R* x# t9 M# C6 R sec = 0;
0 }$ x( m; L: S4 n: x3 Q8 e( |6 [' @( O }" j. a. |8 E4 e6 x9 N
}/ q0 ^% I, u8 i6 a" D/ o
} : Z7 u1 [3 O2 x0 p; i5 @
}
8 g* J. P) ~* \! {. L4 svoid Timer0() interrupt 1
* E! I5 s. C4 I2 |& S. i{
$ F+ O) R. w, J& m/ T; V TH0=(-2500)>>8; //给定时器赋初值,定时2.5ms
4 R" O7 a/ l+ U$ Q& c# X9 N TL0=(-2500)&0x00ff;
7 \. r: [3 { x- \5 N. S P0 = 0x00;! o0 f2 t7 ` }7 {( \
P2 = i <<2;
9 K3 B1 R4 S8 ?' t( V+ ^ if(i == 1)
% X) X1 k" K) O% g4 n& r P0 = smgduan[datas]|0x80;- H+ i: N" Y' I. J
else, W& M2 c9 H3 w3 t
P0 = smgduan[datas];
$ j; h# T( W$ a9 ^; W2 S i ++;
: o3 P, K: D" ~& I2 W) [2 q/ o if(i == 3)
" L# M9 C0 E; ] i = 0;! o9 O2 {$ x3 f; Q% Z0 ]9 g
count ++;
9 O- X; U9 _ t* E if(count == 40)//0.1S
' r" z; w, o4 ^. I+ w$ r; a. E {
! K9 u0 ^3 h' ]" R count = 0;; ]' x" Z0 P% e* x) y5 h0 B
flag = 1;
" |4 |/ l7 z2 k8 H }* P/ p; a' e$ c, a. q e6 V
}, A- m2 U' r) j
|
|