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

单片机数字闹钟仿真(自动值班打铃系统)

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机数字闹钟仿真(自动值班打铃系统)* z' O% }/ p( k' M

5 K( \) U( n, Y2 y# e
3 v: R5 C3 T( D4 D! o

( u( t8 X5 m8 p$ h9 |8 u( y" J2 N- l6 c3 Q0 V- a& @: h& I
& `0 C- g' M# L- N$ h. l+ ^. }
单片机源程序:
) G1 [* ^, ]) x#include <reg51.h>
( o( W  I) p% `- r#include <intrins.h>                                                                                                                                                                                                                 0 a$ ~! o+ q: s/ p' u# l0 o6 |
#define uchar unsigned char                                                                                                                                                                                                  s' o) h& J1 P3 @  q- n) S- Q
#define uint unsigned int , M2 g/ G' d% v- V5 d( X' N; ^  d8 g
uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阴极总段//, a0 s1 K: S( Y0 a( J/ ~  t" a5 R
uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xff,0,0};//时间显示时-分 模式
2 b* O. t7 V  K) ]( [+ huchar DSY_BUFFER1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //模式显示段//8 }6 r, i6 J* K( \' e& U' c  i4 b  v
uchar Scan_BIT;//位选择//
; E1 m/ z( u) Y2 G' w( Z0 huchar DSY_IDX;//段选择//; R. r2 M& D# l
uchar Key_State; //按键控制//2 y2 `4 Q$ B* _, a/ o- j
uchar s,s100,h1        ; * o! c9 y! i% l( C& {
char  h,m;8 E4 ]5 B7 U: Q1 H
sbit dd=P1^7;        //喇叭和led输出端口//
$ R. v% T+ \& [  I# b- k! psbit cc=P1^6;. e9 V, x3 \( h4 h  t. d- b: `
sbit ss=P1^5; //时间和秒转换显示键//
% l$ N9 L8 Y0 n8 Yvoid DelayMS(uchar x)
6 F2 N5 W: p3 w; z8 o: A{7 F( l& q. d, I, Z# |
  uchar i;
0 V) Q2 N7 h% \0 m. D  while(x--) for(i = 0;i<120;i++);
7 O* _- l4 l7 |# w6 c4 `) P; L  }
! d$ ?5 j# s) h* Q( P) C+ y7 A1 bvoid Increase_Hour()
2 W7 o% z$ h8 ~* g7 m8 M0 K8 C  {3 q* c7 ]+ F& V- r) e
     if (++h>23) h=0;
* k: y0 E% {5 ~/ O         DSY_BUFFER[0] =DSY_CODE[h/10];
# Q$ l9 V5 C0 A1 S         DSY_BUFFER[1] =DSY_CODE[h%10];
0 X% s; B$ P& j! c5 y) \         }6 n' r3 P* d3 F6 p' W% o( p
void Decrease_Hour()
8 E" M7 @2 z0 {6 c' F  {         h--;; K' x: b) B& w6 S6 L6 ?# w
     if (h<0) h=23;1 m! j( k' K$ t0 b, Z
         DSY_BUFFER[0] =DSY_CODE[h/10];
" P% o  F2 p$ [+ t* H         DSY_BUFFER[1] =DSY_CODE[h%10];
6 q) r/ j; i7 H; g) [9 p         }' z! ^+ W0 i" W: t4 T
. `$ v; N7 b3 L' y1 N  b

: m% N6 z' u/ M& Q$ F1 tvoid Increase_Minute()
: C/ a1 `3 \! ^  {
) P; k& N+ Q) P) l2 D% g6 k( j1 M     if(++m>59)& W9 Z' ?, z. r; b% W+ H
         {
: V6 f3 x0 U; }& d5 c           m=0;Increase_Hour();
5 [. R1 U! |/ |1 S$ d  m' ?           }
. X; I, {0 @+ f0 p, p                 DSY_BUFFER[3] =DSY_CODE[m/10];
7 k0 Y$ H5 F6 D0 W& i: }, j! g! Y             DSY_BUFFER[4] =DSY_CODE[m%10];
( k5 Y7 [2 ]3 b9 I( @* R2 ?                 }) A( k3 w! Z  W* X' I
void Decrease_Minute()" e6 N) Q6 o. H9 G* ~7 h# J; o
  {           m--;4 U5 P  N) x% V6 f: _1 {7 i
     if(m<0)           m=59;
- p, o6 d* ?; s: }$ [( [0 a, ~" n                 DSY_BUFFER[3] =DSY_CODE[m/10];
7 Q1 Z9 B% E$ A" {             DSY_BUFFER[4] =DSY_CODE[m%10];
1 M1 t5 W- N/ ?! ~; f' a                 }  
, k' V& p; ~# i/ V/ s! tvoid Increase_Hour1()
4 L6 H! f- ~' k' O  {5 E# b& U2 F) E+ ^
     if (++h1>7) h1=1;" E  d0 e& W/ H. {8 k& L
         DSY_BUFFER[6] =DSY_CODE[h1/10];
( W5 f+ t3 t# T9 K- X         DSY_BUFFER[7] =DSY_CODE[h1%10];
- |, I* h; f) p, e         }
# A3 a1 H7 b  t: F- J% fvoid Increase_Second()
2 G* y1 G; u$ Q" O. b  {
8 G' m7 E2 A1 g     if(++s>59)
$ G$ M9 c3 d+ u& I; s4 m. m         {4 {& }; [$ g* @  G
           s=0;Increase_Minute();0 H# G5 s6 Q( }9 x  g( H
           }
6 r# v; P  U4 u* \  L9 @                 DSY_BUFFER1[0] =DSY_CODE[s/10];
1 Z6 {" h6 ]% Z0 n0 {6 {             DSY_BUFFER1[1] =DSY_CODE[s%10];
, v- E1 d; H, C2 X* A! E6 U/ N2 _                 }
9 K6 Z! Q- Q8 T0 [+ r$ E+ \  L  void T0_INT() interrupt 1         //显示屏显示//
6 }& l( q/ {) G  {
# n& g; h9 n2 q! Q    TH0=(65536-1000)/256;
0 L: u4 Q: h. O7 F% I; ]        TL0=(65536-1000)%256;. I) t; C$ l5 O& c5 [
        if(ss==1)                          //P1.5键没按下,显示时间//
5 I' t: L$ B) O4 R. c2 a: @  }        {
1 a" ]  a- h2 `$ q        P3=Scan_BIT;& h0 {$ s( d! Q6 C1 h& [
        P2=~DSY_BUFFER[DSY_IDX];' Y- W  ]4 c+ ?1 W! e2 N3 ]
        }) s) \1 i+ V0 U5 z
        else {                                 //P1.5键按下,闪//
, ]/ `. Z# j0 y* B                 P3=Scan_BIT;
4 V! e+ @$ ?# l* T6 ?- b5 h) s                P2=~DSY_BUFFER[DSY_IDX];$ T2 K+ _2 a+ p6 b; h( o/ [
            }
0 `8 I. X2 j" d; o8 u: J        Scan_BIT=_crol_(Scan_BIT,1);//位显示移动//3 |+ ]0 p% g/ p; J* [$ m; f0 @
        DSY_IDX=(DSY_IDX+1)%8;         //段选择每次变化//
$ z% z! K: v' |- }) u1 J# ^        
: j5 `4 F2 s- b# W- _$ Z        if(h1==3)  e( n3 R9 A: \8 @  u
{        if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//
' q; n  x0 e% j( }' f1 n9 T        if(h==6&m==15)cc=dd=0; else cc=dd=1;4 t' f+ F( Q7 b! T' M% ~9 k2 a
        if(h==7&m==0)cc=dd=0; else cc=dd=1;
4 D1 x9 k" H/ K6 U5 k9 n6 Iif(h==12&m==30)cc=dd=0;         else cc=dd=1;7 k/ B+ k3 \4 y- J
if(h==14&m==0)cc=dd=0;         else cc=dd=1;
0 X3 ~9 R4 t; p7 j  Qif(h==16&m==30)cc=dd=0;         else cc=dd=1;
, r, y: l# |/ D" ]- ~. bif(h==18&m==0)cc=dd=0;          else cc=dd=1;# P2 w% v8 X$ T/ R/ [" N
if(h==18&m==45)cc=dd=0;          else cc=dd=1;
( ^/ d6 l8 S- _- L7 i0 [: Iif(h==19&m==30)cc=dd=0;                else cc=dd=1;+ Y% K% O4 A( q' r: i* w$ A
if(h==21&m==30)cc=dd=0;          else cc=dd=1;6 V' v6 y; B3 O- \. l& Y4 t/ r
if(h==22&m==0)cc=dd=0;else cc=dd=1;        }4 j( a# D. h) d4 Y
        else cc=dd=1;) N- _# b  t2 t( s) S( A4 h
4 P, A8 `  A7 D& P! Z4 Y0 n9 \
7 p4 G* r) R$ I( j  {9 g
        if(h1==1|h1==4|h1==2|h1==5)
" Y5 w6 o* I$ R/ p8 C8 g6 ?) a{        if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//7 Z7 E( |& a5 j+ g/ F
        if(h==7&m==0)cc=dd=0; else cc=dd=1;
; Q) g* K, [4 r3 gif(h==12&m==30)cc=dd=0;         else cc=dd=1;
% k, J# W$ F! z' r4 vif(h==14&m==0)cc=dd=0;         else cc=dd=1;. M% b" [. d$ a
if(h==16&m==30)cc=dd=0;         else cc=dd=1;
+ @2 _) H8 ~/ y$ _! \if(h==18&m==0)cc=dd=0;          else cc=dd=1;
" q# s7 l; D3 G: M. t; @if(h==18&m==45)cc=dd=0;          else cc=dd=1;
- N  E0 c# o' h! C& ]4 _, n1 L7 Vif(h==19&m==30)cc=dd=0;                else cc=dd=1;# P6 e0 g+ d$ ?
if(h==21&m==30)cc=dd=0;          else cc=dd=1;
) p0 x: m5 z/ w) I6 z1 ]. rif(h==22&m==0)cc=dd=0;else cc=dd=1;        }
# X8 {% P0 q9 m  |# F        else cc=dd=1;
1 N# K: \: s0 A. }/ I! ?$ |- N: p: h: e! i

5 g  D3 v+ E6 v9 z          if(h1==6); J$ y6 Y5 @0 J! _
{        if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//# j4 ^: R. h& ]7 X
        if(h==7&m==0)cc=dd=0; else cc=dd=1;
, m* ~$ N: {0 xif(h==12&m==30)cc=dd=0;         else cc=dd=1;* `  ~9 `$ J8 `0 v/ J
if(h==14&m==30)cc=dd=0;         else cc=dd=1;
( r6 {, u* L9 Y8 D& X: l  Z; A2 D* dif(h==18&m==0)cc=dd=0;          else cc=dd=1;
) |1 u6 f  l5 `8 h2 i8 O! ]/ Bif(h==21&m==0)cc=dd=0;                else cc=dd=1;/ A* k3 n6 l( \, x# {8 C: t
if(h==21&m==30)cc=dd=0;          else cc=dd=1;
. e6 m  D) t# Aif(h==22&m==30)cc=dd=0;else cc=dd=1;        }
) Q5 p7 [. U. h, J# ~9 W        else cc=dd=1;
9 V9 r  C7 s2 C! k- B  @& B8 y0 `

7 U! T7 L" L( b) E7 x8 e& b        if(h1==7)
) ~0 b, S* L  K: x; x* A3 f9 |/ e{        if(h==6&m==30)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//
. R( F6 ^$ O4 E) O: {9 O                if(h==7&m==0)cc=dd=0; else cc=dd=1;
3 g% C: v. G% V: Q* l/ B  G2 X7 i% Tif(h==11&m==30)cc=dd=0;         else cc=dd=1;
; d; m; l9 j* }. V8 b: d8 Nif(h==12&m==30)cc=dd=0;         else cc=dd=1;- `8 f" ]  p5 [7 ?5 E" w: y- \+ t
if(h==15&m==30)cc=dd=0;         else cc=dd=1;& z2 b7 \% O7 \8 q* I, q5 h
if(h==16&m==30)cc=dd=0;          else cc=dd=1;- [6 ?: m, o- E; l+ X
if(h==18&m==0)cc=dd=0;          else cc=dd=1;) V5 c$ f& Y3 y- D- P# l6 @
if(h==18&m==40)cc=dd=0;                else cc=dd=1;
# B+ p  Z. w8 @! z2 Lif(h==20&m==0)cc=dd=0;          else cc=dd=1;
3 ]7 O! B3 g0 v" D; gif(h==20&m==30)cc=dd=0;          else cc=dd=1;5 V1 [: i5 C# K  I3 [
if(h==21&m==30)cc=dd=0;          else cc=dd=1;$ ~* D7 F; W# Y3 b4 i. d
if(h==22&m==0)cc=dd=0;else cc=dd=1;        }
" `* S0 I3 a. C* d& ^4 B: p; w" b        else cc=dd=1;1 k4 P$ e. d! Z" i
           - a9 m$ k9 c8 `! t
  }, g# b9 e6 f; O7 D, T! I3 M

7 ~& f5 Q$ ?: t- n+ E

, m- E/ b3 B1 L) \2 n% l+ f# j
6 A+ \7 ~; R; s4 \3 t

' T" j2 u& H" m$ O0 U        void T1_INT() interrupt 3//时间秒自动加一,走时//9 g  u! l0 f, `8 {
        {- Z6 h) H! ?. D" a. B7 l2 ~' b4 n
          TH1=(65536-50000)/256;
2 `: A( \- S% B2 K. j3 N8 O7 S4 [          TL1=(65536-50000)%256;//延时50毫秒//
7 ?5 z6 k' N! }- _: u# i3 _. |          if (s100==20)
# a/ T) s' n' v$ u) R3 f' Y* ?          { : n: q$ U9 q4 s5 f, k; F
            s100=0;
9 K! f9 `3 F4 q) X) ~                Increase_Second();
. r. G- z5 E* \- `* a- h      }
( [* w0 C6 S5 s9 A- ?7 }        else s100++;
/ |# ?& `0 j" ^        }
) J7 ~0 ]8 k% I, N/ m; u, V' K) B        void main ()
% }& ~, J( z4 H$ K) r' ~        {
8 v5 w1 f, c6 _5 U  _' C! s8 m          P2=P3=0xFF;. b% F0 g& ]8 a
          TMOD=0x11;: p$ {$ w, @. k1 s% \
          TH0=(65536-1000)/256;# }: T. J4 w, k
          TL0=(65536-1000)%256;
, V/ }2 {" \" U$ m2 U          TH1=0XDC;
4 A' B* o- P& c# s* a6 X          TL1=0;
# |' a. I; v6 P/ g$ n% D0 m; y" x          TCON=0x01;
7 g' F  o. w# d4 [. L8 n          EA=1;% U! z0 h8 a! Y4 }& O  u
          ET0=1;
7 q" ^0 N& `# O- s! ~5 f4 i$ _; |          ET1=1;
/ S5 a' n, [( M7 c8 n3 W          h=05,m=55,s=s100,h1=1;  //时间和闹钟初值//+ r# T7 F5 ]$ Z4 s' {
          DSY_BUFFER[0]=DSY_CODE[h/10];           //时间初值赋给时间段码显示组//
' p& T; l; Y( s" G3 b0 Q9 {2 Q2 O          DSY_BUFFER[1]=DSY_CODE[h%10];
: \$ [5 ?3 q, z" _3 S$ f9 K          DSY_BUFFER[3]=DSY_CODE[m/10];7 a7 }' e" Q" M- @- b& I
          DSY_BUFFER[4]=DSY_CODE[m%10];
" O4 R2 T* V4 A# k          DSY_BUFFER[6]=DSY_CODE[h1/10];( H8 p0 F+ l' Q/ L( ^: O  I5 o
          DSY_BUFFER[7]=DSY_CODE[h1%10];
( r: D/ I* ^* H9 B          DSY_BUFFER1[0]=DSY_CODE[h1/10];        //闹钟初值赋给闹钟段码显示组//# d5 u4 L1 R$ C5 b" s# J4 D
          DSY_BUFFER1[1]=DSY_CODE[h1%10];
, E/ e1 [, C  Q/ }9 T          Scan_BIT=0xFE;  //给位选择赋初值为二进制数 11111110,即只有最后一位为低电平,之后每次左移一位,依次为11111101,11111011......01111111,11111110循环移动//2 f2 E7 ?$ k& h
          DSY_IDX=0;         //段码显示组的选择变量//
/ [. g, l" n! J9 }6 A          TR0=TR1=1;
7 y' p" p4 c: C4 {          Key_State=0xFF;
( W; E2 w6 i% f# B  c! V. C6 `/ B          while(1)
2 z& _: {  W2 P8 n; L6 m          {' C* b4 V% A# I7 D+ L/ _4 J
            if (P1^Key_State)         //判断按键是否有按下//
$ c5 }6 r2 \1 }                 {
% k! ~  t" {/ k9 q% Z                   DelayMS(10);
- D9 x1 C' d% n+ Z+ Y                   if (P1^Key_State)
0 n  z8 A; J6 U4 l+ s                   {
; Z  q( C/ r, J, C8 H6 x+ b; C/ Q                     Key_State=P1; EA=0;
8 v9 V3 P" K: V+ {. r$ C2 k                         if((Key_State&0x01)==0) Increase_Hour();           //小时加一//: M% }7 z/ D7 ^9 p+ ?4 P- E* i, R
                         else if ((Key_State&0x02)==0) Decrease_Hour();   //小时减一//5 [1 a5 a$ D7 y+ E
                            else if ((Key_State&0x04)==0) Increase_Minute();        //分钟加一//6 i$ p0 K- G. s" t
                                else if ((Key_State&0x08)==0) Decrease_Minute(); //分钟减一//: x9 v5 s) ], f2 {6 {
                                else if ((Key_State&0x10)==0)                                         //复位按键//; z9 C( R4 F9 _, t
                                {h=05,m=55,s=0,h1=1;' R# o  l( d1 \6 q
                                        DSY_BUFFER[0]=DSY_CODE[h/10];
- {* w, s- V  [5 _* `' Q                                        DSY_BUFFER[1]=DSY_CODE[h%10];* \9 W  z4 Y2 I3 S' l9 a6 ]5 L
                                        DSY_BUFFER[3]=DSY_CODE[m/10];
* w2 Z( n+ V6 k/ p                                        DSY_BUFFER[4]=DSY_CODE[m%10];
# p  x, r" w- L; |$ n1 q                                        DSY_BUFFER[6]=DSY_CODE[h1/10];
4 `! h! n+ _) \# s! q/ ^. p& O                                        DSY_BUFFER[7]=DSY_CODE[h1%10];
/ u4 f4 S1 t$ t8 X: T" Z% d/ F4 a3 A% x4 O0 w3 h

  l1 p5 R) q! g5 W: {( \3 x" {5 _; ]# v                                }8 i: r# V/ [# V/ y
                           else if ((Key_State&0x20)==0)Increase_Hour1();        //模式加一//
; l! h  N8 l6 t4 Q5 E                           EA=1;
3 j1 \5 m# _2 |# s                           }
6 \. o0 `( E" E  W: a6 g               }
5 T/ }# o: P' m8 w9 L( {3 {/ o- U                           }8 w. z" j! t& P( `6 q* h
                           }
$ a; K0 M- f) ?- C; p, Z! q2 X2 U# V6 O8 X" f
下载:
5 R: R3 E$ @# A3 `& f
游客,如果您要查看本帖隐藏内容请回复

& I- d, a4 l7 A5 {
$ ^) ^! u: n1 u7 l! ?, e

该用户从未签到

2#
发表于 2019-1-18 11:20 | 只看该作者
看看楼主怎么弄的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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