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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机多功能闹钟仿真加源程序
* e8 ~+ c7 z' }: r5 J( K/ `
: `# Z2 K( S3 z  s0 \* g6 W8 c% A+ d- S$ Y7 v* T, o% Y
1.时分秒的正常显示# P0 D* V; R0 ]& L8 U' r1 B
2.可单独调整时钟的分十秒& V) p- s( G8 G+ f7 |$ f
3.闹钟功能
' g" b+ U# t) Z3 T4,键功能说明4 k9 v/ d, t/ Q% B2 k4 W
second--正常显示和闹钟状态时调整秒位; R. f. s: x" M0 q0 @& N# ]
minute--正常显示和闹钟状态时调整分位$ T# w5 k4 d; ]2 ]; T$ u
hour--正常显示和闹钟状态时调整分位! m4 P. [# Q4 X# c6 L9 N$ J# k
alARM--开启和关闭闹钟功能(变量alarm_is_ok,1为open,0为close)' F1 D* A3 o3 u+ a, ^
stop-set-open-close
5 X; A2 D4 r. g7 R8 i5 G部分源码预览:
; A* K5 D- J8 V4 V' `" _* u; k#include  "Key.h"
5 y; [# h( R6 E6 h  D#include  "led.h"7 H' t" V- a7 J1 W- X8 c5 \
uchar timeSetBuff[8]={'0','0',LED_MODE_COUNT,'0','0',LED_MODE_COUNT,'0','0'};//时钟数据缓冲区
# o7 i$ S& G6 [- f; h+ _5 Puchar alarmSetBuff[8]={'0','0',LED_MODE_ALARM,'0','0',LED_MODE_ALARM,'0','0'};//闹钟时间数据缓冲区
; H! f# W6 y/ `8 i$ y, e7 x5 vuchar timeDisMod=0x24;                //001001000 ^( H& m8 m; [! @1 L: Y
uchar secondTemp,minuteTemp,hourTemp;
. v1 b( U7 x# c5 \; P/ Quchar secondAlarm,minuteAlarm,hourAlarm;7 y4 L7 P& @6 ?0 I0 \
uchar timer0Temp;, F0 z% j# F3 z$ @
uchar alarmKeyCount;                   //闹钟起停键计数
0 `' L0 @; Q2 obit alarm_is_ok;                       //闹钟起停状态 $ ?! D* m0 _/ ]- a( @
bit time_is_ok;                        //时间是否到
" ?1 i# `. z4 q$ E" [! ?* qbit inteRFace_mod;                     // 显示界面模式,0为主时间界面,1为设置界面
, N$ _; [" G$ t3 u3 i1 z/********************************************************************************************
* y& J7 v2 E( ^! A8 r$ X* 函数名称:定时器05 j9 B0 u9 T  S* J/ P& f' D! x3 c
* 功    能:定时器0初始化
0 r2 W; j4 ], z4 O* g% s) W* 入口参数:无
: Q  l  y8 l& L4 k7 k6 C2 d2 K* 出口参数:无5 {* ]9 Q) T+ ?
*********************************************************************************************/           $ `$ c; g0 M; U/ C# I
void initTimer0(void)                      //定时10ms
! O7 Z/ P4 `6 m& I4 O{+ h  ?2 z% D) R
   TMOD |= 0x01;                        //GATE=0,TR=1运行;C/T=1,counter,0,timer;01十六进制  , [# D+ ^1 R- s6 I
   TH0 = 0xdc;
; A( N/ \# Q" g   TL0 = 0x00;
4 R- j4 n! g* j; Q2 w& n   TR0 = 1;                                  //timer0 控制位,为1时启动timer0$ C) C% n7 u: B' _4 C* z
   ET0 = 1;                             //timer0 中断使能 $ ?) @# e. d4 E' H" V
}1 U& L& F0 N3 U- |4 ]5 }
/********************************************************************************************
7 L% ^4 O. D- n  Q" @4 |0 ^/ w5 [: x* 函数名称:时钟比较
$ L9 W% ]0 }5 @* 功    能:比较时钟和闹钟的时间缓冲区,只比较时和分! K. E$ E3 I8 I/ p9 W. ^
* 入口参数:无
! [3 M' ^. ?% H* L8 |$ T# P* 出口参数:无$ t% x+ j" a5 x) |" U3 E/ @
*********************************************************************************************/4 p, G" F6 V* n. U. [. b
void timeCompare(void)            $ w. {2 D( A. z
{1 I$ W7 |9 z  _
  if((minuteTemp == minuteAlarm) && (hourTemp == hourAlarm))" x! s* o5 g8 c" i3 r! F2 S
  {6 \7 }6 j1 h) i8 x
     time_is_ok = 1;$ Y/ V. Q9 i' ^& F- ]0 c
         alarm_is_ok = 0;
: B% N% l' B4 X$ w- M$ I* ~         interface_mod = 1;
  K; [! R. E, ~, `  e  ~  }   
7 k- N1 V$ ]" r$ K- F0 ?6 P7 L}        
8 F0 u: \, k3 _7 \. i* _$ I/********************************************************************************************, A! D7 `; ]9 b5 O2 y& H& p' y
* 函数名称:主函数9 g; |7 b1 d5 G" R5 r
* 功    能:调用并执行各个子函数
! h% x$ H. _( J& O* 入口参数:无
4 G4 b) \, h  ^' E' ^* 出口参数:无
+ d1 s) k) e# D*********************************************************************************************/
3 T' a! C, ~2 kvoid main()
- V2 G8 {. _8 B: [' t+ J; j7 w{
  b% j/ j: d. x5 S! C& M" ]% u2 I uchar keyRead;
8 `) e' a% L& a0 x: o& t$ s init_led();
* `3 v8 F1 o, E+ c" L init_key();4 r( d8 a' k" t  V4 r
initTimer0();
8 j" X1 j9 Y7 s" t* | timer0Temp = 0x00;$ O, T2 r% @0 N9 m, O
secondTemp = 0x00;) o- {+ m; `( H6 B8 i! C  ?
minuteTemp = 0x00;
# _5 N5 M  O6 x! p hourTemp = 0x00;
, @% M1 J- m* j9 T, Y secondAlarm = 0x00;& F$ _0 k' R  `2 |+ i
minuteAlarm = 0x00;
% G- W8 c. J/ }, a& @1 ?! q( v hourAlarm = 0x00;
- H! ^4 B: E8 P3 Q alarmKeyCount = 0x02;2 `5 f; O' L5 w. ]7 O% K" W) u
alarm_is_ok = 0;     //默认状态停止 ( Q" o) x5 j" }/ f4 M
time_is_ok = 0;      //默认时间未到 , |3 Y4 n" ]; ^
interface_mod = 0;4 `( U! [; k- j0 |
sei();8 z6 i7 c0 J. b+ R& f1 h
while(1)
! Z5 J; u- ^0 Q. G8 o) R {
/ q5 d( x- f  N  8 i) _% I, s; _0 G* S2 m  S1 O
   if(interface_mod == 1)
- k& b$ h5 a8 z. H     ledSweepDisplay(alarmSetBuff,timeDisMod);
& N/ O/ ^& P$ d4 a$ O5 t   else
* a/ `5 Q  r; i8 z     ledSweepDisplay(timeSetBuff,timeDisMod);
! U& O* J+ x9 T0 S' X" ?* G' h5 l  a4 g   if(alarm_is_ok == 1)" M$ B; o/ [3 ?5 d% x0 o
     timeCompare();
5 H, x# o/ C( W3 O5 N* S: e   
! E3 W$ |5 f: p9 {9 U' F   keyRead = get_key_value();
) \; S$ ^8 L; E" L* x! ]3 K$ f   if(keyRead == KEY_ALARM)1 q/ K- R9 S4 _, ?) Q- E4 q/ [
   {
  {8 @0 Y% @+ h7 q* g, I  V. u      if(alarm_is_ok == 1 || time_is_ok == 1)
9 }; L  D! ^) ?4 M          {6 P) m, K% I% A6 D( g- U$ Y+ P! x& ?
            alarm_is_ok = 0;
3 H, D7 W' A5 c                time_is_ok = 0;  ]* q% u; d6 s, J; B4 w8 x
                interface_mod = 0;
# P9 t, V: @6 N1 V3 @. {+ Z* X                alarmKeyCount = 0x00;7 K1 \5 I  Y5 j& r4 r& ~1 t2 X3 {
          }5 @3 z. B: ?$ R& |/ p; W
          else% z6 j2 v( r" O7 X
          {* ]% V9 [- B* y5 y9 r3 w# d
                if(alarmKeyCount < 0x02)
/ K+ Y: Q& @/ N& ^* _                alarmKeyCount++;+ R7 G6 B' @* y. n9 O
                else, J) r. C$ H3 I5 y
                   alarmKeyCount = 0x00;& D, Y5 ?+ k1 v/ ~0 y
                if(alarmKeyCount == 0x01)& I4 m9 U3 W' F% R+ R
                  interface_mod = 1;) ?: ?! w( V  X$ f  C1 F
                if(alarmKeyCount == 0x02)
: P7 f+ G; K0 {2 S; k& p; Z. k8 b                 {0 R9 J# x5 a  H) f( p2 e8 o7 [
                   alarm_is_ok = 1;
9 \. s8 R3 ^; q3 _1 S                   interface_mod = 0;
6 P* q% A. y9 ~- v( a4 y$ Y                 }         
: E# l; t+ O& c9 Z5 G9 x' V          }    ) _' ]# c7 e4 _  L( @5 t1 A6 t
    }
4 E) }* U1 G& n, u   if(keyRead == KEY_SECOND)
; J+ C9 s* Q5 l: y/ x$ s" |: Q   { if(interface_mod == 1)  e; X. x* i# l8 T, m1 P
     {' x  W: l/ L# i9 F$ v; ^4 ]. ~
           if(secondAlarm < 59)# B* @# j3 E  m: H
             secondAlarm++;9 q0 ~; D3 Z! y; y/ Z
           else
5 }' n- w7 K- m/ @+ L1 C             secondAlarm = 0x00;9 i* X! ~4 H: B$ b, ?% p
           alarmSetBuff[S_L] = secondAlarm % 10 + '0';
0 s5 j- `9 j6 [; W3 |           alarmSetBuff[S_H] = secondAlarm / 10 + '0';5 w* @) q$ R! J0 e
         }
1 d# r' A/ r" w6 w6 I     else * `8 n: k1 j9 {
         {
) ^% C- S, L, |& R3 E5 A( i           if(secondTemp < 59)& N. E! H2 ?7 \+ Q9 b* i5 n
             secondTemp += 1;
4 Y9 e/ {0 j  L; t& i! j8 J           else
) W; q( g4 @8 k8 q4 L             secondTemp = 0x00;. z. F/ g) c1 a
           timeSetBuff[S_L] = secondTemp % 10 + '0';1 l) Z9 ?" q8 c, U7 X
       timeSetBuff[S_H] = secondTemp / 10 + '0'; 2 n4 z" u* ^) {  `  \4 j  q0 c
         }   ( d" {# P0 S  J
   }
9 e- F1 [6 n( I, o   if(keyRead == KEY_MINUTE)
9 b/ {. a1 x6 n+ J  `   { if(interface_mod == 1)
. V( S, p, V! G& t$ M3 ]" k$ o     {/ i, ~2 H6 m2 d1 N, T; m/ H3 J
           if(minuteAlarm < 59)- T7 R8 R/ X+ g! w! [5 f# m
             minuteAlarm++;
# [& l6 {: b9 ~7 S. x- {           else1 p, M. [+ @( O6 a7 @
             minuteAlarm=0x00;1 b) }' u5 {/ H: X' J9 G
           alarmSetBuff[M_L]=minuteAlarm%10+'0';
$ c2 O; Z5 a! O; k5 J9 \+ E1 T           alarmSetBuff[M_H]=minuteAlarm/10+'0';
% e4 t. w7 \! O' }         }
! {. x( E2 t& N         else 0 Y+ l; o; C, T6 j; I. Z
         {% z3 q! m1 S* p- V6 b( ~
           if(minuteTemp < 59)
% D6 ^' d4 k1 s7 k4 m6 b             minuteTemp += 1;
$ `' _- v5 e( h           else
/ ^, \! d2 R) P4 Z; W             minuteTemp = 0x00;6 s. N: d2 A, X1 O
           timeSetBuff[M_L] = minuteTemp % 10 + '0';
  K: N4 {7 ]$ I: J  p       timeSetBuff[M_H] = minuteTemp / 10 + '0'; 5 S: d& q# R. i
         }7 ?) t, T5 W# c- }; x2 {
       5 O/ }7 d5 Q! h6 M9 h# \
   }# x! J6 g+ e5 d& X
  if(keyRead == KEY_HOUR)4 a$ |0 N+ G; ^% ?
  {/ c& L3 e- K0 s- o$ X
     if(interface_mod == 1)
7 O# r0 a9 F9 m! h& N- R         {; l0 h  ~% s5 L- w$ Y# ^& b# R0 `
           if(hourAlarm < 23)
' H" ~4 P- ~  W. F) A- G8 l1 x             hourAlarm++;( k$ t1 r+ Y4 M/ y0 v4 p
           else
) t8 l( x. l- O             hourAlarm = 0x00;
( o6 q8 S6 j2 I: m* }& G           alarmSetBuff[H_L] = hourAlarm % 10 + '0';
- s/ n5 f5 P' H& c+ Q+ l           alarmSetBuff[H_H] = hourAlarm / 10 + '0';3 ^+ }8 e2 Z, o+ Y# s1 g, `
         }
