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

📄 时钟程序0701.asm

📁 一个很好用的时钟程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;20H标志位
          ;00H位待机标志位(暂不用)
          ;01H设定时的闪烁标志
          ;02H运行标志
          ;03H暂停标志位
          ;(04H开机状态)没有用上
          ;05H为是否有调整预置时间标志
          ;06H防抖标志
          ;07H闪烁标志
 ;21H标志位
          ;08H药量档
          ;09H雾化强度档
          ;0AH设定时间
          ;0BH温度
          ;0CH运行时间
          ;0DH总时间
          ;0EH实时温度
          ;0FH查询键状态标志
 ;22H-29H键变化取样单元
 ;2EH2FH按键防抖兼EEPROM测试单元

 ;30-38H为段码显示缓冲
 ;39H为音乐计数
 ;3AH-3BH为参与药量转换时间中除法的高低字节(实际上是药量*10)
 ;3CH为雾化强度除数地址(实际上是雾化强度*10)
 ;3DH为药量转换成时间的商,形式为BCD码,单位为分钟
 ;3FH为雾化强度被除数地址(实际上是雾化强度*10)

 ;40-48H为位码显示缓冲
 ;49H为20MS中断次数计数单元
 ;4A-4CH为音乐停止软延时程序
 ;4EH-4FH为返回时间档延时时限

 ;50H为一秒时间记数单元
 ;51-56H分别为00:00:00送显阿拉伯数据
 ;5AH,5BH,5CH,5DH为参与BCD码减法的被减数与减数单元
 ;5EH,5FH分别为按键连发延时时限

 ;60H,61H分别为药量的低位和高位,形式为BCD码
 ;62H,63H为定时时间,形式为BCD码
 ;64H为雾化强度等级计数单元,形式为BCD码
 ;65H为秒记数单元
 ;66H为分记数单元
 ;67H为时记数单元
 ;68H-69H分别为预置时间的分钟单元和小时单元
 ;6AH-6BH-6CH分别为总时间的分钟,小时,百小时计数单元,形式为压缩BCD码
 ;6DH为温度记数单元
 ;6EH,6FH为实时温度

 ;70H,71H分别为20H,21H两个字节状态标志位的贝份
 ;72H,73H分别为设定闪烁延时时限
;************************************************************************
MED      BIT     08H
INTEN    BIT     09H
SETTIME  BIT     0AH
TEMP     BIT     0BH
TIME     BIT     0CH
ALLTIME  BIT     0DH
TEMPTEST BIT     0EH
CHANGE   BIT     0FH
DI      BIT     P3.7
CK      BIT     P3.6
STROBE  BIT     P3.3
PTC     BIT     P2.6
WUZH    BIT     P2.5
MOTOR   BIT     P2.7
WUQI    BIT     P2.4
BEE     BIT     P0.7
WATER   BIT     P3.5
TEMP1   BIT     P0.0
TEMP2   BIT     P0.1
SI      BIT     P2.1
SO      BIT     P2.2
SCK     BIT     P2.0
EECS    BIT     P2.3
MED_H       EQU     60H              ;药量高字节
MED_L       EQU     61H              ;药量低字节
EMEND_L     EQU     62H              ;调整量低字节
EMEND_H     EQU     63H              ;调整量高字节
INTENSITY   EQU     64H              ;雾化强度
SECOND      EQU     65H              ;实时时间秒
MINUTE      EQU     66H              ;实时时间分
HOUR        EQU     67H              ;实时时间小时
MINUTE_SET  EQU     68H              ;预置时间分钟
MINUTE_STEP EQU     69H              ;预置时间分钟记数单元
MINUTE_ALL  EQU     6AH              ;总时间分
HOUR1_ALL   EQU     6BH              ;总时间十小时
HOUR2_ALL   EQU     6CH              ;总时间百小时
TEMPERATURE EQU     6DH              ;设定温度
TEMP_L      EQU     6EH              ;实时温度计数低字节
TEMP_H      EQU     6FH              ;实时温度计数高字节
 ;**************************************************************************************
              ORG 0000H
          LJMP    START
              ORG 000BH
          LJMP    INT_T0
              RETI
              ORG 001BH
          LJMP    INT_T1
              RETI
              ORG 002BH
          CLR TF2
          INC 39H                   ;中断服务,中断计数器加1
          MOV TH2,#0EAH
          MOV TL2,#0FFH             ;12M晶振,形成10毫秒中断
INT_T2_QU:RETI
;**************************************************
START:    MOV    SP,#0A0H
          NOP
          NOP
          MOV    A,#00H
          MOV    R0,#7FH
