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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机数字闹钟仿真(自动值班打铃系统)2 r' B0 p( X& T( ~( s) E

4 K) Z* t! g8 n
9 T" h' `3 R# F# g

+ W5 E2 {; F& m0 ~$ I) y  P3 Q2 f
5 u# u) H2 L4 d5 [3 M5 n& L
: Q, t: I- ?* W8 g) u! t  n
单片机源程序:
: O6 K7 ?' @! T$ {( Q+ B6 d# `#include <reg51.h>( A0 S% |6 f" x% Z6 i+ O
#include <intrins.h>                                                                                                                                                                                                                 
' y; i( Q6 [- {, ~7 G. c#define uchar unsigned char                                                                                                                                                                                                
) J5 i2 T, t2 J6 p% {) G#define uint unsigned int
/ `3 V; ^0 z; ^uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阴极总段//1 e4 x3 r) @6 ]1 e
uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xff,0,0};//时间显示时-分 模式) d4 i/ P4 w  O8 B% a! f
uchar DSY_BUFFER1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //模式显示段//
0 n- z. K% F5 w# J0 Ouchar Scan_BIT;//位选择//
2 B: u5 e" r& ]6 Duchar DSY_IDX;//段选择//
1 A; }, m  h4 ?5 K2 J$ E9 u5 M1 Huchar Key_State; //按键控制//
2 F- ~/ ^" Q6 ~) I0 K6 f) X( ruchar s,s100,h1        ;
* Z+ D, S6 U$ [+ L# hchar  h,m;) a9 }% U) d! k' [  L4 `' C
sbit dd=P1^7;        //喇叭和led输出端口//
- {" Y2 x( H- d  b6 f! j0 Fsbit cc=P1^6;. ^, W" S3 q& o- i" x$ x
sbit ss=P1^5; //时间和秒转换显示键//
0 ]/ c0 W2 ?  r7 s) o: Z4 qvoid DelayMS(uchar x)# o; |" P7 s. P1 [
{1 f7 F$ Q' n0 v9 e7 V
  uchar i;7 [! r. S$ m9 j0 l0 ]9 \
  while(x--) for(i = 0;i<120;i++);  h+ d( I3 g; Y3 w( }, @
  }
0 p0 i3 }  ?# w7 P6 Yvoid Increase_Hour(): U) W, @, A% q4 B1 B/ C% U
  {
; E+ r$ O2 z$ P* ]" F     if (++h>23) h=0;% x  Z& J1 w3 }# X% u* [
         DSY_BUFFER[0] =DSY_CODE[h/10];4 w, }( h9 ^5 o# x3 \: n
         DSY_BUFFER[1] =DSY_CODE[h%10];( W) Y" y; l* j, @% U
         }! \8 U) K( w) F
void Decrease_Hour()
# @' A" Q9 L* {/ m, I  {         h--;
! v, L' M% p+ X7 x' _     if (h<0) h=23;4 p" @) r2 ^# E
         DSY_BUFFER[0] =DSY_CODE[h/10];
* a4 t1 V% E' H6 I         DSY_BUFFER[1] =DSY_CODE[h%10];3 x7 b* G& A: d" w) T# K7 \1 {
         }
' U) q1 U/ n6 H+ P+ `- W* ^
3 a9 q* S' N2 m$ \, }

