|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用51做一个0.00-99.9S的秒表
2 j% X% r8 A5 q* x, K" E) C
( G# N! ~1 n' x- F
! k1 p, s9 R% ^7 |3 ^#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器! t9 t t! J$ M; Q: q8 D
typedef unsigned int uint; //对数据类型进行声明定义 G M. Z& M3 H1 t- y- F, I
typedef unsigned char uchar;
4 U( e7 q3 N8 z5 p+ }" u5 ~
: g# K! A: A; U: w2 `uchar datas[3]={0,0,0}; + G& T; ]& h6 M+ O; k1 a
uchar code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值6 u" F: v' Y- Q) }/ q F) v- k
8 d& b% P% W1 ^8 N' s$ C
* v5 L% {; _* q Y5 {( F0 buint sec = 0; 5 D) ^4 D4 C5 o' B
uchar i = 0;0 ~5 C; O6 o) E0 `0 {4 q" ]+ m
uint count = 0;! F' |; m$ }- n. d" @3 p# N0 c
bit flag = 0;+ M+ w8 N( Z3 g2 T( U: I
' ]# E9 Z3 M, X9 o6 i
/ Z1 R7 c- h7 z7 U& H6 Q
void Timer0Init()
9 n# D) L# v% L{( ^2 X5 ~* e9 @# a8 W, Q
TMOD=0x01;//选择为定时器0 模式1,工作方式1,仅用TR0打开启动。1 |; Y7 p! \, }1 F
TH0=(-2500)>>8; //给定时器赋初值,定时1ms
) I$ N' u" k' Q$ M# [7 p TL0=(-2500)&0x00ff; 0 [0 O( z+ M$ U
ET0=1;//打开定时器0中断允许
! a4 m5 d& l) g0 k EA=1;//打开总中断
2 o: @5 |" N, s2 G7 { TR0=1;//打开定时器
K1 X: z8 B8 r0 _+ u}
9 Y& E, j/ D/ t4 {' o% I" S6 g/ svoid jisuan()3 w/ z E9 p; p" ~. H
{( p9 x9 z1 A& ~0 j; V1 E/ W
datas[0] = sec%10;
3 l& e& a0 |! M$ |, T% B) H datas[1] = sec/10%10;) Z8 i+ G. f6 [. @% \ Q5 ?. H
datas[2] = sec/100%10;2 v9 a; D! X% \8 A P' ]
}
$ W0 A- V7 @- U/ Uvoid main()
& J9 D8 p" V# L, j. u) K{
1 d; ?- n6 p( I8 q" Z n Timer0Init(); //定时器0初始化8 \ f$ _$ S" G6 W
while(1)
% w8 C7 j8 I: C {, K# w7 G" m( v% A' {4 V$ C3 ~
if(flag)
& V( P( ?" M, b- b; i {
- s- r( a( F! a7 q sec ++; w" J: m5 O0 l- K( e! O9 N1 f
jisuan();7 I& K3 t+ K: k' \9 T7 @
flag = 0;) @$ y' p6 D5 [
if(sec == 999)
( a- D! O" D' g+ o1 c! f/ Y {7 Q; |. ~: A! [
sec = 0;
9 Q: o0 v7 G: [9 I' z) B4 G% X }
7 i8 h% s* x. e" l9 } }
0 T; c6 I5 \0 O. l } & R! U% T O2 x* b
}0 R$ J: ~/ k y c8 v) _5 x3 \
void Timer0() interrupt 1
- u- S. y4 A( H7 j, W$ [ {! ~{
, A8 j9 P/ ]( |- ` f R TH0=(-2500)>>8; //给定时器赋初值,定时2.5ms7 ~9 X V7 k: G! i
TL0=(-2500)&0x00ff; * \5 M0 I! x4 l
P0 = 0x00;
! K+ Y+ k1 e# s7 K- S P2 = i <<2;: _: O: f( M$ p* t# E/ q8 g) |
if(i == 1)
" B ]' ? q$ N$ H. e; { P0 = smgduan[datas]|0x80;0 p( e) w, g! i6 x) A/ m# ?7 a" U
else) K, ?5 l- J* H1 ]# P, Q. a# M
P0 = smgduan[datas];1 W: W% g# z) \8 c. o. ?
i ++;
9 N d) `" i/ h9 c if(i == 3)
& ~" Y s2 c6 U* d i = 0;
; `( w9 m% c8 M5 M, U9 B count ++;4 e* y- Z! G4 m( N8 J
if(count == 40)//0.1S
% @ f* K" r' C. Z, _ {% Z2 x2 h2 i+ m6 l S' Z2 U& A" p5 }
count = 0;
+ h9 F) d. \$ U flag = 1;
! |8 t9 h5 g x" Z. _ }
" a6 J R% P7 [. z: D* Q}' b0 a+ u/ g3 T+ _( A
|
|