找回密码
 注册
关于网站域名变更的通知
查看: 2146|回复: 10
打印 上一主题 下一主题

单片机电子秒表仿真及源程序 实现0.01S~59分的计时 带3按键

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-17 13:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机电子秒表仿真及源程序 实现0.01S~59分的计时 带3按键) \: f" B. d9 o( ?5 r/ w
5 R9 X0 T. A+ n3 t" r1 o
/ O0 J3 O0 W" i5 l& r2 c
给论坛的朋友们分享一个51单片机做的电子秒表程序,带开始和停止和清除3个按键,可以实现0.01S~59分的计时。下面是该电子秒表的仿真原理图:- H/ K* R, ?7 T% a+ M8 s, k/ b; C

0 A( w  X" i! A" b" d
+ F. Y' k. J6 n- r; U9 k单片机秒表主程序:
/ k# [: k3 o# Z) z) F- @3 T9 N1 Q
/****************************************************
  y. Z( C6 z9 j) K*实例名称:秒表- a. v7 F5 i$ z* ~
*实例说明:本实例实现0.01S~59分的计时。按下Start键时. i$ U' c% Z) E" y# W
开始计数,此时按下Stop键时停止计时,按下Clear键时清零7 {1 \  v1 l0 g' Y, Y# X; d
显示屏。Start键和Stop键分别通过外部中断0和外部中断1来" ^5 M+ @9 I5 n* J  j3 t: q$ w
实现操作- l" `& f2 c4 ~
*作者:kxm
1 X+ T3 L9 T2 ?* ?' O/ Q# _8 g*时间:09.06.13
  K$ J4 e  A# q3 @( D****************************************************// e0 u9 M* P' N: o& E! ?# Y$ t
#include "target.h"
( ^9 m' C  U8 w- E" y#include "led.h"
) D9 ^1 b) F2 i( s1 ]5 \/*时钟显示数字区,从左至右为:分高位,分低位;秒高位,秒低位;毫秒高位,毫秒低位*/9 U0 r/ z0 c1 n% ?  C
uchar clock_time[8]={'0','0',0x01,'0','0',0x01,'0','0'};, R. C( [( b" E
const uchar displayMode=0x24;
: ^! H  R2 r% n- c- Jvoid main()( y! F5 S+ n+ M3 b
{
7 E! Y* `  }0 H  uchar i;
" V2 v" c8 W1 v+ x& h* W9 [# g  target_init();* u2 H" Y4 t+ e& g7 U1 s0 B  y
  led_init();9 L' o3 s' F, I+ C8 }% C( [
  sei();
: t1 X: \( k! A4 [' h+ F* l% W+ {  while(1)
3 k7 I# I9 Z  ]; f- w! T  {6 A7 L! r! ~# n, {; D9 {
   if(CLEAR_KEY==0), b$ G8 ?5 o  f8 c/ N- y
   {
8 b; O( W9 k5 Z/ E2 Y( Z     for(i=0;i<200;i++);8 m, e  X0 c. R  I$ [; G
         if(CLEAR_KEY==0)
6 ~3 Q* {  e7 p+ T0 f  V# S3 h         {
' S0 p; M' Z( K. L/ r           clock_time[MS_H]='0';1 _+ h! o8 e+ O# k
           clock_time[MS_L]='0';
1 W& @) [& w0 w+ c- u5 y6 ~0 ?           clock_time[S_H]='0';
' o6 Z* M$ V4 k( n1 }; I5 `           clock_time[S_L]='0';4 X5 @' t1 W0 ?3 J+ ], S
           clock_time[MIN_H]='0';
# {8 c' U# E/ B. a           clock_time[MIN_L]='0';
! M2 _. q- M5 ~( ]+ O. W         }
% q8 e+ U* T! `+ _6 H% s- B   }
  m) A$ F5 x6 n7 ~" x   ledSweepDisplay(clock_time,displayMode,0x08);
1 `9 \6 `) w  w, H5 z+ p  }
: I& q/ g+ h( b}
7 e/ F( K7 }3 x+ _9 N+ h: Q8 Tvoid T0_OveRFlow(void) interrupt 1 //定时器0溢出中断,延时10ms# a% E6 Z- B& v
{' M( E6 u9 d' L& f' L8 G3 A2 M: R
  TH0=0xDC;, }/ k- o8 c1 \' K, D
  TL0=0x00;- w' @" Q0 C) Q& c, c$ G$ r
  if(clock_time[MS_L]<'9')4 P4 a$ A* X, X) a
    clock_time[MS_L]++;
/ w6 l- x4 ]3 k+ e. Q2 l$ V2 I! w  else
! n% K7 `) x; W9 q( t0 y   {
8 s8 R3 ?0 i+ s1 ?( w( Y     clock_time[MS_L]='0';
7 K6 r5 o+ w6 J5 p         if(clock_time[MS_H]<'9')
5 a7 V4 w; s; N3 w1 p$ j          clock_time[MS_H]++;
' r  [& m5 @! L         else; B5 f9 n. M& B. X2 L- G
         {, g+ B* X* K3 G( @  a# |
           clock_time[MS_H]='0';
0 c- B- m" t4 S4 p9 b- H           ms_to_s(clock_time);
; M( X) S9 }, x$ O1 Q! F) {         }
% x+ c7 }3 Y7 x$ A   }
/ A) i% J. z+ y, Q! o+ l}
4 A' T/ g/ a  f, d+ Q, H3 t  w/ u% pvoid StartInt(void) interrupt 0          //启动按键通过外部中断0+ h: h. Y( I/ {2 {% u7 ?1 o2 ]
{0 G8 R, y& J4 V6 t  C+ ]3 r$ U
  TR0=1;
4 A, y0 n" x# g  f9 Q( D}. b) s& p9 N& h/ j( b0 f* v
void StopInt(void)  interrupt 2         //停止按键通过外部中断18 s5 g/ H( `. P  M
{/ [9 V* g9 P/ F) F
  TR0=0;
% J* r8 o8 g1 h) L}! b% m' ^9 G" C, X0 L2 p' P. U
; B, D  b& u1 B+ t# [! a2 y

" F& m) y- X  [6 h& P7 {电子秒表的target.c源码:
% P+ a2 L; L/ A#define TARGET_GLOBAL 1) \# Z7 e" L) Q4 f& t1 Z' w
#include "target.h"+ Z3 @; _; M4 y' w+ W+ q- r0 S
/****************************************/ R- f/ M1 ~2 l% h/ q2 V; g+ x
*函数名称:target_init(void): ~! T- }; q/ z% m( {- r
*函数功能:包含本文件中初始化函数和变量
0 S! v2 o# b8 j. L& K! a2 j9 L*函数入口:无
7 p4 w, w+ t, ]7 a' l% ~*函数出口:无% U% E3 R+ x0 k* k) d( t; @
****************************************/0 l( T8 N+ q% A
void target_init(void)
/ b$ I# l1 v  u' d" Z( u{  u/ U/ y2 x  [+ ?
  timer0_init();  //timer0初始化2 K5 x+ ~& I8 y2 C# `4 G
  int0_init();          //外部中断0初始化
( |8 {4 C5 ~) i( z- G  int1_init();          //外部中断1初始化  K- L) p7 {+ [; b6 [
}
7 `2 Z  M$ [8 b" n. L/****************************************# M6 F: X4 x- {! Q8 w3 f6 d
*函数名称:timer0_init(void)
2 J; V* [1 K& m6 P9 O- t1 E: B, n*函数功能: 定时器0初始化,11.0592Mhz晶振,# k5 q: a6 z8 [  Q2 _$ e* ~1 R
  定时10ms
; f  K( f9 v6 M% o*函数入口:无
; [+ ?3 K' j7 c7 S*函数出口:无9 [5 a% W+ i  I9 ]: H- E/ H
*****************************************/! r: e# n) E8 o6 E: @8 L" Z
void timer0_init(void)  4 x9 g0 J7 G2 Y. V& Y
{
6 _2 n9 d% n6 }: C$ y  TMOD|=0x01;    //MODEL1,timer% `9 D# C% u7 l/ B! U- G
  TH0=0xDC;             //定时10ms
; t( _  z+ @5 x- G  TL0=0x00;
8 e# x! v) ]/ y  ~9 W- ?( E+ l  ET0=1;             //中断使能* z8 ^1 M$ |" a' n! d( H# r
  TR0=0;                 //关闭定时器06 ?! u* T( n: k6 q' M) p7 L( o3 S4 d
}
2 f$ Z. K1 J1 `3 U) e4 g, g/****************************************
( O1 H4 k) @8 o* ?*函数名称:int0_init(void)
+ ^8 C9 z: G2 z' X*函数功能: 外部中断0中断初始化
  a# p  y" G+ B9 i! Z, g& ]  q% O4 H$ p*函数入口:无
* M* [2 S; b0 x0 }; K$ {0 r* W*函数出口:无
+ w1 p+ @  `4 {$ q4 R*****************************************/- e$ ~( b3 X- |0 _) S
void int0_init(void)
  o* i7 V9 \. Y7 [9 |' V{4 r5 z; A) S8 k
  EX0 = 1;         //外部中断0使能2 r8 N7 x" N+ f; \" B, r7 M# D, [
  T0 = 1;         //外部中断0跳变中断(下降沿跳变)% i' {* t7 L% q& W6 s2 K4 H8 t
}
: U* |$ B+ J6 u/ s& _2 o/****************************************
. d% t4 ~" r. ]4 d; N; c6 {! @9 I*函数名称:int1_init(void)+ _4 |1 m% f  [; H+ [+ \
*函数功能: 外部中断0中断初始化
9 g- ?, F4 w4 x& H, e9 i*函数入口:无$ a0 O4 B* M3 E- K% V; Z
*函数出口:无
2 h$ {8 c4 h2 d3 L6 \1 C: d. K( i) d/ h*****************************************/
' `1 z- Q1 R) I, q8 Y' {9 v6 Hvoid int1_init(void)
% O" v7 c# ~( F" `# e0 e( b3 s* ^' A{
: O) P, ]1 F+ q7 c9 l  EX1 = 1;         //外部中断1使能6 e* Z+ D+ {) I8 `6 ]
  IT1 = 1;         //外部中断1跳变中断(下降沿跳变)
  S- m' h2 z9 y3 o}
6 ]9 v, l6 a7 p7 e. `( [$ ~/*******************************************
9 q7 o+ j3 n5 a, E( S*函数名称:ms_to_s(uchar *clockS)3 R: \, P5 Q7 u
*函数功能:实现毫秒级向秒级进位$ C+ y9 E* T( D$ N" `5 A6 q1 z
*函数入口:*clockS,指向时间数组的指针
8 W( ]& p; v& z$ _+ B3 T, c5 T: V*函数出口:无5 ]% G7 k" _0 C" T% e# T) P
说明:说明:毫秒级和秒级计数均为两位BCD码,4 m9 j4 |* _( _& A
毫秒最大值为99,秒最大值为59
& {8 O  X- H2 f7 z*******************************************/4 J* e6 F0 h9 O% ~2 I. b
void ms_to_s(uchar *clockS)     
; S& g- E" b0 v. m- p{$ W. p& G. H- h- J
  if(clockS[S_L]<'9')
/ W* U* c* ~5 z( q7 V$ U0 Y    clockS[S_L]++;
, H: ?4 x1 A  t% Z1 O  else5 _) |9 }) Q# ~* N4 ~" X
  {: U+ D$ ?) U' Q: A
    clockS[S_L]='0';7 D! @; o8 H- c& }# F& m/ R# b
    if(clockS[S_H]<'5')
7 V! [9 k. {0 n8 l4 H* N5 v8 Z         clockS[S_H]++;
+ x  ]  I7 z5 i' u4 R1 o; g# @% N9 }        else
9 C! G/ F3 F! b6 f( `' ~# S, ?        {
( E2 k& V& E' S9 b2 r, V9 I. X          clockS[S_H]='0';
$ y. D! K* h2 [; Y          s_to_min(clockS);3 W0 o9 r# Q- ]
        }
* ^; U& w. c# Z# |' O1 ]6 Q6 H. |  }
. A1 a, N' R7 V. _}, u$ U" ~9 N7 {7 k4 W! `5 Z
/*******************************************
" I+ F6 j7 y9 ?; D( f*函数名称:s_to_min(uchar *clockMin)+ y8 ^6 ]# i! b! Z4 ~, F
*函数功能:实现秒级向分钟级进位- @9 k- ]( g, |7 x
*函数入口:*clockMin,指向时间数组的指针/ m% @  E* j3 A( Z
*函数出口:无% c: P. T5 }* Z% t& X
*说明:秒级和分钟级计数均为两位BCD码,/ B/ y# L3 k7 F
      秒最大值59,分最大值99
2 y) Q% u! D  F9 n2 u0 x*******************************************/
5 Q$ O$ F4 }4 S% H8 w: avoid s_to_min(uchar *clockMin)0 V: h! Z$ ~8 Q2 d. r
{
3 s8 U  I, X6 ~; F  if(clockMin[MIN_L]<'9')
6 _1 H# p7 E0 p# V  G) W- r    clockMin[MIN_L]++;; {9 w$ o$ p0 `6 f  e3 y
  else
) _, T7 T  m8 S) `4 N  {& D2 l& }! v8 D/ t
    clockMin[MIN_L]='0';9 `5 ]& @, X. `
    if(clockMin[MIN_H]<'9')0 I2 C* H3 `  q) k& \
         clockMin[MIN_H]++;% ^8 e$ C: R  M3 m
        else2 _5 l% z# g4 b" n4 E' L5 T
        {0 g& u8 T  z& b% i
          clockMin[MIN_H]='0';
& A! Q4 `9 m$ D( y( w        }
- l3 {, a) Y) i1 O4 q- _0 S  }
4 |7 y3 j9 b+ U! y6 j$ e}6 _" o! v- U' s) p' @7 Q

9 B, V; S+ y3 t3 h. C
- H6 w/ ~! Q$ |4 m仿真工程文件和源码下载:1 j% N8 g9 \9 O; S9 E+ H
游客,如果您要查看本帖隐藏内容请回复

1 I9 k: p1 g1 V' ?1 R7 N& b. `/ e6 ~6 e. z, D* U3 ^

! T/ E& M6 k2 m8 @6 ?; g7 C) e7 B

该用户从未签到

4#
发表于 2019-11-24 20:37 | 只看该作者
需要!非常感谢
5 p* I) A2 H# }8 h, k

该用户从未签到

5#
发表于 2020-5-21 10:34 | 只看该作者
真的很棒,写的很细致

该用户从未签到

6#
发表于 2020-5-24 12:29 | 只看该作者

该用户从未签到

7#
发表于 2020-6-8 21:04 | 只看该作者
多谢分享                   , [0 I1 U+ @! i5 y

该用户从未签到

8#
发表于 2020-12-15 22:24 | 只看该作者
厉害呀,大神。。。
/ G7 a+ n9 o8 R5 N

该用户从未签到

9#
发表于 2020-12-16 09:11 | 只看该作者

该用户从未签到

10#
发表于 2020-12-25 23:43 | 只看该作者
感谢楼主分享

该用户从未签到

11#
发表于 2020-12-26 16:51 | 只看该作者
:):):):):)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-24 20:07 , Processed in 0.109375 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表