. q. r7 U: r, A" n  `; {% m$ Gvoid Increase_Minute()
4 `- R# H9 k  D+ X- I$ Y  {
( K- i, Q, K) v6 ~% N     if(++m>59)
8 p& W6 |. i4 k         {
2 ~9 Y) D  ^6 a2 z           m=0;Increase_Hour();: f& N5 ?  y* _8 }+ \
           }' V0 b6 ~9 \0 D% F- U
                 DSY_BUFFER[3] =DSY_CODE[m/10];
$ A1 d& r  ]' u0 [/ B3 \1 ^             DSY_BUFFER[4] =DSY_CODE[m%10];- {6 B/ F/ t, ^5 ^% X
                 }
1 ^2 L* _/ c) @; ~( Tvoid Decrease_Minute()0 ~& J6 s1 O2 t# R  I3 S6 s4 Z
  {           m--;
, k; J8 y% F/ T     if(m<0)           m=59;
# r$ w2 p7 p9 Y* Y9 l% w                 DSY_BUFFER[3] =DSY_CODE[m/10];
0 n9 v  K. N# k/ B             DSY_BUFFER[4] =DSY_CODE[m%10];9 g3 p2 o4 t3 P9 V+ }
                 }  
. P# D7 P; t# B" fvoid Increase_Hour1()
& q6 Z; v# N+ L- u8 W) S  {6 f3 R: n! S6 e) U- C- {* ?
     if (++h1>7) h1=1;
9 X( f* }9 @5 b* n/ G         DSY_BUFFER[6] =DSY_CODE[h1/10];6 y/ a) R6 k: J3 \5 {( d, ?
         DSY_BUFFER[7] =DSY_CODE[h1%10];  ^7 M; J- ]4 e8 d' A) m4 w
         }3 ^( Y% H+ v' e1 N* A8 I8 x; L
void Increase_Second()$ l; k; `# p! h; ?6 J, Q
  {
6 e8 K" ?. d& R5 U2 e     if(++s>59)
  O5 u/ H$ }5 P- R* ]  p& k3 I         {/ I" u& `: k+ [: x
           s=0;Increase_Minute();
  ?1 H8 V( v( `8 K0 h           }
( w  \. V) ?: ?; w; ?: T                 DSY_BUFFER1[0] =DSY_CODE[s/10];4 \2 Z3 r; h, i
             DSY_BUFFER1[1] =DSY_CODE[s%10];5 O5 {' N4 I4 u+ g9 K
                 }: h: k. U: B8 ^/ B& a# n# v. a6 ^
  void T0_INT() interrupt 1         //显示屏显示//* {; g/ L( Y( }
  {. M* x+ ]/ `- X6 h3 U
    TH0=(65536-1000)/256;
7 f9 Y0 m/ _+ y, ~- Z, d& T        TL0=(65536-1000)%256;
! ~$ W6 p, c9 N% o0 z# {! z        if(ss==1)                          //P1.5键没按下,显示时间//# c) L' b! H( z: _4 @$ I
        {0 R4 S4 b4 B7 u0 S
        P3=Scan_BIT;
/ C# q  \0 z# s- B! U        P2=~DSY_BUFFER[DSY_IDX];" }5 m' \8 |4 P, x. X
        }+ j9 [# [' p2 {) {9 g
        else {                                 //P1.5键按下,闪//
- i" M! D4 Y7 i- p& F                 P3=Scan_BIT;
  b5 V  l6 h: E, r+ j( x                P2=~DSY_BUFFER[DSY_IDX];, `2 b  X; F& [5 d) u
            }' H8 J9 ]: J' f4 t
        Scan_BIT=_crol_(Scan_BIT,1);//位显示移动//* @  c* d  I0 E% y8 ]  @. ~) b5 @
        DSY_IDX=(DSY_IDX+1)%8;         //段选择每次变化//# S) k0 i5 ^5 o4 a$ A
        
6 t+ V- J3 d0 y, N        if(h1==3)6 S% P8 ?" y& u4 A9 o" }. [7 n1 A& q
{        if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//. V0 D7 z" ^- Y( H
        if(h==6&m==15)cc=dd=0; else cc=dd=1;
9 C5 M! |6 G8 l8 }        if(h==7&m==0)cc=dd=0; else cc=dd=1;
( U' D. V% C& Sif(h==12&m==30)cc=dd=0;         else cc=dd=1;4 k0 Y0 h5 g6 t/ B- @
if(h==14&m==0)cc=dd=0;         else cc=dd=1;7 S1 ]% n% e5 c8 y
if(h==16&m==30)cc=dd=0;         else cc=dd=1;
0 z2 z6 ~4 I6 T3 t# eif(h==18&m==0)cc=dd=0;          else cc=dd=1;
, V$ @8 r# }2 o8 X0 sif(h==18&m==45)cc=dd=0;          else cc=dd=1;( ]0 {7 P, A: n( O$ ^" f
if(h==19&m==30)cc=dd=0;                else cc=dd=1;
: ]9 r' q0 ^! [- G/ gif(h==21&m==30)cc=dd=0;          else cc=dd=1;- _' h1 t8 N! }! h
if(h==22&m==0)cc=dd=0;else cc=dd=1;        }
! l6 K2 U; S# T- o/ h        else cc=dd=1;- m" `. N" v4 a. d% |, u
7 K9 U6 k& W- `* x( K

9 S1 p, l  V% \1 _" t# ^        if(h1==1|h1==4|h1==2|h1==5)( m! @& W9 L8 ?: x0 c& R6 v: o4 a
{        if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//. ^( d$ s* O# Q
        if(h==7&m==0)cc=dd=0; else cc=dd=1;: w& v' K0 F# x
if(h==12&m==30)cc=dd=0;         else cc=dd=1;
% U5 P/ G  L5 d1 mif(h==14&m==0)cc=dd=0;         else cc=dd=1;5 A& l1 V$ p, I  S
if(h==16&m==30)cc=dd=0;         else cc=dd=1;; j1 Q! H5 }9 m. c) _, l2 B9 P0 `+ z6 _
if(h==18&m==0)cc=dd=0;          else cc=dd=1;! |8 c2 d  D3 D  |0 g
if(h==18&m==45)cc=dd=0;          else cc=dd=1;
' o* E; \: [1 x! o2 Iif(h==19&m==30)cc=dd=0;                else cc=dd=1;  s" @6 q) o9 Z4 _7 ]/ D
if(h==21&m==30)cc=dd=0;          else cc=dd=1;: G, F5 W5 h9 D2 h# Y2 m
if(h==22&m==0)cc=dd=0;else cc=dd=1;        }+ u% s3 F4 y. U) ]# b9 @! g
        else cc=dd=1;" c+ A8 O# g9 _! C7 G; C7 [

- c- F& C  T' l$ a  ^6 x$ z
- L$ b1 L6 @6 r: U' W2 \' ]+ b* z
          if(h1==6)
3 {( q- J+ z% }7 X' [{        if(h==6&m==0)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//- e( j; l; ]3 N! G+ q# Y. i
        if(h==7&m==0)cc=dd=0; else cc=dd=1;# d0 J+ b# D4 S; X
if(h==12&m==30)cc=dd=0;         else cc=dd=1;' j$ T4 w! `4 }, u# P' X* G/ d
if(h==14&m==30)cc=dd=0;         else cc=dd=1;6 b( L: w- H* I3 w/ ]
if(h==18&m==0)cc=dd=0;          else cc=dd=1;
' b: `- E2 Y7 Xif(h==21&m==0)cc=dd=0;                else cc=dd=1;6 e8 g  ?' p6 \7 P9 L
if(h==21&m==30)cc=dd=0;          else cc=dd=1;, Y% ]: P! x4 V6 s
if(h==22&m==30)cc=dd=0;else cc=dd=1;        }
& G) N& u5 c3 H. W1 R. ^        else cc=dd=1;
) Y5 {8 A* o) W" @9 l3 k- l  V8 r

