找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1712|回复: 0
打印 上一主题 下一主题
收起左侧

单片机汇编电子时钟设计

[复制链接]
跳转到指定楼层
楼主
源程序

ORG 0000H

             LJMP MAIN

             ORG 000BH

             LJMP TIME

            ;主程序部分

             ORG 0100H

       MAIN:MOVSP,#50H

             MOV 20H,#00H        ;秒钟

             MOV 21H,#00H        ;分钟 

             MOV 22H,#00H        ;小时 

             MOV 23H,#01H

             MOV 24H,#01H

             MOV 25H,#00H

             MOV 30H,#00H   

             MOV 31H,#00H   

             MOV 32H,#00H   

             MOV 33H,#00H   

             MOV 34H,#00H   

             MOV 35H,#00H

             MOV TMOD,#01H   ;16位计数器

             MOV TH0,#03CH    ;赋计数初值

             MOV TL0,#0B0H

             MOV IE,#87H ;允许外部中断1和外部中断0和T0溢出中断

            SETB TR0             ;启动计数器T0

             MOV R2,#14H

             MOV P2,#0FFH

       LOOP:LCALL  DISPLAY1

             JB P1.1,LOOP         

             LCALL SETTIME   ;调用设定时间程序

             LJMP LOOP

       DELAY:MOV R4,#030H          ;延时时间

             DL00:MOV R5,#0FFH

             DL11:MOV R6,#9H

             DL12:DJNZ R6,DL12

             DJNZ R5,DL11

             DJNZ R4,DL00

              RET

            ;设定时间程序

             SETTIME:

          L0:LCALL DISPLAY1          ;调用时间允许程序

        MM1: JB P1.2,L1            

             MOV C,P1.2

             JC MM1

             LCALL DELAY1          ;调用延时

             JC MM1

     MSTOP1: MOV C,P1.2

            JNC MSTOP1           ;判断P1.2是否释放释放则继续

             LCALL DELAY1         ;调用延时

             MOV C,P1.2

             JNC MSTOP1

             INC 22H               ;小时增加1

             MOV A,22H

            CJNE A,#18H,GO12     ;判断小时是否到24时未到继续循环

             MOV 22H,#00H           ;小时复位

             MOV 34H,#00H

             MOV 35H,#00H

             LJMP L0

          L1:JBP1.3,L2                 

             MOV C,P1.3

             JC L1

             LCALL DELAY1          ;延时

             JC L1

   MSTOP2: MOV C,P1.3

            JNC MSTOP2               ;判断P1.3是否释放释放则继续

             LCALL DELAY1            ;调用延时

             MOV C,P1.3

             JNC MSTOP2

             INC 21H                   ;分钟增加一

             MOV A,21H

             CJNE A,#3CH,GO11         

             MOV 21H,#00H             ;分钟复位

             MOV 32H,#00H

             MOV 33H,#00H

             LJMP L0

      GO11:MOV B,#0AH         ;将A中的内容分成高低两部分

            DIV AB

            MOV 32H,B

            MOV 33H,A

            LJMP L0

     GO12: MOV B,#0AH

            DIV AB

            MOV 34H,B

            MOV 35H,A

            LJMP L0

         L2:JB P1.4,L0               

            MOV C,P1.4

            JC L2

            LCALL DELAY1         ;调用延时

            MOV C,P1.4

            JC L2

   STOP1:   MOV C,P1.4             ;判断按键P1.4是否释放?

            JNC STOP1

            LCALL DELAY1          ;调用延时

            MOV C,P1.4

            JNC STOP1

            LJMP LOOP

DELAY1:  MOV R4,#14H              ;时间延时

   DL001:   MOV R5,#0FFH

   DL111:   DJNZ R5,DL111

            DJNZ R4,DL001

            RET  

   TIME:   PUSH ACC                   ;现场保护

           PUSH PSW

          MOV TH0,#03CH             ;赋初值

           MOV TL0,#0B0H

           DJNZ R2,RET0

           MOV R2,#14H

           MOV A,20H

           CLR C

           INC A                           ;秒钟自加1

           CJNE A,#3CH,GO1                ;判断秒钟是否到60秒?

           MOV 20H,#0                     ;到60秒复位

          MOV 30H,#0

          MOV 31H,#0

           MOV A,21H

           INC    A                              ;分钟自加1

          CJNE A,#3CH,GO2                ;判断分钟是否到60分?

          MOV 21H,#0H                     ;到60分复位

          MOV 32H,#0

          MOV 33H,#0

           MOV A,22H

           INC A                              ;时钟自加1

           CJNE A,#18H,GO3                ;判断时钟是否到24时?

           MOV 22H,#00H                   ;到24时复位

          MOV 34H,#0

          MOV 35H,#0

           AJMP RET0

   GO1:    MOV 20H,A            

           MOV B,#0AH

           DIV AB

           MOV 31H,A

           MOV 30H,B

           AJMP RET0

     GO2: MOV 21H,A

           MOV B,#0AH

           DIV AB

           MOV 33H,A

           MOV 32H,B

           AJMP RET0

     GO3: MOV 22H,A

           MOV B,#0AH

           DIV AB

           MOV 35H,A

           MOV 34H,B

           AJMPRET0

   RET0:   POP PSW                  ;恢复现场

           POP ACC

           RETI

         ;运行部分

DISPLAY1: MOV R0,#30H

           MOV R3,#0FEH

           MOV A,R3

PLAY1:  MOV P2,A

          MOV A,@R0

          MOV DPTR,#DSEG1       ;表首地址送DPTR

          MOVC A,@A+DPTR      

          MOV P0,A               

          LCALL DL1

          MOV P2,#0FFH              ;送高电平到P2

          MOV A,R3

          RL A                 ;

          JNB ACC.6,LD1

          INC R0

         MOV R3,A

          LJMP PLAY1               ;调用查表程序

LD1:RET

         ;延时时间

   DL1:   MOV R7,#02H              ;延时时间

   DL:     MOV R6,#020H

   DL6:   DJNZ R6,$

           DJNZ R7,DL

           RET

    DSEG1:DB 3FH,06H,5BH,4FH,66H    ;共阴极数码管编码表

          DB6DH,7DH,07H,7FH,6FH

         END

调试运行



1.jpg (9.2 KB, 下载次数: 18)

1.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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