CLR_RAM:  MOV    @R0,A
          DJNZ   R0,CLR_RAM
          NOP
          NOP
      	  MOV    TMOD,#11H         ;T0设定为十六位定时器
          SETB   PT2
      	  MOV    TH0,#00H          ;定时置初值
     	  MOV    TL0,#0FCH
          MOV    50H,#10           ;一秒时间计数
          MOV    TH1,#3CH
          MOV    TL1,#0B0H
          MOV    TH2,#0D8H
          MOV    TL2,#0EFH
          MOV    R0,#30H
          MOV    R1,#40H
          MOV    R2,#09H
          SETB   EA
          SETB   PT2
          SETB   ET0
          SETB   ET1
          SETB   ET2
          NOP
          NOP
          SETB   TR0
          CALL   TEST_EEPROM      ;测试EEPROM
          CALL   TEST_TEMP        ;测试温度传感器
          ;CALL   TEST_WATER       ;测试水位
 ;******************************
          ;JNB    02H,BEGIN1
          NOP
          NOP
          MOV    2EH,#01H
          MOV    2FH,#01H          ;防抖清时限
          MOV    4EH,#0FFH         ;返回时间显示清时限
          MOV    4FH,#50H

          MOV    72H,#1
          MOV    73H,#1

          MOV    30H,#0FEH         ;第1位数码管内容
          MOV    31H,#0FEH         ;第2位数码管内容
          MOV    32H,#0FEH         ;第3位数码管内容
          MOV    33H,#0FEH         ;第4位数码管内容
          MOV    34H,#01H          ;秒闪亮与不亮
          MOV    35H,#00H          ;时间指示取反
          MOV    36H,#00H          ;总时间指示取反
          MOV    37H,#00H          ;温度指示取反
          MOV    38H,#00H          ;雾化强度批示灯

          MOV    40H,#0BFH         ;点亮第1位数码管
          MOV    41H,#0DFH         ;点亮第2位数码管
          MOV    42H,#0EFH         ;点亮第3位数码管
          MOV    43H,#0F7H         ;点亮第4位数码管
          MOV    44H,#0DFH         ;秒闪指示
          MOV    45H,#0FBH         ;点亮时间指示灯(0FB)
          MOV    46H,#0FDH         ;点亮总时间指示灯0FD)
          MOV    47H,#0FEH         ;点亮温度指示灯(0FE)
          MOV    48H,#7FH

          ;MOV    R0,#60H
          ;MOV    R6,#8
          ;CALL   REEPROM           ;WATCHDOG复位读EEPROM数据
          ;MOV    R0,#68H
          ;MOV    R6,#8
          ;CALL   REEPROM
          MOV    SECOND,#00H
          MOV    MINUTE,#00H
          MOV    HOUR,#00H

          MOV    MED_H,#10H
          MOV    MED_L,#00H
          ;MOV    MINUTE_STEP,#01H
          MOV     INTENSITY,#1

          ;CLR     00H              ;非待机状态
          SETB    02H
          CLR     03H              ;关暂停
          SETB    05H              ;置时间改动标志
          SETB    07H
          CLR     ALLTIME
          CLR     SETTIME
          SETB    TIME
          SETB    TR1
          SETB    EA
          SETB    ET1
          JMP    RESET
 BEGIN1:  CALL   BEGIN
 ;****************************************************************************
 RESET:  NOP
         NOP
         ;CALL    TEST_WATER         ;反复监测水位
         NOP
         NOP
         CALL    ANT_SET0           ;SET键处理子程序
         NOP
         NOP
         CALL    ANT_SET1           ;SET键处理子程序
         NOP
         NOP
         CALL    ANT_SET2           ;SET键处理子程序
         NOP
         NOP
         CALL    ANT_SET3           ;SET键处理子程序
         NOP
         NOP
         CALL    ANT_SET4           ;SET键处理子程序
         NOP
         NOP
         CALL    SELECTION         ;功能指示处理子程序
         NOP
         NOP
         CALL    ANT_START         ;START键处理子程序
         NOP
         NOP
         CALL    LIGHT_4           ;档位显示处理子程序
         NOP
         NOP
         CALL    RETUN_TIME        ;返回时间显示时限
         NOP
         NOP
         CALL    ANT_ADD           ;ADD键处理子程序
         NOP
         NOP
         CALL    ANT_SUBB          ;SUBB键处理子程序
         NOP
         NOP
         CALL    FDOU              ;按键防抖子程序
         NOP
         NOP
         CALL    coruscate         ;功能闪烁子程序
         NOP
         NOP
         CALL    AN_LFA            ;加键连发子程序
         NOP
         NOP
         CALL    AN_LFB            ;减键连发子程序
         NOP
         NOP
         CALL    MED_TIME          ;药量转换为雾化时间子程序
         NOP
         NOP
         ;CALL    AN_SETLF          ;SET键连发子程序
         NOP
         NOP
         ;CALL    MUSIC_0          ;音乐终止软延时子程序
         NOP
         NOP
         ;MOV     70H,20H
         ;MOV     71H,21H