9 |0 F5 A' d3 [6 F8 a        if(h1==7)3 H. Z# C7 `5 R/ V) `
{        if(h==6&m==30)cc=dd=0;else cc=dd=1;//时间到闹钟响,led亮,一分钟//9 W; k; y! ]5 [: G- I
                if(h==7&m==0)cc=dd=0; else cc=dd=1;. X: R: {  }' }8 ^; R
if(h==11&m==30)cc=dd=0;         else cc=dd=1;
* V; T1 E( ^& ^. H+ g. o1 I3 xif(h==12&m==30)cc=dd=0;         else cc=dd=1;
8 `( X- S# L! T% ?2 ~1 Aif(h==15&m==30)cc=dd=0;         else cc=dd=1;
- D5 R( t/ x0 lif(h==16&m==30)cc=dd=0;          else cc=dd=1;
2 \2 V, q2 N; l5 p$ O' H3 s- u/ h, yif(h==18&m==0)cc=dd=0;          else cc=dd=1;
' M; D, o, V$ H/ X$ mif(h==18&m==40)cc=dd=0;                else cc=dd=1;
4 I* X. P- o( y! z$ Zif(h==20&m==0)cc=dd=0;          else cc=dd=1;
; O" K  K8 _9 y! W, j6 ?. }if(h==20&m==30)cc=dd=0;          else cc=dd=1;5 w& A, O% Q( m3 G5 X
if(h==21&m==30)cc=dd=0;          else cc=dd=1;
9 V( r. k3 k! R. vif(h==22&m==0)cc=dd=0;else cc=dd=1;        }
2 @; l0 y9 I2 f6 [& ^4 h        else cc=dd=1;
* V7 {! n1 f4 m) j           . }  J. i2 K" s$ g7 K  B  f
  }# ]% ~, I' q# Y( c

1 q8 y4 }" C. g  h; R, x# D' I

! n/ N1 j9 o2 U% s; ^. c+ u7 u( J% X8 @" A* q
3 \! @7 E( O/ ~9 `" o
        void T1_INT() interrupt 3//时间秒自动加一,走时//* ~8 o/ I2 o+ R- _  \+ q0 D
        {
2 o# s5 O' Y: S: q6 F3 Q! T          TH1=(65536-50000)/256;4 U! a9 S- |1 D4 B7 N
          TL1=(65536-50000)%256;//延时50毫秒//: z! l, M8 k% W
          if (s100==20)5 l( w' m2 Y+ B
          { 2 e# c0 w$ S: O+ I' G
            s100=0;
  }7 D- b+ q: _& q! M) n1 V0 I  ?6 a1 ^                Increase_Second();
3 Y( j, s8 L2 o3 N      }
# a1 C, U: }8 S! @% i8 y        else s100++;
8 e5 a, N# l# b1 Y        }/ ^" m" G- J& ?% W
        void main ()
1 M7 {# c0 W9 }- a9 [5 G        {8 t7 g8 [# s+ i
          P2=P3=0xFF;
% I) A/ _9 q2 f# v, T- w          TMOD=0x11;
9 a; {$ D5 g4 p! k          TH0=(65536-1000)/256;
* N: K" f3 ^% l8 d: H6 ~8 t" h% R          TL0=(65536-1000)%256;- _0 b9 g7 Z2 ?
          TH1=0XDC;
! c5 _9 h- ~6 _# O  S          TL1=0;
& {8 U& g. b* d# V* q6 l          TCON=0x01;4 L, v; \) d* ?
          EA=1;
2 f/ X& a5 C- G3 c& A/ A9 u          ET0=1;
4 r8 S8 J% W$ r" Z% g0 b8 X* y          ET1=1;! J' v: d6 `% b9 t1 C+ g# E
          h=05,m=55,s=s100,h1=1;  //时间和闹钟初值//2 k0 h7 U. l5 ^/ R
          DSY_BUFFER[0]=DSY_CODE[h/10];           //时间初值赋给时间段码显示组//( S/ @9 d2 W( o0 N# D
          DSY_BUFFER[1]=DSY_CODE[h%10];& I) {: \% }& u8 \" ^2 F
          DSY_BUFFER[3]=DSY_CODE[m/10];: S. d: A( X2 M. I
          DSY_BUFFER[4]=DSY_CODE[m%10];
3 i( G2 \9 H. P. M- B          DSY_BUFFER[6]=DSY_CODE[h1/10];
4 @  N: ?. R7 ]: W/ }$ \$ a4 M8 Q          DSY_BUFFER[7]=DSY_CODE[h1%10];7 D  D8 v$ M5 `. q+ z- ^! z
          DSY_BUFFER1[0]=DSY_CODE[h1/10];        //闹钟初值赋给闹钟段码显示组//. Y  E. K* G% s% Q
          DSY_BUFFER1[1]=DSY_CODE[h1%10];: U9 s# e+ n7 k
          Scan_BIT=0xFE;  //给位选择赋初值为二进制数 11111110,即只有最后一位为低电平,之后每次左移一位,依次为11111101,11111011......01111111,11111110循环移动//2 J# c) O$ k  f+ T9 l4 [9 @
          DSY_IDX=0;         //段码显示组的选择变量//
; }' E: n: S6 \# N" v. x8 c          TR0=TR1=1;
* b5 \) n1 Q1 Q# |          Key_State=0xFF;
; j, h8 x% R" |0 y          while(1)
* `% B" k5 r( i/ D$ Q          {
- T6 j/ ]7 M  o: h9 G            if (P1^Key_State)         //判断按键是否有按下//
$ E6 }9 ^3 Q9 a$ z                 {2 J7 _7 t2 Y% l2 t
                   DelayMS(10);
0 U( o/ o& \9 K0 c* }+ w                   if (P1^Key_State)
; E% t! l% c4 k" E                   { / k: J# H# V) c. G
                     Key_State=P1; EA=0;
! K! F7 R& A- p. r( E- v                         if((Key_State&0x01)==0) Increase_Hour();           //小时加一//4 @3 a" |, f/ ~+ g
                         else if ((Key_State&0x02)==0) Decrease_Hour();   //小时减一//
: i- a2 s; i; Y8 |3 ^  Y$ s                            else if ((Key_State&0x04)==0) Increase_Minute();        //分钟加一//4 s4 K% p$ [% r1 V8 m4 w' s* ~
                                else if ((Key_State&0x08)==0) Decrease_Minute(); //分钟减一//
- p- j; r- l  B9 d                                else if ((Key_State&0x10)==0)                                         //复位按键//7 C0 a: T! c" i1 O/ t' X
                                {h=05,m=55,s=0,h1=1;, @* D* `  X' E5 r5 ^
                                        DSY_BUFFER[0]=DSY_CODE[h/10];$ B- e& }: _/ G9 s' d6 ~* j" C
                                        DSY_BUFFER[1]=DSY_CODE[h%10];
5 B' {; e* p2 v6 v                                        DSY_BUFFER[3]=DSY_CODE[m/10];8 N" n' `0 w: f& W, z: d$ [. H/ V
                                        DSY_BUFFER[4]=DSY_CODE[m%10];: h. t: k2 c! w' O
                                        DSY_BUFFER[6]=DSY_CODE[h1/10];/ t" U& J+ j1 F2 _
                                        DSY_BUFFER[7]=DSY_CODE[h1%10];4 s" u2 }4 B; D) H( K

  ~* P- J1 n/ _

+ Z2 Z, E4 C8 a) ?7 f  _2 I4 F! e                                }2 s5 b, z$ V; o  F% r
                           else if ((Key_State&0x20)==0)Increase_Hour1();        //模式加一//: r! {2 W' I9 O+ Q+ _
                           EA=1;
1 P6 d) f7 M0 H3 ^& R7 j0 I$ B! k( j                           }7 B4 P$ M* O$ N% }$ O
               }
; z6 Z6 G9 a* [) _$ C                           }4 n9 t3 f( h2 A' b' Z
                           }
' y- Q1 Q& Q6 b% g6 c6 ^8 t8 K  M" A$ k& h6 ~( C( r8 b$ C
下载:
5 v  D7 C; B  J1 j! s
游客,如果您要查看本帖隐藏内容请回复
: K$ M- G0 p; {# T' i' M% x$ y4 U
! g6 l0 W( t8 H$ k9 f! D

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-14 18:37 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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