中国IEEE
关于我们 | 会员登陆 | 收藏本站 | 留 言 薄
 

 | 网站首页 | 电子知识 | 单片机知识 | 电路设计 | 微电子技术 | SCADA系统 | 资源下载 | 给我留言 | 谷歌商城 | 视频教程 | ieee | 
热门搜索关键字: 单片机教程 | 三极管 | 二极管 |  C语言汇编语言SCADA元器件模拟电子 |
cnieee.com baidu
栏目导航  
栏目更新推荐  
·51单片机C语言学习
·自制51单片机试验板
·AT89S51单片机下载器软件使用说明
·用MCS51做电子钟(附源程序)
·MCS-51单片机实用子程序库(七)
·MCS-51单片机实用子程序库(六)
·MCS-51单片机实用子程序库(五)
·MCS-51单片机实用子程序库(四)
点击TOP(10)  
·自制51单片机试验板
图片文章  

51单片机C语言学习

自制51单片机试验板

AT89S51单片机下载器…

用MCS51做电子钟(附…
 
您现在的位置: 中国IEEE中国电气电子工程师网 >> 单片机知识 >> 硬件知识 >> 51单片机 >> 正文

用MCS51做电子钟(附源程序)
文章来源:不详 点击数: 更新时间:2008-5-6 【字体:
(欢迎光临中国IEEE,希望本文能对您有所帮助http://www.cnieee.com)


相关文章:

MCS-51指令系统概述
MCS-51 8位单片机(80C,87C/31,51,52,54,58)…
MCS-51单片机实用子程序库(七)
MCS-51单片机实用子程序库(六)

  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    关于〖用MCS51做电子钟(附源程序)〗的最新评论:

    这是我第一设计,包括硬件设计和软件设计。做这个设计,我深深地体会到做工程师的辛苦! 由于这只是一个电子时钟,所以硬件设计方面困难不大,原理图较为简单。PCB板采用单面板设计,减低成本,所以布线时要尽量避免有交叉线,布线前要充分思考元件的布局问题。软件的设计体会最深,单片机只是把一台计算机集成一块芯片上,而计算机做事的每一步都是人已经设定的,如果考虑不够周到,那么就会出现错误,甚至影响到整个程序,所以程序设计时要求每一步必须正确无误。

                

                

    源程序:

     ORG  0000H
          AJMP START
          ORG  0003H
          RETI
          ORG  000BH
          LJMP T0
          ORG  0013H
          RETI
          ORG  001BH
          RETI

          ORG 30H
    START:MOV TMOD,#1H  ;程序开始
          MOV TL0,#0B0H
          MOV TH0,#3CH

          MOV DPTR,#TABLE
          MOV 6BH,#0H
          MOV 6CH,#0H
          MOV 6DH,#0H
          MOV 6EH,#0H
          MOV 6FH,#0H
          SETB P1.0
          MOV A,#0H
          MOV B,#0H
          MOV 70H,#0H
          MOV 71H,#0H
          MOV 72H,#0H
          MOV 73H,#0H
          MOV 74H,#0H
          MOV 75H,#0H
          MOV 76H,#0H
          MOV 77H,#0H
          MOV 78H,#0H
          MOV 79H,#0H
          MOV 7AH,#0H
          MOV 7BH,#0H
          MOV 7CH,#0H
          MOV 7EH,#0H
          MOV 7FH,#0H

          SETB EA
          SETB ET0

          SETB TR0

    LOOPNO:LCALL SHOWNO  ;开机5秒内显示学号
           MOV   A,71H
           CJNE  A,#5H,LOOPNO

    LOOP: JB    P3.2,AA1 ;主程序1(时分显示模式)
          LCALL DELAY
    CA1: JNB   P3.2,CA1
          LCALL DELAY
          LCALL INTT0

    AA1: JB    P3.3,RAA0
          LCALL DELAY
    CA2: JNB   P3.3,CA2
          LCALL DELAY
          AJMP  BB0

    RAA0: MOV   A,6BH
          CJNE  A,#1H,CLR1
          MOV   A,6FH
          CJNE  A,76H,CLR1
          MOV   A,6EH
          CJNE  A,75H,CLR1
          MOV   A,6DH
          CJNE  A,74H,CLR1
          MOV   A,6CH
          CJNE  A,73H,CLR1
          CLR   P1.0
          AJMP  AA0

    CLR1: SETB  P1.0     

    AA0: LCALL SHOW1
          AJMP  LOOP

    LOOP1: JB    P3.2,BB1 ;主程序2(分秒显示模式)
           LCALL DELAY
    CA11: JNB   P3.2,CA11
           LCALL DELAY
           LCALL INTT0

      BB1: JB    P3.3,RBB0
           LCALL DELAY
    CA22: JNB   P3.3,CA22
           LCALL DELAY
           AJMP  LOOPR

    RBB0: MOV   A,6BH
          CJNE  A,#1H,CLR2
          MOV   A,6FH
          CJNE  A,76H,CLR2
          MOV   A,6EH
          CJNE  A,75H,CLR2
          MOV   A,6DH
          CJNE  A,74H,CLR2
          MOV   A,6CH
          CJNE  A,73H,CLR2
          CLR   P1.0
          AJMP  BB0

    CLR2: SETB  P1.0     

      BB0: LCALL SHOW0
           AJMP  LOOP1


    LOOPR: LCALL RING      ;主程序3(闹钟设置)
                 

    LOOP2: JB    P3.3,RCC0 ;主程序4(省电模式)
           LCALL DELAY
    CA33: JNB   P3.3,CA33
           LCALL DELAY
           AJMP  AA0

    RCC0: MOV   A,6BH
          CJNE  A,#1H,CLR3
          MOV   A,6FH
          CJNE  A,76H,CLR3
          MOV   A,6EH
          CJNE  A,75H,CLR3
          MOV   A,6DH
          CJNE  A,74H,CLR3
          MOV   A,6CH
          CJNE  A,73H,CLR3
          CLR   P1.0
          AJMP  CC0

    CLR3: SETB  P1.0     
      
    CC0:  MOV   P2,#0FFH
           AJMP  LOOP2

      T0: PUSH ACC       ;中断程序0 (定时计数器0)
          PUSH PSW
          CLR  ET0
          CLR  TR0

          MOV  A,#0B7H   ;计数修正
          ADD  A,TL0
          MOV  TL0,A
          MOV  A,#03CH
          ADD  A,TH0
          MOV  TH0,A

          SETB TR0

          MOV  A,7EH
          CJNE A,#0H,T2T
          AJMP T0T

    T2T:  INC  B         ;0.4秒定时
          MOV  A,B
          CJNE A,#8H,C1
          MOV  B,#0H
          INC  77H       ;用作 30 秒计数寄存器

          INC  78H       ;用作 0.4秒计数寄存器
          MOV  A,78H
          CJNE A,#2H,C1
          MOV  78H,#0H

    C1:  MOV  A,7FH
          CJNE A,#1H,T0T
          AJMP A1

    T0T:  INC  70H         ;1秒钟定时
          MOV  A,70H
          CJNE A,#14H,A1
          MOV  70H,#0H

          INC  71H       ;秒+1
          MOV  A,71H
          CJNE A,#0AH,A1
          MOV  71H,#0H
          INC  72H
          MOV  A,72H
          CJNE A,#6H,A1
          MOV  72H,#0H

          INC  73H       ;分+1
          MOV  A,73H
          CJNE A,#0AH,A1
          MOV  73H,#0H
          INC  74H
          MOV  A,74H
          CJNE A,#6H,A1
          MOV  74H,#0H

          MOV  A,76H     ;时+1
          CJNE A,#2H,A2
          INC  75H
          MOV  A,75H
          CJNE A,#4H,A1
          MOV  75H,#0H
          AJMP J1
      A2: INC  75H
          MOV  A,75H
          CJNE A,#0AH,A1
          MOV  75H,#0H
      J1: INC  76H
          MOV  A,76H
          CJNE A,#3H,A1
          MOV  76H,#0H

      A1: POP  PSW
          POP  ACC
          SETB ET0
          RETI


    INTT0:MOV   7EH,#1H    ;修改时间

      M2: JB    P3.2,JMP1  ;"时" 修改
          LCALL DELAY
    UU1: JNB   P3.2,UU1
          LCALL DELAY
          AJMP  M1

    JMP1: JB    P3.3,DELAY5
          LCALL DELAY
    UU2: JNB   P3.3,UU2
          LCALL DELAY

          MOV   7FH,#1H
          MOV   70H,#0H

          MOV   A,76H
          CJNE  A,#2H,B1
          INC   75H
          MOV   A,75H
          CJNE  A,#4H,M3
          MOV   75H,#0H
          AJMP  J2

      B1: INC   75H
          MOV   A,75H
          CJNE  A,#0AH,M3
          MOV   75H,#0H
      J2: INC   76H
          MOV   A,76H
          CJNE  A,#3H,M3
          MOV   76H,#0H

    DELAY5:MOV   A,78H   ;是否已过0.4秒,闪烁用
           CJNE  A,#1H,BC1
           LCALL SHOW2
           AJMP  BC2

      M3: MOV   77H,#0H

    BC1: LCALL SHOW1

    BC2: MOV   A,77H    ;是否已过30秒,是则退出
          CJNE  A,#4BH,M2
          AJMP  OUT

      M1: MOV   77H,#0H     ;"分" 修改

      M0: JB    P3.2,JMP2
          LCALL DELAY
    UU3: JNB   P3.2,UU3
          LCALL DELAY
          AJMP  MM1

    JMP2: JB    P3.3,DELAY6
          LCALL DELAY
    UU4: JNB   P3.3,UU4
          LCALL DELAY

          MOV   7FH,#1H
          MOV   70H,#0H

          INC   73H
          MOV   A,73H
          CJNE  A,#0AH,M4
          MOV   73H,#0H
          INC   74H
          MOV   A,74H
          CJNE  A,#6H,M4
          MOV   74H,#0H

    DELAY6:MOV   A,78H   ;是否为0.4秒
           CJNE  A,#1H,DC1
           LCALL SHOW3
           AJMP  DC2

      M4: MOV   77H,#0H

    DC1: LCALL SHOW1

    DC2: MOV   A,77H    ;是否已过30秒,是则退出
          CJNE  A,#4BH,M0
          AJMP  OUT

    MM1: MOV   77H,#0H     ;"秒" 修改

    MM0: JB    P3.2,JMP3
          LCALL DELAY
    UU5: JNB   P3.2,UU5
          LCALL DELAY
          AJMP  OUT

    JMP3: JB    P3.3,DELAY7
          LCALL DELAY
    UU6: JNB   P3.3,UU6
          LCALL DELAY

          MOV   7FH,#1H
          MOV   70H,#0H

          INC   71H
          MOV   A,71H
          CJNE  A,#0AH,MM4
          MOV   71H,#0H
          INC   72H
          MOV   A,72H
          CJNE  A,#6H,MM4
          MOV   72H,#0H

    DELAY7:MOV   A,78H   ;是否为0.4秒
           CJNE  A,#1H,DCC1
           LCALL SHOW4
           AJMP  DCC2

    MM4: MOV   77H,#0H

    DCC1: LCALL SHOW

    DCC2: MOV   A,77H    ;是否已过30秒,是则退出
          CJNE  A,#4BH,MM0
          AJMP  OUT

    OUT: MOV   7EH,#0H  ;修改时间退出
          MOV   7FH,#0H
          MOV   B,#0H  
          MOV   77H,#0H
          MOV   78H,#0H

          RET

    RING: MOV   7EH,#1H  ;闹钟时间设置

    RI0: LCALL RSHOW01

          JB    P3.3,R31 ;是否有按p3.3
          LCALL DELAY
    R33: JNB   P3.3,R33
          LCALL DELAY
          AJMP  RP33

    R31: MOV   A,77H    ;是否已 5 秒
          CJNE  A,#0DH,R331
          LJMP  OUTR

    R331: JB    P3.2,RI0 ;是否有按p3.2
          LCALL DELAY
    R32: JNB   P3.2,R32
          LCALL DELAY

          INC   6BH
          MOV   A,6BH
          CJNE  A,#2H,ZZZ
          MOV   6BH,#0H

    ZZZ: MOV   77H,#0H

          AJMP  RI0

    RP33: MOV   A,6BH      ;闹钟"开"还是"关"
          CJNE  A,#0H,QQ
          LJMP  OUTR
         
      QQ: MOV   77H,#0H

      YM2:JB    P3.3,YJMP1 ;是否有按p3.3
          LCALL DELAY
    YUU1:JNB   P3.3,YUU1
          LCALL DELAY
          AJMP  YM1

    YJMP1:JB    P3.2,YDELAY5 ;"时" 闹钟设置
          LCALL DELAY
      W1: JNB   P3.2,W1
          LCALL DELAY

          MOV   A,6FH        ;"闹时"+1
          CJNE  A,#2H,YB1
          INC   6EH
          MOV   A,6EH
          CJNE  A,#4H,YM3
          MOV   6EH,#0H
          AJMP  YJ2

    YB1: INC   6EH
          MOV   A,6EH
          CJNE  A,#0AH,YM3
          MOV   6EH,#0H
    YJ2: INC   6FH
          MOV   A,6FH
          CJNE  A,#3,YM3
          MOV   6FH,#0H
          AJMP  YM3

    YDELAY5:MOV   A,78H     ;是否已过0.4秒
            CJNE  A,#1H,YBC1
            LCALL RSHOW2
            AJMP  YBC2

      YM3: MOV   77H,#0H

    YBC1: LCALL RSHOW1

    YBC2: MOV   A,77H    ;30秒
           CJNE  A,#4BH,YM2
           AJMP  OUTR

      YM1: MOV   77H,#0H  ;"分" 闹钟设置

      YM0: JB    P3.3,YJMP2
           LCALL DELAY
    YUU3: JNB   P3.3,YUU3
           LCALL DELAY
           AJMP  OUTR

    YJMP2: JB    P3.2,YDELAY6
           LCALL DELAY
    YUU4: JNB   P3.2,YUU4
           LCALL DELAY

           INC   6CH     ;"闹分"+1
           MOV   A,6CH
           CJNE  A,#0AH,YM4
           MOV   6CH,#0H
           INC   6DH
           MOV   A,6DH
           CJNE  A,#6H,YM4
           MOV   6DH,#0H
           AJMP  YM4

    YDELAY6:MOV   A,78H   ;是否已过0.4秒
            CJNE  A,#1H,YDC1
            LCALL RSHOW3
            AJMP  YDC2

      YM4:  MOV   77H,#0H

    YDC1:  LCALL RSHOW1

    YDC2:  MOV   A,77H   ;是否已30秒
            CJNE  A,#4BH,YM0

    OUTR: MOV   7EH,#0H
          MOV   7FH,#0H
          MOV   B,#0H
          MOV   77H,#0H
          MOV   78H,#0H

          RET

    SHOW: MOV   R0,#71H  ;"秒" 显示模式
          MOV   R1,#2H
          MOV   R2,#0EEH
          LCALL SH
          MOV   P2,#0FFH
          LCALL DELAY1
          LCALL DELAY1
          RET

    SHOW0:MOV   R0,#71H  ;"分秒" 显示模式
          MOV   R1,#4H
          MOV   R2,#0EEH
          LCALL SH
          MOV   P2,#0FFH
          RET

    SHOW1:MOV   R0,#73H  ;"时分" 显示模式
          MOV   R1,#4H
          MOV   R2,#0EEH
          LCALL SH
          MOV   P2,#0FFH
          RET

    SHOW2:MOV   R0,#73H  ;"时" 闪烁
          MOV   R1,#2H
          MOV   R2,#0EEH
          LCALL SH

          MOV   P0,#7FH
          MOV   P2,#0BBH
          LCALL DELAY1

          MOV   P0,#7FH
          MOV   P2,#77H
          LCALL DELAY1
          MOV   P2,#0FFH
          RET

    SHOW3:MOV   P0,#7FH  ;"分" 闪烁
          MOV   P2,#0EEH
          LCALL DELAY1

          MOV   P0,#7FH
          MOV   P2,#0DDH
          LCALL DELAY1

          MOV   R0,#75H
          MOV   R1,#2H
          MOV   R2,#0BBH
          LCALL SH
          MOV   P2,#0FFH
          RET

    SHOW4:MOV   P2,#0FFH ;"秒" 闪烁
          LCALL DELAY1
          LCALL DELAY1
          LCALL DELAY1
          LCALL DELAY1
          RET

    RSHOW01:MOV   R0,#6BH   ;闹钟 "开"--"关" 显示
            MOV   R1,#1H
            MOV   R2,#0EEH
            LCALL SH
            LCALL DELAY1
            LCALL DELAY1
            LCALL DELAY1
            RET

    RSHOW1:MOV   R0,#6CH   ;"闹时"显示
           MOV   R1,#4H
           MOV   R2,#0EEH
           LCALL SH
           MOV   P2,#0FFH
           RET

    RSHOW2:MOV   R0,#6CH   ;"闹时"闪烁
           MOV   R1,#2H
           MOV   R2,#0EEH
           LCALL SH

           MOV   P0,#7FH
           MOV   P2,#0BBH
           LCALL DELAY1

           MOV   P0,#7FH
           MOV   P2,#77H
           LCALL DELAY1
           MOV   P2,#0FFH
           RET

    RSHOW3:MOV   P0,#7FH   ;"闹分"闪烁
           MOV   P2,#0EEH
           LCALL DELAY1

           MOV   P0,#7FH
           MOV   P2,#0DDH
           LCALL DELAY1

           MOV   R0,#6EH
           MOV   R1,#2H
           MOV   R2,#0BBH
           LCALL SH
           MOV   P2,#0FFH
           RET

    SHOWNO:MOV   P0,#12H
           MOV   P2,#0EEH
           LCALL DELAY1

           MOV   P0,#40H
           MOV   P2,#0DDH
           LCALL DELAY1
           LCALL DELAY1
           LCALL DELAY1
           RET

       SH:MOV   A,@R0
          INC   R0
          MOVC  A,@A+DPTR
          MOV   P0,A
          MOV   P2,R2
          LCALL DELAY1
          MOV   A,R2
          RL    A
          MOV   R2,A
          DJNZ  R1,SH
          RET

    TABLE:DB 40H,79H,24H,30H,19H,12H,2H,78H,0H,10H

    DELAY:MOV  79H,#64H  ;延时10ms
      D11:MOV  7AH,#30H
      D12:DJNZ 7AH,D12
          DJNZ 79H,D11
          RET

    DELAY1:MOV  7BH,#64H  ;延时2.4ms
        D2:MOV  7CH,#0AH
        D3:DJNZ 7CH,D3
           DJNZ 7BH,D2
           RET
           END



    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明网站地图 | 名站导航 | 管理登录 | 
    本站资源部分来自互联网,如侵犯您的权利,我们将予以删除  鲁ICP备08006092号
    本站欢迎同类网站做友情链接,QQ留言
    中国IEEE 中国电气电子工程师网 版权所有