|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用51做一个0.00-99.9S的秒表
7 A. U, \& ]* A* P7 s; \' l4 w, e6 E1 m8 s, d6 D
7 f# G) g0 C# b
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
! S7 ^& W# g5 J0 X) atypedef unsigned int uint; //对数据类型进行声明定义. \" v) E, r& d9 ~& ?5 }
typedef unsigned char uchar;3 n5 f* ]+ D, f P- E
5 R/ W/ O8 t( n
uchar datas[3]={0,0,0}; 4 I: U: @# L1 D8 j
uchar code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值
" w9 b9 q: U! o9 T Q" o' J% B0 i1 z7 j5 A
+ u( H. ]9 [1 C! i4 f
uint sec = 0; 3 p2 r9 H: N+ n4 `% O
uchar i = 0;
: N5 X, }4 v, w- a, h' v/ buint count = 0; [- n1 |- G/ N! J+ r
bit flag = 0;
" A) ^$ W4 l% b) b8 V* X/ B: w+ F$ x: @0 w
3 }8 e) F A* @void Timer0Init()
4 o4 |; L& w) y{3 y5 v1 L9 r/ c2 q" \' }* C
TMOD=0x01;//选择为定时器0 模式1,工作方式1,仅用TR0打开启动。
' c2 B% C3 X- h) v2 {# `% M TH0=(-2500)>>8; //给定时器赋初值,定时1ms
* u# L8 l' V" u& Q4 x1 d2 ^ TL0=(-2500)&0x00ff;
) l1 u w; ]; i+ r; d ET0=1;//打开定时器0中断允许
" `5 r9 a. ^) A- ` EA=1;//打开总中断' \" q; s% Y" L6 ]9 m
TR0=1;//打开定时器 ( b" f) ?- ?6 Y9 t( @" l% [+ m
}
1 u) e) z: u6 w4 Qvoid jisuan()7 m" I( g" \. d& e2 m! c& _6 Y' c
{
+ w% F% V: Q8 X3 c& ^ datas[0] = sec%10;) B/ t& P9 A2 ?
datas[1] = sec/10%10;
) @& Y4 H& Y8 g/ V) a- _' H9 d datas[2] = sec/100%10;; y; y- j) M% O: v8 l& X ^4 c% c
}/ u0 Z A4 X1 Q, T& l
void main()! @6 T, y$ E7 }" |
{ ; A4 u( H- G9 ?( [- u1 M' @1 }7 r
Timer0Init(); //定时器0初始化
" N2 F- O; H* ^7 l/ H while(1)
) p$ u( B( |3 y: ?# H7 Y7 E$ c1 N {' U% e: _: @ I0 s& J
if(flag)- T; E! o2 W! X u6 v" H5 }0 K
{# w$ ~# I I2 C9 r2 a# _
sec ++;$ F9 g9 m g9 e% k% j6 d" n" ~
jisuan();
' u- O7 P2 W7 p4 A! ` flag = 0;" u' E- }* A. Z
if(sec == 999)
9 y' x" o' ^' V# g4 w {$ \! e2 T, S% x( M. E3 ^: M
sec = 0;3 L) t3 x9 k2 I' Y2 F2 e7 o
}4 N+ v% h/ H. [* z6 H9 O
}9 W1 w$ I' u$ H/ C" N" A @6 U+ ^
}
) S0 t7 B5 K6 e1 K: m}& x3 z K( L0 ^: F, M9 T
void Timer0() interrupt 1
6 l# `6 T ?$ \{ % b" N) {; b2 {1 Z2 A
TH0=(-2500)>>8; //给定时器赋初值,定时2.5ms) t4 g' t2 y& ]$ K
TL0=(-2500)&0x00ff; 7 n2 q0 c5 u" b* h, S5 x
P0 = 0x00;
- k4 o5 A \. r: b G) I* R P2 = i <<2;9 O$ A. { p4 Z, a/ C8 p4 p
if(i == 1) 6 _( t! L% T7 E4 _
P0 = smgduan[datas]|0x80;
, F) }; z$ j2 F' B. ]8 h else
3 y' t9 z- U. p% L P0 = smgduan[datas];
; Y y; M; g) G9 F( U% g! k! y i ++;
* @6 s& s1 M- h1 ?' I5 Q if(i == 3)
$ r3 W. P' m8 v( R* S9 T i = 0;
; k. Q6 f2 M6 ^5 P; i count ++;
: u H$ r( N8 G& R" E if(count == 40)//0.1S
5 P) x" l+ \1 w {9 I. A) X% Q0 L% \2 {
count = 0;) {# M" O( T/ w$ d
flag = 1;
6 F0 J) ?+ J: V; k }
k# E, `1 }$ B5 C& D( B3 l}8 F/ r+ c2 h$ H" E8 ^0 @
|
|