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

单片机多功能闹钟仿真加源程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机多功能闹钟仿真加源程序
+ o/ Z  h+ I5 ^4 p/ D6 V' w1 {6 C0 I, z

) O4 p' x0 d$ I  t' D1 ^1.时分秒的正常显示7 z0 Z3 D1 D( y: J& P
2.可单独调整时钟的分十秒
. Y0 A% J' ]- t( J" Y& o: E3.闹钟功能4 [9 W' N, l! W- W! E2 l  f
4,键功能说明  @4 V" d! m5 ]* h' o2 u
second--正常显示和闹钟状态时调整秒位# \9 K+ K. C9 h8 T* T8 ^7 h6 F
minute--正常显示和闹钟状态时调整分位
8 i7 `2 b$ ?& h( t& Z. f, D" |4 y$ \hour--正常显示和闹钟状态时调整分位! Q0 |9 D, |9 [* k# n& A
alARM--开启和关闭闹钟功能(变量alarm_is_ok,1为open,0为close)( y, a4 a* I- |2 u
stop-set-open-close: R8 `" L: R/ T
部分源码预览:5 L1 i( \' }3 _/ ]
#include  "Key.h"
& [4 G5 j/ N5 b+ I#include  "led.h"* N5 d: n4 F/ f& D3 o- U8 ]
uchar timeSetBuff[8]={'0','0',LED_MODE_COUNT,'0','0',LED_MODE_COUNT,'0','0'};//时钟数据缓冲区
5 _% E# z- u; }) R: u! D$ Xuchar alarmSetBuff[8]={'0','0',LED_MODE_ALARM,'0','0',LED_MODE_ALARM,'0','0'};//闹钟时间数据缓冲区
: {# t$ F9 T! l. H; |uchar timeDisMod=0x24;                //00100100
+ \$ q+ v" P, q1 Quchar secondTemp,minuteTemp,hourTemp;) `1 X0 m8 X; R1 e* t: p' Y: l3 H" k: R7 q
uchar secondAlarm,minuteAlarm,hourAlarm;  l1 L6 t$ @5 ]
uchar timer0Temp;5 e. `; A3 `& Z. J7 [
uchar alarmKeyCount;                   //闹钟起停键计数 0 n1 U9 J4 m4 b
bit alarm_is_ok;                       //闹钟起停状态 # H, d4 K9 ]7 W! V+ p
bit time_is_ok;                        //时间是否到
& E' ^3 O& }) h2 F1 P3 f2 xbit inteRFace_mod;                     // 显示界面模式,0为主时间界面,1为设置界面 ' k/ Y% b% W# a
/********************************************************************************************
" a/ ]9 r6 B/ Z* 函数名称:定时器0* C- f7 }* x" P6 O( y
* 功    能:定时器0初始化/ V1 Y' @6 `$ D* V+ }: y1 ?
* 入口参数:无
) q+ F$ Z7 ^# ]: C; B- i* 出口参数:无7 x' S' ]* D9 `5 S' [( ^9 q. t
*********************************************************************************************/           6 J' U4 X3 |1 V% l
void initTimer0(void)                      //定时10ms
" E3 a* [' m& ^; o4 w) ~{
5 t: @/ ?, P$ l4 @   TMOD |= 0x01;                        //GATE=0,TR=1运行;C/T=1,counter,0,timer;01十六进制  ! |7 @  B( G! w3 G4 r2 q: e
   TH0 = 0xdc;. \; F: j6 t( F+ ]$ \
   TL0 = 0x00;
# D2 j0 d# |- e2 x% v# F- o; ~   TR0 = 1;                                  //timer0 控制位,为1时启动timer0
8 t! e% u8 S0 x5 O% A8 v: a   ET0 = 1;                             //timer0 中断使能 ( w% i# _. M; g, A  K! d6 e/ T7 I0 P
}* \6 z; g! |! I
/********************************************************************************************
. V8 S$ ^3 U9 ]- `4 y* 函数名称:时钟比较
5 e, F& ]- e# U) H* 功    能:比较时钟和闹钟的时间缓冲区,只比较时和分  y7 T% S0 Z; q5 S& `4 a. U
* 入口参数:无
  s+ Q6 I+ G4 v* 出口参数:无
9 B# M: J5 O% E* A*********************************************************************************************/
8 X: v3 L6 `/ l$ Qvoid timeCompare(void)            2 {8 z% H; S# l* j6 S, [4 a8 P' `, _
{
* C( Y# }4 i1 s0 z7 T  if((minuteTemp == minuteAlarm) && (hourTemp == hourAlarm))
( R: r0 p! s* \. h$ b  {' P0 {, g  E5 }: ^+ a" c
     time_is_ok = 1;
/ K: `/ X. Q8 h         alarm_is_ok = 0;
/ K# p8 N6 @1 b% m( _         interface_mod = 1;
5 N% X2 i# q6 b' S' D5 X0 Y3 n+ I  }   
' X2 @! N% F; \# N}        
- }3 y6 [+ Q0 C/********************************************************************************************
% R. b- C& p3 X" k/ V9 s; Y. @( V" H* 函数名称:主函数! Q9 B5 F: o3 r. u3 F# ?) U0 J  ]3 \
* 功    能:调用并执行各个子函数, A# F7 I9 p. x, q2 c5 K1 P
* 入口参数:无
" Y; f( H6 F  L' X, c' p* 出口参数:无% j; W+ `$ s) }& Q, }& y- ~% j1 a
*********************************************************************************************/
! L4 U: }" i/ z/ C+ f& e1 A0 D4 E3 dvoid main()
" \& h3 x) f& r( Q0 e{% T! J( k& G& I2 V6 D# e4 V
uchar keyRead;
6 G+ C& |! z% } init_led();
! W- V( |7 z" O3 j8 B9 W" f init_key();2 a7 M9 n, {7 J% f
initTimer0();' u) m. }- j5 F3 H- L
timer0Temp = 0x00;  J" k% Q7 N1 i' ^
secondTemp = 0x00;
/ K0 @/ f/ C% m' ^, T8 G% _8 n minuteTemp = 0x00;, D; }$ h# }% e# g' M( c+ A, r  F
hourTemp = 0x00;1 @+ D5 Q1 t& J. x
secondAlarm = 0x00;
8 r5 d9 b7 l" L/ D: N/ k; B6 r minuteAlarm = 0x00;
  h* v7 m- g3 F hourAlarm = 0x00;
: B& q, }0 X7 o alarmKeyCount = 0x02;8 b8 O6 y. c" O' H5 I  J& d# \
alarm_is_ok = 0;     //默认状态停止 - K; `: q0 S) z* @8 ^! k/ r0 P$ `
time_is_ok = 0;      //默认时间未到
: W2 ^, w2 t3 W interface_mod = 0;: ]  b8 A) p% j. X
sei();  m# v+ O) J  a# P7 M0 }
while(1)
* K( v$ Z+ `2 _ {
" ?" ~1 Z* y' |0 Z6 Z9 V5 Y  
. Q& H. r. n7 A1 u4 ^; F   if(interface_mod == 1)
. ?$ C1 l9 s, {5 m8 Y6 J; U     ledSweepDisplay(alarmSetBuff,timeDisMod);
5 L: v: V) k0 d; n' Y( }   else0 }, x0 O  s; g/ ?( z0 M2 [/ t6 u
     ledSweepDisplay(timeSetBuff,timeDisMod);
* v; b9 m% Y- u   if(alarm_is_ok == 1)
# K9 ~( R% f5 O( `4 q     timeCompare();
$ B6 \' J5 ~' Z8 N   
5 J9 z8 K7 D7 l4 x0 `   keyRead = get_key_value();' c/ y" i6 H( L* d7 n
   if(keyRead == KEY_ALARM), Q' P0 a0 m& J% Q* ]# r) O9 T
   {
, e' L4 N8 x! q6 x; V8 |      if(alarm_is_ok == 1 || time_is_ok == 1)0 A+ M8 K& L/ A6 g6 n
          {+ E! Z% C- h# I) m, b) E
            alarm_is_ok = 0;
1 v! p! m, f% a# R" z% h1 s5 ~( h( c                time_is_ok = 0;2 ], |6 ~+ A9 ^' ?/ b( \
                interface_mod = 0;
( S3 }/ r0 U2 V- _                alarmKeyCount = 0x00;
  x8 ]5 e8 ~& M* R4 L          }& D3 Q0 Z# q( q  H- \7 u
          else
% P! A9 J0 n8 H8 r          {% u$ u- Y: N8 X0 h. g3 I* D
                if(alarmKeyCount < 0x02)* e0 N% b- a0 t' R6 o* B# K
                alarmKeyCount++;1 Y! b1 E( q, B: d* z3 F
                else
3 p/ p" }  Y; C# Q                   alarmKeyCount = 0x00;
+ J  ^: B. Q- s7 x0 e# L) {                if(alarmKeyCount == 0x01)
& }3 f+ o) m: W" p5 H- `* v. @# O                  interface_mod = 1;7 k) j' {$ l+ V+ c- E2 n
                if(alarmKeyCount == 0x02)5 y+ Q: f1 o' ~
                 {
" D- G2 [7 F4 p$ V                   alarm_is_ok = 1;
' q" v" _9 \$ G; w0 E1 x5 N                   interface_mod = 0;
6 T6 m, j$ U. ^                 }         
/ ~) d. [% `5 t& c% B2 u          }    6 Y, A. B2 |+ i1 p( c
    }
6 O  g; l8 T* J& t   if(keyRead == KEY_SECOND)5 f$ d! m7 x# s8 a4 e
   { if(interface_mod == 1)
1 G  i/ p8 ~' a  S  U- y     {$ t* N: b& g- k. g
           if(secondAlarm < 59)
: S8 d( c' ^/ n$ e( O1 }             secondAlarm++;
5 }$ n) D6 l# h) r9 i. f% Y0 E           else
# S: X/ U3 {; R" U. B             secondAlarm = 0x00;, [8 P2 {+ f2 J2 C( ?
           alarmSetBuff[S_L] = secondAlarm % 10 + '0';
& H: d* X$ g% p# C% n3 |           alarmSetBuff[S_H] = secondAlarm / 10 + '0';
1 e' @+ W+ t1 q. ?         }% n" O0 j0 L- E* x+ s- k2 [
     else
0 G1 S. p3 `9 z, ~2 ?4 `2 ^" r         {. \# {! g! A9 p5 v+ p
           if(secondTemp < 59)4 K& c7 D: x5 o% a! o4 M+ B
             secondTemp += 1;" j' A% F  @# b
           else
' M1 [- T3 y6 k  V: H% D             secondTemp = 0x00;
/ O/ a- ]# d% B* F( x           timeSetBuff[S_L] = secondTemp % 10 + '0';1 R9 O  S' Q" l1 n! \( G& U4 s# ]
       timeSetBuff[S_H] = secondTemp / 10 + '0'; 6 z5 K! L5 X% K$ f
         }   
7 [. i" p2 r4 n   }7 s5 `0 B# m6 Y7 Y( e- I% _
   if(keyRead == KEY_MINUTE)
6 Y" j1 s% F: W  X   { if(interface_mod == 1)$ q- f; G* W8 X' X  W+ j. q
     {5 {$ H* {& d' ?8 C( J" u- A7 E
           if(minuteAlarm < 59)
+ d, Q# K$ Y: |! o0 M! y             minuteAlarm++;
* y. A: l5 X! a# m( S. l           else- O% z0 M( g$ j' r. X
             minuteAlarm=0x00;
! J, l" y' m' Z% W* l5 X, F           alarmSetBuff[M_L]=minuteAlarm%10+'0';# i8 D1 ~% A! W" W6 F( R
           alarmSetBuff[M_H]=minuteAlarm/10+'0';
/ P! N: H  e1 u5 [$ h0 a         }& ]$ N9 _, Q; w; r+ A8 ?8 w0 k0 H
         else
" Z5 G. G& T( \8 r1 s0 f         {
* B. R* D; {8 n3 k1 A% O           if(minuteTemp < 59)
  R# @2 t- h3 Z8 h7 \             minuteTemp += 1;
# @# _3 V: u: c+ Z+ i% q           else
' B5 G4 B" x# {3 e             minuteTemp = 0x00;
5 I* i& K" A( e& `' S           timeSetBuff[M_L] = minuteTemp % 10 + '0';
- S) D; L. M" O" ]. b       timeSetBuff[M_H] = minuteTemp / 10 + '0'; + K) Y, w/ |+ u% R" t/ t# i- W  r
         }. J1 D( H" h. k% K4 D
      
9 {: R" V$ \  P' c* X4 j/ d0 V   }
, ~8 r5 m/ y+ m6 U  ^' @( A  if(keyRead == KEY_HOUR)
3 C8 C: B3 p. J( r% I: d" W; G  {2 ^/ T' j1 U9 d2 o6 t
     if(interface_mod == 1)- i8 h; C0 t& o
         {
( e8 M# L- L( B" n           if(hourAlarm < 23)0 y6 v9 M2 w0 W3 F3 r1 f9 a0 [
             hourAlarm++;8 N8 d: P" \$ X
           else3 @: A9 M& G  I+ _, H& Z9 w) D2 J: l
             hourAlarm = 0x00;2 I& d& \# W6 A  R4 d- p
           alarmSetBuff[H_L] = hourAlarm % 10 + '0';
" Z; b* g/ E" Q; q7 N+ |! X           alarmSetBuff[H_H] = hourAlarm / 10 + '0';" M% @; Y5 H8 t7 n% q' U$ d
         }# P9 U2 [& ?1 \2 \
         else $ d; m1 C8 v+ C
         {
8 \7 W. h; ]( Y5 S) F" q" N9 F           if(hourTemp < 23)0 e8 [  P& E8 g5 i% }0 q& `% W; ~8 H5 B
             hourTemp += 1;
* Y8 m$ C5 z; C' J* X8 `           else
0 x8 A0 O' c) s             hourTemp = 0x00;5 c& d; t$ s- V$ j* U: {
           timeSetBuff[H_L] = hourTemp%10+'0';
; n  s: F) P% H  K# c5 R       timeSetBuff[H_H] = hourTemp/10+'0';
9 R. V& \& t% ^0 d0 j         }
! G" s/ w! r, n5 |       ' A* g# D' u( A- c$ Y7 s0 h. U
  }5 N* K9 R; f. q7 g
    " r1 E4 e/ I; {  ]7 Y  n
}7 k. V4 L% d& _& R; F
}
% a5 W$ E. y! a% {  }4 z- N
1 G( U5 S% }# N+ F/*, */
5 h8 b$ p/ Q6 Y+ v: z/********************************************************************************************
* {7 \' v# g, G1 U" @# D* 函数名称:定时器0中断函数
8 u& |* ^) s6 H* 功    能:定时器0溢出中断入口处,定时10ms
( V( o8 J2 U: p$ `; s% A* 入口参数:无1 a8 }: h! j+ F) A9 W' L
* 出口参数:无. g% m% C$ Y, a& m: [7 x6 W
*********************************************************************************************/
4 k8 R% [0 Q$ O$ _void timer0_overflow(void) interrupt 1 9 w0 c7 M6 m( ~! P% r3 y2 c/ y
{
8 M# M* J7 w! p, p( Q9 I   TH0 = 0xdc;0 T. B) Y+ L7 @  m: w
   TL0 = 0x00;
6 @; Y1 Q( ~% z7 `   if(time_is_ok == 1)            //报警 . {  `/ l# {9 W+ h+ B
     WARN_TRUMPET = ~WARN_TRUMPET;: z+ Z. G2 m; E! c
   if(timer0Temp < 99)        //判断1s是否到
) P0 M) p4 R2 q  S# E2 _       timer0Temp++;
! a+ n9 j. y$ G   else                            //进中断100次 . f& d+ ?( ^# b/ v: M
   {% Z8 |; x1 C( o4 F
        timer0Temp = 0x00;           
$ s( X( {+ i9 v: S  p$ x$ j            if(secondTemp < 59)   //判断1min是否到         
8 {1 s' \* K' z* t                {
& Z. ^0 \1 ~1 s! y1 u$ J                  secondTemp++;
8 \* {  n/ _% [& B* L9 p9 [6 C) m. |                }  V, o4 c. e6 \: }0 L
                else
0 M% v/ n5 P) _+ r                {. M+ J4 V' ~& M. [
                  secondTemp = 0x00;& D) f8 h( E4 v' J" \& o% A) `
                  if(minuteTemp < 59)  //判断1hour是否到 ! x, Q( I; Q3 m9 b% D0 J
                     minuteTemp++;
# \/ M/ y" |* @6 T" |( X; J                 else8 |/ ]; K& u( A0 h
                  {
: V$ }( }4 [' M/ a! c6 s                    minuteTemp = 0x00;# K  D, l) ~+ w/ x4 j  {
                        if(hourTemp < 23)
! G, V! P1 Z9 m+ K7 a* F                          hourTemp++;
; b4 `( c8 c" |/ Z2 Y                        else
6 I0 e# x' H  Y& _7 C, f                          hourTemp = 0x00;
7 S$ l: ^6 R% I9 s7 m) R                  }6 o6 P8 {, Y: A: n! x
                }  * z" r# ~3 S8 i  F2 W2 P
   }$ S. U' `/ `% i7 |. _; t3 U
   timeSetBuff[S_L] = secondTemp%10+'0';( D3 N( I* k4 Z# [- N
   timeSetBuff[S_H] = secondTemp/10+'0';7 k0 r0 e6 L: H( U* M
   timeSetBuff[M_L] = minuteTemp%10+'0';
1 [2 V: ^' m# T" j- ~6 P   timeSetBuff[M_H] = minuteTemp/10+'0';* `) h# O4 @, |; |- u. A
   timeSetBuff[H_L] = hourTemp%10+'0';' w& R# W& Z6 v( l4 i! W$ ?
   timeSetBuff[H_H] = hourTemp/10+'0';
3 a; u( W; J2 o1 R$ F8 @' @   sei();. Q- W) [0 l1 [& {% i! ~
}
+ ]* ]1 V+ n2 g5 J+ N! K( v6 {8 u3 i" k, J* r: Y3 g
3 }- b7 ]: h% i' l
下载:% H) F+ e" ]' C5 A, @. ?
游客,如果您要查看本帖隐藏内容请回复
1 P% X& r. E3 Q: z/ K: Q

+ y+ f+ P' `& w: K5 t
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-19 20:57 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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