. @9 S5 A' g$ E         else : s+ x# G2 `6 K1 o' A1 q
         {
; ^8 M' a- Y1 b! Q$ E6 x           if(hourTemp < 23)! S' V. h( O; L' K1 `9 z- x. ~
             hourTemp += 1;0 w) r6 o' U8 W7 w/ [5 I9 J
           else
# _" z! U0 B: R' \) `: G) t             hourTemp = 0x00;
! I' w  p4 R2 v; I  l4 g           timeSetBuff[H_L] = hourTemp%10+'0';
8 w& a% ?" H. O9 Y7 c! s" i       timeSetBuff[H_H] = hourTemp/10+'0'; - U( K& A+ R4 z* |* D5 ~
         }
5 l$ Q* B% w# c- h      
' ]& Y4 M# S9 h4 }0 ~  }2 N+ C! B- r7 Y) r1 }( N+ B# f9 k4 G
   
6 O0 `/ |' B$ `5 v2 @/ d }6 D4 `0 M  m% V1 S0 ?
}
$ }9 u, i9 m# w% a. D2 e, s+ E7 {% V5 O9 a& Q
/*, */
/ e, Z0 f$ r  ?/********************************************************************************************5 w0 |3 C% i/ V- ], n
* 函数名称:定时器0中断函数4 g3 H7 x  j- T, r; @. {. N1 ^8 W  R
* 功    能:定时器0溢出中断入口处,定时10ms- A- j9 d' a5 e1 z5 ]# ^% V
* 入口参数:无
/ i2 f" d% N6 w: q& H1 i* 出口参数:无! U# b0 ^: R: Q( |6 Y4 ]
*********************************************************************************************/+ p- a+ ^2 ^+ W5 N
void timer0_overflow(void) interrupt 1
% E3 J) t6 r9 g+ b5 u{
7 K) i* e" s+ }( H6 V4 h( r   TH0 = 0xdc;; j: S/ D) O- a) a
   TL0 = 0x00;3 n7 l5 l, L1 M) l2 M
   if(time_is_ok == 1)            //报警
' ^( g, y& J( u- ?     WARN_TRUMPET = ~WARN_TRUMPET;
& z; l5 u/ V% `" ]+ h' W5 H% D   if(timer0Temp < 99)        //判断1s是否到 * o# g0 H& u( p# }9 ?
       timer0Temp++;1 ?+ b7 |3 N+ o" a" j
   else                            //进中断100次 ! h8 s+ {2 u2 u. L  b9 A2 v4 u" @
   {
- T% [3 q+ I" F7 p9 j        timer0Temp = 0x00;           
. Y8 ^/ M) P/ h8 F4 j" m4 }            if(secondTemp < 59)   //判断1min是否到          9 _/ s/ e' i  a3 F( G
                {, G6 j; q4 x+ \
                  secondTemp++;+ f& q$ Y( A0 @: o0 n" v; y  k
                }1 V9 d, t8 L3 T8 q) L6 L) C
                else# l2 n- h3 G; K! I8 E$ W
                {# l" k/ h1 j: A% y  d4 Q
                  secondTemp = 0x00;. ?9 \8 p  C) K
                  if(minuteTemp < 59)  //判断1hour是否到
