|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用51做一个0.00-99.9S的秒表
9 a7 r1 H- A* `/ Q3 Q; d/ v$ e- t4 F4 G; m- L: o
0 a( Q7 @4 t0 {
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
+ `% c" R6 F! |* H- z( utypedef unsigned int uint; //对数据类型进行声明定义7 i/ _- g6 ]" Q7 |% l
typedef unsigned char uchar;
" U3 S) e# f" q- l
' m$ x/ j2 E1 juchar datas[3]={0,0,0};
( Q; ^( t" l5 A9 ^, ~uchar code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值
+ K, k$ j, |2 t1 @0 d0 H
& ?$ k8 W9 I& k3 x# c! `0 C( u5 H1 f& }5 W" V# ^# d/ L& W- v
uint sec = 0;
2 H Y( X& d- Q8 r f- F# euchar i = 0; O* D4 ^" I' O( @2 k1 l
uint count = 0;% @0 W$ A2 a: F3 H' Z
bit flag = 0;
' h s/ I% W9 ]- N; Q% d% G
7 B% z& B! A5 X0 ^! c' U
- r2 L5 G& k" a# Ivoid Timer0Init()3 z- l. z; ~7 X
{ _: @% p5 o+ ~7 y2 h; d. Y
TMOD=0x01;//选择为定时器0 模式1,工作方式1,仅用TR0打开启动。
6 l# {+ p& u. b' J/ x) \$ a TH0=(-2500)>>8; //给定时器赋初值,定时1ms
3 [9 Y% M- Z! W/ |- @6 S+ k$ w! l TL0=(-2500)&0x00ff;
% |5 E/ ~7 l+ u4 \% A! ? ET0=1;//打开定时器0中断允许4 ] K7 w& w! T) f
EA=1;//打开总中断
2 p0 I- v/ @6 ?5 p' `% `7 G TR0=1;//打开定时器
+ j4 g4 B8 G" {' B' @3 \. s5 [}5 v' W2 Q& S; x" I8 @; K7 G
void jisuan()
9 l3 r4 O7 A7 w* k/ c{" m5 _3 D/ Y* R9 ~2 w* P/ E8 p5 U: h
datas[0] = sec%10;
' j9 Z6 q0 `4 b ~) { datas[1] = sec/10%10;1 j) g& ?) \* ^
datas[2] = sec/100%10;
5 v* i5 V7 c2 ^8 e X `; T6 S}! N- p1 E7 q+ T
void main()5 f+ s0 W3 Y% e9 k% J) o7 X
{ 7 f4 F% e6 N4 n0 ^* N6 C4 g
Timer0Init(); //定时器0初始化8 T; S/ d! c- D
while(1)
7 G3 v W+ r% ? V4 | {
/ D; a7 m6 y" X8 s( {+ W: T+ h0 n* N if(flag)
& S+ ^0 ^. E! N/ e {
/ o' i* B# ]7 Y0 @* [8 I! H1 ~" c sec ++;
/ a' ^# @ I* I9 Q3 V jisuan();) ?3 l/ n& B8 O' \
flag = 0;5 x: ]+ X7 D) ~6 R
if(sec == 999): B- ~) w( \# }7 u N
{
; q/ a" z* X' F8 O) l/ f3 t# ~ sec = 0;" e8 s0 o1 t. [; C3 g* ^" B
}
0 K% Q% Y2 z8 h6 c0 h7 \3 v }/ f( a7 w# [( n/ i% E* l& ^
} 6 E7 X! y7 U9 j$ @: O) B2 u7 K
}+ ^% O3 W3 x# U* W
void Timer0() interrupt 19 H) @. C9 p: x5 U2 s3 v- C
{ $ Q# k, A2 c2 `# U' f! l" G3 w1 [
TH0=(-2500)>>8; //给定时器赋初值,定时2.5ms
1 h( p. D$ h$ s* M3 r TL0=(-2500)&0x00ff;
2 b& f+ Z; n9 n3 d' Y- O/ m9 U P0 = 0x00;8 P9 D# C) U9 C
P2 = i <<2;/ h2 ]( p9 t) x; V
if(i == 1)
' j4 o0 c( V2 h P0 = smgduan[datas]|0x80;
' f4 h) Y) w$ O else
9 ?7 Z9 A! `. s P0 = smgduan[datas];0 e5 C# b+ i! K- U* J# K
i ++;
! m% j8 Z1 W2 q/ \0 R if(i == 3): K( Q+ W9 d3 j, T; i
i = 0;
8 e# G: V+ S0 J8 v count ++;% g' J/ H& i( @6 j; u
if(count == 40)//0.1S+ ^) P' O5 C+ W. o" n) P6 k
{
/ v3 a* x% g9 a) V: J& I count = 0;
$ G& m# q1 |, T- O& M# s/ V- J flag = 1;
5 z7 o4 b6 Y- w }6 @# I$ p" K6 `" \ d* V2 Z
}
3 l" ~& W2 h! e! Y' U/ F! T6 c- T$ U, ] |
|