RESET_QU:JMP     RESET
 ;****************************************************************************
INT_T0:   PUSH   PSW               ;T0显示扫描中断处理子程序
          PUSH   ACC
          PUSH   00H
          PUSH   01H
          PUSH   02H
          PUSH   03H
          PUSH   04H
          PUSH   05H
          PUSH   06H
          PUSH   07H
          SETB   PSW.3
          CLR    PSW.4

          MOV    TL0,#00H
          MOV    TH0,#0FCH         ;扫描时间初值
          MOV    A,@R1          ;R1为段码地址
          CALL   XS_OUT
          INC    R1
          NOP
          NOP
          MOV    A,@R0          ;R0为位码地址
          CALL   XS_OUT
          INC    R0
          NOP
          NOP
          DJNZ   R2,INTT0_QU       ;R2为显示位码数目
          MOV    R0,#30H
          MOV    R1,#40H
          MOV    R2,#09H

 INTT0_QU:SETB   STROBE              ;锁存
          CLR    STROBE
          CLR    PSW.3
          CLR    PSW.4
          POP    07H
          POP    06H
          POP    05H
          POP    04H
          POP    03H
          POP    02H
          POP    01H
          POP    00H
          POP    ACC
          POP    PSW
          RETI
;*****************************************************************************






;*****************************************************************************
INT_T1:   PUSH   PSW               ;秒中断处理子程序
          PUSH   ACC
          PUSH   00H
          PUSH   01H
          PUSH   02H
          PUSH   03H
          PUSH   04H
          PUSH   05H
          PUSH   06H
          PUSH   07H
          MOV    TH1,#0F6H
          MOV    TL1,#5CH          ;5毫秒置初值
          CALL   WU_NUMBER         ;调雾化强度处理子程序
          DEC    50H
          MOV    A,50H
          XRL    A,#100
          JNZ    CPL_SAN1          ;半秒闪烁一次
          JB     TEMPTEST,CPL_SAN1      ;运行时在总时间和温度档不能秒闪不能有闪烁
          JB     ALLTIME,CPL_SAN1
          JB     INTEN,CPL_SAN1
          JB     MED,CPL_SAN1
          JB     SETTIME,CPL_SAN1
          JB     TEMP,CPL_SAN1
          SETB   07H
          NOP
          NOP

 CPL_SAN1:
          MOV    A,50H
          XRL    A,#00H
          JNZ    CPL_A             ;一秒时间未到退出
          JMP    CPL_A1            ;时间到
 CPL_A:
          CALL   CPL_ABCD
          POP    07H
          POP    06H
          POP    05H
          POP    04H
          POP    03H
          POP    02H
          POP    01H
          POP    00H
          POP    ACC
          POP    PSW
          RETI
          NOP
          NOP
 CPL_A1:  CLR    07H               ;时间到秒闪暗
          MOV    50H,#200           ;置一秒初值
 ;*****************************
          MOV    A,#01H            ;2AH秒单元加1
          ADD    A,SECOND
          DA     A                 ;换算成BCD码
          MOV    SECOND,A
          NOP
          NOP
          MOV    51H,SECOND           ;取秒钟个位放于51H,十位放于52H
          MOV    52H,SECOND
          MOV    A,#0FH
          ANL    A,51H
          MOV    51H,A
          MOV    A,#0F0H
          ANL    A,52H
          SWAP   A
          MOV    52H,A
 ;***************
          MOV    DPTR,#TAB
          MOV    A,51H
          MOVC   A,@A+DPTR
          JB     TEMPTEST,CPL_1         ;非时间档秒个位不更新
          JB     ALLTIME,CPL_1
          JB     INTEN,CPL_1
          JB     MED,CPL_1
          JB     SETTIME,CPL_1
          JB     TEMP,CPL_1
          ;MOV    33H,A
 CPL_1:   NOP
          NOP
          MOV    A,52H
          MOVC   A,@A+DPTR
          JB     TEMPTEST,CPL_2         ;非时间档秒十位不更新
          JB     TEMPTEST,CPL_2         ;非时间档秒个位不更新
          JB     ALLTIME,CPL_2
          JB     INTEN,CPL_2
          JB     MED,CPL_2
          JB     SETTIME,CPL_2
          JB     TEMP,CPL_2
          ;MOV    32H,A
 ;**************************
CPL_2:    MOV    A,52H
          CJNE   A,#06H,CPL_B      ;不足一分钟退出
          JMP    CPL_B1            ;迢过一分钟
CPL_B:    CALL   CPL_ABCD
          POP    07H

⌨️ 快捷键说明

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