EDA365电子论坛网

标题: 用51做一个0.00-99.9S的秒表 [打印本页]

作者: gaoxings    时间: 2019-1-11 13:52
标题: 用51做一个0.00-99.9S的秒表
用51做一个0.00-99.9S的秒表
& p7 U8 M' i  t) m  K- I; T2 k. x. g4 ?6 q" `0 V' S' x% f

1 k8 ^' P+ {! j; _; v; `8 z( C; Q#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
8 p& M/ P& ]" s0 v& F: Ktypedef unsigned int uint;          //对数据类型进行声明定义
. l! [1 V- t) Wtypedef unsigned char uchar;
0 E! M( \% h. q7 w! H1 y
$ }5 a: a8 |7 G& @uchar datas[3]={0,0,0};
3 A  e; n+ k$ ?* @5 zuchar code smgduan[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//显示0~F的值
4 }# @& E6 m7 U9 b0 s8 T9 @+ N, ?% Q5 A" b# d
, A* I$ U* P( p5 u: _  f
uint sec = 0;                        
  V1 `: o1 K/ Z! b) guchar i = 0;
  u0 o3 d7 C( H9 ?2 Euint count = 0;+ V3 f- H8 G5 n9 d
bit flag = 0;
# F/ D) m2 y9 S/ \, B, n! }
- d8 z, }( y" F* f7 Z
; x( ]+ S. W8 U$ r1 ~1 Rvoid Timer0Init()+ z, J( `- H; Z: z5 B, `! l, Z
{
8 I! d- ?6 y+ E- V! q. k! i& m- @! m        TMOD=0x01;//选择为定时器0 模式1,工作方式1,仅用TR0打开启动。1 {9 j) h+ x5 z' V- }5 X5 l
        TH0=(-2500)>>8;        //给定时器赋初值,定时1ms
: w% u5 a. `4 C% E$ Q: F9 u        TL0=(-2500)&0x00ff;        
5 z' w$ b( {2 y$ k4 o        ET0=1;//打开定时器0中断允许3 M5 T! i2 d7 x; H- g
        EA=1;//打开总中断
1 d5 ^9 ?/ B" F  h  @        TR0=1;//打开定时器                        
6 e8 m1 ~5 N- |' l3 N$ R4 z+ O}
6 D. g. d$ b* J' o; ?void jisuan()
. w2 {- k6 C! B" {# F2 O  N{
: q) t) A' `1 X, @$ G) v" B   datas[0] = sec%10;0 P: C, b9 W0 J. |
   datas[1] = sec/10%10;
) \4 v0 b& K  }4 o7 D   datas[2] = sec/100%10;
$ l4 Z. \$ F) t  H}
6 c9 [9 k3 @  Q8 U& y0 Svoid main()
2 I8 Y6 m* o; W  A9 r{        
* A" x5 `9 C  J/ l  j        Timer0Init(); //定时器0初始化
  H& C. \. d- z6 ?2 o        while(1)+ o0 B: n2 O5 m. ~
        {
! d3 r* {2 P6 ]% Q8 J' C1 k                if(flag)) q' D3 g2 W' @* z- @+ I  B
                {# s3 Y" N; Q  E+ [- b! V  I7 |
                    sec ++;
* |" ]2 Q; G$ x- n7 n            jisuan();
/ E% z9 c$ K2 d                    flag = 0;9 q; ~& f. c6 F! Y
                    if(sec == 999)+ v* s: c7 J/ i* _& M$ W" h
                   {# S9 }5 H- z! }3 U4 o4 b
                         sec = 0;
* ]- {& `6 S& @( c( w                   }
# e+ g1 p% J2 d+ d                }6 P3 m9 d: @4 E, n1 `
        }               
7 a3 X2 _5 K8 |% e}
# Y2 |/ f; V; D" x5 M" C5 _( ^+ {void Timer0() interrupt 1! U! f8 |( L+ t% |9 o$ x. I
{        3 _( H$ [# G7 m: [4 v: [0 m
    TH0=(-2500)>>8;        //给定时器赋初值,定时2.5ms5 g! z0 y) S; e3 G0 x, e, J5 u
        TL0=(-2500)&0x00ff;        / X" e0 ?! u+ N4 L4 I; e
        P0 = 0x00;
! W0 C+ [. b* A% ?$ J& W        P2 = i <<2;
$ d- J: g# J+ a5 v/ c( v: _1 Q    if(i == 1)         ) m# m# _3 q1 Z4 f4 V; K$ X8 k
           P0 = smgduan[datas]|0x80;+ G9 y( t2 ?9 h  \
    else- P; F9 A7 Q* h9 Q' @
       P0 = smgduan[datas];
1 k3 b. \7 k# z, z        i ++;
  ?* I8 ~' [" T! Z2 T" m; G* p        if(i == 3)
0 X% |/ O6 X7 o- ^, G          i = 0;
  [- \' _6 f3 f' H        count ++;0 I' J) X, U; K! q$ U
        if(count == 40)//0.1S/ `# e1 x$ w6 O9 ^1 f# `+ u
        {  P1 c6 \- l! A! E, I! d! r6 C
            count = 0;
! v! T9 G& K4 v# g            flag = 1;0 i: k. R1 J8 n& T7 P0 j- m; o
        }
! X2 J% W$ ]# }! g) M}
- S! Y- X) L3 s" H/ M3 D% L( P

作者: sunygd    时间: 2019-1-11 14:04
不错,谢谢分享
作者: th2010-gc01    时间: 2019-1-11 14:24
谢谢分享!
作者: gg0760    时间: 2024-8-10 16:47
一点下载都要搞个威望值,一点都不地到




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2