% m* j4 s5 m( @$ [  v. j. W                     minuteTemp++;0 B0 r! U3 _$ i9 h3 _6 a
                 else
0 P8 v  Z: z6 K" \8 z! @                  {/ O8 P9 a  T6 s4 @7 a
                    minuteTemp = 0x00;
2 i1 S3 ]( ?5 R) D' H7 @                        if(hourTemp < 23)  z2 s6 W/ C7 |) W1 p$ T! w+ x
                          hourTemp++;8 f8 ^7 F2 }2 [3 Q1 x5 d9 `
                        else3 i& Y7 W, d' \/ K$ X
                          hourTemp = 0x00; $ ]% O0 _2 k( x# x. i% V5 l) e
                  }
0 H6 o1 z7 H  d1 o, t                }  
7 |- `5 k1 A1 B& r" \9 m) y9 V   }
) I9 A/ l5 k6 i0 x! W   timeSetBuff[S_L] = secondTemp%10+'0';$ l, E8 G: n! A0 @
   timeSetBuff[S_H] = secondTemp/10+'0';
( ]# O$ q9 ~. o) q2 T# {1 r   timeSetBuff[M_L] = minuteTemp%10+'0';$ }0 B5 v( b3 f( O
   timeSetBuff[M_H] = minuteTemp/10+'0';
2 U; ^' x% I/ |& m: w   timeSetBuff[H_L] = hourTemp%10+'0';  q8 j. F+ R* B. W5 U! C
   timeSetBuff[H_H] = hourTemp/10+'0';2 ]$ Y& s3 }  d$ @. r
   sei();
# w1 n+ G0 H8 a# |: l}
  X; z$ W, k- Y8 f2 ^& ^  I' v+ m) Q3 E" Y9 M" S! a2 _
: W& f+ r4 z+ v& Z; I$ i+ h
下载:
! p" o/ p5 F2 r* u" Y% R
游客,如果您要查看本帖隐藏内容请回复
( F. f+ u$ ~& d" E, s. e

1 m/ i5 K, M5 U1 w" V& J+ A
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 04:50 , Processed in 0.109375 second(s), 26 queries , Gzip On.

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

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

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