⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 001.asm

📁 时钟电路程序代码,从12点整开始计时,可以调整时间.有三个按钮.
💻 ASM
📖 第 1 页 / 共 2 页
字号:

ORG       0000H              ;程序开始入口

                  LJMP      START

                  ORG       0003H              ;外中断0中断程序入口

                  RETI

                  ORG       000BH              ;定时器T0中断程序入口

                  LJMP      INTT0              ;跳至INTTO执行

          ORG       0013H              ;外中断1中断程序入口

          RETI

          ORG       001BH              ;定时器T1中断程序入口

          LJMP      INTT1

          ORG       0023H              ;串行中断程序入口地址

                  RETI

;---------------主程序----------------------;

             START:MOV     R0,#70H             ;70给R0,清70-7FH显示内存

                   MOV     R7,#0FH

         CLEARDISP:MOV     @R0,#00H            ;0给R0中的数为地址的内存中存放(70H)

                   INC     R0

                   DJNZ    R7,CLEARDISP

                   MOV     78H,#2              ;默认时间为12:00,闹钟5:00

                   MOV     79H,#1

                   MOV     74H,#2              ;防止上电时数码管显示00小时

                   MOV     75H,#1

                   MOV     66H,#1              ;中断退出时66H为1时,分、时计时单元数据移入显存标志

                   MOV     68H,#1              ;上电默认闹钟开状态

                   MOV     7DH,#6              ;闹钟时十位

                   MOV     7CH,#3

                   MOV     69H,#0

                   MOV     7AH,#0AH            ;放入"熄灭符"数据

                   MOV     TMOD,#11H           ;设T0、T1为16位定时器

                   MOV     TL0,#0B0H           ;50MS定时初值(T0计时用)

                   MOV     TH0,#3CH

                   SETB    EA                  ;总中断开放

                   SETB    ET0                 ;允许T0中断

                   SETB    TR0                 ;T0定时器开始计时

                   MOV     R4,#14H             ;1秒定时用初值(50MS×20)

           START1:LCALL   DISPLAY             ;显示子程序

                   LCALL   BEEP                ;闹钟查询

                   JNB      P3.4,SETTIME        ;P3.4口为0时转时间调整程序

                   JMP     START1              ;P3.4口为1时跳回START1

;-----------------------时间闹钟调整系统--------------------------;

             NFLAG:MOV          A,68H           ;设置闹钟开关状态

                   CJNE         A,#1,BEE68

                   MOV          68H,#0

                   JMP          E6

             BEE68:MOV          68H,#1

                E6:MOV          66H,#8          ;中断退出66H不为1时分、时计时单元数据移入显存标志

                   MOV          72H,7BH

                   MOV          73H,7CH

                   MOV          74H,7DH

                   MOV          75H,7EH

                   LCALL        DDL

                   LCALL        DDL

                   MOV          72H,68H

                   MOV          73H,69H

                   MOV          74H,7AH

                   MOV          75H,7AH

                   LCALL        DDL

                   LCALL        DDL

                   MOV          66H,#1

                   LJMP       START1

           SETTIME:LCALL        DDL

                   JB             P3.4,NFLAG     ;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时

                   MOV          TL1,#0B0H      ;T1闪烁定时初值

                   MOV          TH1,#3CH

                   MOV          R2,#06H        ;进入调时状态,赋闪烁定时初值

                   MOV          66H,#8         ;调闹钟时保持走时,关闭时钟显示数据

                   SETB         ET1            ;允许T1中断

                   SETB         TR1            ;开启定时器T1

              SET1:LCALL        DISPLAY        ;调用显示,防止键按下无显示

                   JNB          P3.4,SET1      ;P3.4口为0等待键释放

                   MOV       R5,#00H        ;清设置类型闪烁标志

             SETN1:INC         R5             ;闹钟分调整

              SET5:LCALL        DISPLAY

                   JB             P3.4,SET5

            SEETN1:LCALL        DDL            ;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态

                   JB             P3.4,SET6      ;键释放查询,键释放自动转调时

                   MOV               R0,#7CH

                   LCALL      ADD1

                   MOV               A,R3

                   CLR          C

                   CJNE        A,#60H,HHN1

              HHN1:JC            SEETN1

                   LCALL      CLR0

                   JMP          SEETN1

              SET6:INC         R5             ;闹钟时调整

             SEET6:LCALL        DISPLAY

                   JB          P3.4,SEET6

           SEETNH1:LCALL        DDL

                   JB             P3.4,SETF

                   MOV          R0,#7EH

                   LCALL        ADD1

                   MOV          A,R3

                   CLR          C

                   CJNE        A,#24H,HOUU1

             HOUU1:JC           SEETNH1

                   LCALL      CLR0

                    JMP       SEETNH1

              SETF:LCALL        DISPLAY

                   JB             P3.4,SETF

                   LCALL        DDL

                   JNB          P3.4,SETOUT     ;短按调时,长按退出

                   CLR          ET0

                   CLR          TR0

                   MOV       70H,#00H        ;设定后的时间从00秒开始走时

                   MOV       71H,#00H

                   INC         R5

              SET3:LCALL        DISPLAY

                   JB             P3.4,SET3

             SETMM:LCALL        DDL

                   JB             P3.4,SET4

                   MOV               R0,#77H

                   LCALL      ADD1

                   MOV               A,R3

                   CLR          C

                   CJNE        A,#60H,MMH

               MMH:JC          SETMM

                   LCALL      CLR0

                   AJMP         SETMM

              SET4:INC          R5

             SEET4:LCALL        DISPLAY

                   JB          P3.4,SEET4

             SETHH:LCALL        DDL

                   JB             P3.4,SETOUT1

                   MOV          R0,#79H

                   LCALL        ADD1

                   MOV          A,R3

                   CLR          C

                   CJNE        A,#24H,HOUU

              HOUU:JC           SETHH

                   LCALL      CLR0

                   AJMP       SETHH

           SETOUT1:SETB     ET0

                   SETB       TR0             ;计时开始

            SETOUT:MOV     R5,#00H         ;清设置类型闪烁标志

                   CLR        TR1             ;关闭T1

                   CLR        ET1             ;关T1中断

                   MOV          66H,#1

           SETOUT2:LCALL        DISPLAY

                   JNB          P3.4,SETOUT2

                   LJMP        START1

;--------------------------延时1秒钟-----------------------;

               DDL:MOV          18H,#36

              DDL0:MOV          17H,#239

              DDL1:LCALL        DISPLAY

                   DJNZ         17H,DDL1

                   DJNZ         18H,DDL0

                   RET

;----------------------------T0中断程序------------------------;

            INTT0: PUSH  ACC                   ;打包

                   PUSH  PSW

                   CLR   ET0

                   CLR   TR0

                   MOV   A,#0B7H

                   ADD   A,TL0

                   MOV   TL0,A

                   MOV   A,#3CH

                   ADDC  A,TH0

                   MOV   TH0,A

                   SETB  TR0

                   DJNZ  R4, OUTT0             ;20次中断未到中断退出

           ADDSS:  MOV R4,#14H               ;20次中断到(1秒)重赋初值

                   MOV         R0,#71H               ;指向秒计时单元(70-71H)

                   ACALL ADD1                  ;调用加1程序(加1秒操作)

                   MOV   A,R3                  ;秒数据放入A(R3为2位十进制数组合)

                   CLR   C                     ;清进位标志

                   CJNE  A,#60H,ADDMM

           ADDMM:  JC         OUTT01                ;小于60秒退出

                   ACALL CLR0                  ;等于或大于60秒清0

                   MOV  R0,#77H               ;指向分计时单元(76H-77H)

                   ACALL ADD1

                   MOV         A,R3

                   CLR   C

                   CJNE  A,#60H,ADDHH

            ADDHH: JC     OUTT0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -