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

📄 时钟温度显示1114.asm

📁 时间和温度同时拥有,一次满足你两个愿望,而且友好的界面,一定合你心意.
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;21h,22h为读取温度暂存空间,4F-4C为温度实际值百,十,个,小数值
 ;p1.0-DAT为1812数据线。P2-DATDB为液晶的数据口,35h-30h为时钟秒
;分,时存储空间.40H-43H为温度报警存储空间?44h-49h为日历空间4a为记
;录温度指示空间?
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              DATDB   EQU      P0
              TEMPL   EQU      3EH
              TEMPH   EQU      3FH
              ALARMHL EQU      40H
              ALARMHH EQU      41H
              ALARMLL EQU      42H
              ALARMLH EQU      43H
              MODE1   BIT      7EH
              MODE2   BIT      7DH
              ONALARM BIT      7CH
              ALARMM  BIT      P3.6     
              ALARMM1 BIT      P3.5
              ADR1    BIT      P1.3  
              ADR2    BIT      P1.4
              ADR3    BIT      P1.5  
              ADR4    BIT      P1.6
              K1      BIT      P2.0
              K2      BIT      P2.1
              K3      BIT      P2.2
              RS      BIT      P1.0
              RW      BIT      P1.1
              E       BIT      P1.2
              FLAG    BIT      00H
              DAT     BIT      P3.7

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           中断入口程序              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              ORG    0000H
              AJMP   START
              ORG    0003H
              RETI
              ORG    000BH
              LJMP   INTT0
              ORG    0013H
              RETI
              ORG    001BH
              RETI
              ORG    0023H
              RETI
              ORG    002BH
              RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;           主 程 序                ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:        MOV      R0,   #30H;从30H开始清零
              MOV      R7,   #0C3H
              CLR      7DH
              CLR      7EH
              CLR      7CH
              CLR      ALARMM
              CLR      ALARMM1
              SETB     P2.4
              MOV      ALARMHH,#4
CLEARDISP:    MOV      @R0,  #00H
              INC      R0
              DJNZ     R7,   CLEARDISP
              MOV      3AH,  #0AH
              MOV      TMOD, #11H;设置定时器模式
              MOV      TL0,  #0B0H
              MOV      TH0,  #0FEH
              SETB     EA
              SETB     ET0
              SETB     TR0 ;启动定时器
              MOV      R4,   #14H
              CALL     INITIAL; 启动显示
              CALL     CLS;     清屏
              MOV      4AH,  #60H;温度纪录起始单元
 START1:      ;JB       7DH,  DISPLAYMODE1
              ;JB       7EH,  JDISPLAYMODE2
              JB       7CH,  COMTEMP ;是否开温度报警
          SA: LCALL    TEMP;    读温度
              LCALL    DISPLAY25
              LCALL    DISPLAY2B
              LCALL    DISPLAY3A
              JNB      K1,   S1;判断是否进入主菜单
              SJMP     START1
           S1:LJMP     FILE;跳到主菜单
 JDISPLAYMODE2:LJMP DISPLAYMODE2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;            温度报警判断
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
COMTEMP:      PUSH     ACC
              PUSH     PSW
              PUSH     00H
              PUSH     02H
COMTEMP1:     MOV      A,4EH;报警存储单元十位与当前温度比较,相同向下判断个位
              CLR      C
              SUBB     A,ALARMHH
              JC       OOUT
              CLR      C
              MOV      A,4DH
              SUBB     A,ALARMHL
              JC       OOUT
              CLR      C
       COM1:  SETB     ALARMM
              SETB     ADR1
              CLR      ADR2
              CLR      ADR3
              CLR      ADR4
              JMP      COMTEMP3
OOUT:         CLR      ALARMM
              CLR      ADR1
              CLR      ADR2
              SETB     ADR3
              CLR      ADR4
COMTEMP3:     MOV      A,4EH;报警存储单元十位与当前温度比较,相同向下判断个位
              CLR      C
              SUBB     A,ALARMLH
              JC       COM2
              CLR      C
              MOV      A,ALARMLL
              SUBB     A,4DH
              JC       OOUT2
              CLR      C
       COM2:  SETB     ALARMM1
              CLR      ADR1
              SETB     ADR2
              CLR      ADR3
              CLR      ADR4
              JMP      OOUT3
OOUT2:        CLR      ALARMM1
OOUT3:        POP      02H
              POP      00H
              POP      PSW
              POP      ACC
              LJMP      SA

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;         显示模式B            ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAYMODE1:PUSH     ACC
             PUSH     PSW
             PUSH     00H
             PUSH     03H
DISPLAYMODE1A:LCALL   TEMP
             LCALL    CLS
             LCALL    DISPLAY10
             LCALL    DISPLAY11
             JB       7CH,  COMTEMP ;是否开温度报警
             LCALL    DL2S
             LCALL    TEMP
             LCALL    CLS
             LCALL    DISPLAY12
             LCALL    DISPLAY13
             JNB      K1, S2;判断是否进入主菜单
             JB       7CH,  JMPCOMTEMP1;是否开温度报警
             LCALL    DL2S
             LCALL    TEMP
             LCALL    CLS
             LCALL    DISPLAY14
             LCALL    DISPLAY19
             JNB      K1, S2;判断是否进入主菜单
 JMPCOMTEMP1:JB       7CH,  JMPCOMTEMP ;是否开温度报警
             LCALL    DL2S
             LCALL    TEMP
             LCALL    CLS
             LCALL    DISPLAY20
             LCALL    DISPLAY15
             JNB      K1, S2;判断是否进入主菜单
             JB       7CH,  JMPCOMTEMP;是否开温度报警
             LCALL    DL2S
             LCALL    TEMP
             LCALL    CLS
             LCALL    DISPLAY16
             LCALL    DISPLAY2A
             JNB      K1, S2 ;判断是否进入主菜单
             JB       7CH,  JMPCOMTEMP ;是否开温度报警
             LCALL    DL2S
             LCALL    TEMP
             LCALL    CLS
             LCALL    DISPLAY2
             LCALL    DISPLAY17
             JNB      K1, S2;判断是否进入主菜单
             JB       7CH,  JMPCOMTEMP ;是否开温度报警
             LCALL    DL2S
             LCALL    TEMP
             LCALL    CLS
             LCALL    DISPLAY18
             LCALL    DISPLAY3
             JNB      K1, S2;判断是否进入主菜单
             JB       7CH, JMPCOMTEMP ;是否开温度报警
             LCALL    DL2S
             LCALL    CLS
             SETB     7DH
             JNB      K1, S2;判断是否进入主菜单
             JMP      DISPLAYMODE1A
        S2:  POP      03H
             POP      00H
             POP      PSW
             POP      ACC
             LJMP     FILE
 JMPCOMTEMP: LJMP     COMTEMP ;是否开温度报警
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;            显示模式3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAYMODE2:PUSH     ACC
             PUSH     PSW
             PUSH     00H
             PUSH     03H
             LCALL    CLS
DISPLAYMODE2A:LCALL    TEMP
             LCALL    DISPLAY1;显示普通模式
             LCALL    DISPLAY2
             LCALL    DISPLAY3
             JNB      K1, S3;判断是否进入主菜单
             JB       7CH,  JMPCOMTEMP ;是否开温度报警
             JMP      DISPLAYMODE2A
        S3:  POP      03H
             POP      00H
             POP      PSW
             POP      ACC
             LJMP     FILE
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      1812部分  读取温度
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TEMP:        PUSH      ACC
             PUSH      PSW
             PUSH      00H
             PUSH      02H
             PUSH      04H
             LCALL     RETTEMP;18B20复位
             MOV       A,#0CCH; 绕过ROM
             LCALL     WRITE1812
             MOV       A,#44H; 调转换指令
             LCALL     WRITE1812
             LCALL     RETTEMP
             MOV       A,#0CCH; 绕过ROM
             LCALL     WRITE1812
             MOV       A,#0BEH;发读存储器指令
             LCALL     WRITE1812
             LCALL     READ1812
             mov       TEMPL,a;把读到的数据低位暂时存在3E里面
             lcall     read1812
             mov       TEMPH,a ;把读到的数据高位暂时存在3F里面
             LCALL     TRANNUM;数据转换
             POP       04H
             POP       02H
             POP       00H
             POP       PSW
             POP       ACC
             ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;             1812复位子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     RETTEMP:MOV    R7,#250
             SETB   DAT
             NOP
             NOP
             CLR    DAT
             DJNZ   R7,$
             MOV    R7, #35
             SETB   DAT
             DJNZ   R7,$
             JNB    DAT,SESS
             NOP
             NOP
             NOP
             JNB    DAT,SESS
             NOP
             NOP
             NOP
             JNB    DAT,SESS
             CLR    FLAG
             JMP    OUT
       SESS: DJNZ   R7,$
             SETB   FLAG
             MOV    R2,#110
             DJNZ   R2,$
         OUT:SETB   DAT
             RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;           1812写状态寄存器
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE1812:    MOV    R6,  #8
WRITE1812A :  SETB   DAT
              CLR    C
              CLR    DAT
              nop
              nop
              nop
              nop
              nop
              RRC    A
              MOV    DAT, C
              MOV    R7,  #28
              DJNZ   R7,  $
              DJNZ   R6,  WRITE1812A
              SETB   DAT
              RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;          1812d读状态寄存器
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

READ1812:     CLR    A
              MOV    R6,#8
   READ1812A: SETB   DAT
              NOP
              NOP
              CLR    DAT
              NOP
              NOP
              NOP
              SETB   DAT
              MOV    C,DAT
              nop
              nop
              nop
              MOV    R7,#23
              DJNZ   R7,$
              RRC    A
              DJNZ   R6,READ1812A
              RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;         1812温度转换
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TRANNUM:      PUSH    ACC
              PUSH    PSW
              PUSH    01H
              PUSH    00H
              MOV     R1,#3FH
TRANNUM1:     MOV     A,@R1
              JB      ACC.7, TT0
              MOV     4FH,#00H
              JMP     TT1
         TT0: MOV     4FH,#0BH;  温度为负时百位变‘-’号,TEMPH,TEMPL单元取反加1。
              CLR     A
              ADD     A,#1
              MOV     @R1,A
              DEC     R1
              MOV     A,@R1
              CLR     A
              ADD     A,#1
              MOV     @R1,A
              INC     R1
              MOV     @R1,A
         TT1: CLR     C
              RL      A
              RL      A
              RL      A
              RL      A
              RL      A
              RR      A
              MOV     R3,A
              DEC     R1
              MOV     A,@R1
              MOV     R2,A
              SWAP    A
              ANL     A,#00001111B
              ORL     A,R3
              MOV     B,#10
              DIV     AB
              MOV     4EH,A
              MOV     4DH,B
              MOV     A,R2
              ANL     A,#00001111B
              MOV     B,#6
              Mul     AB
              MOV     B,#10
              DIV     AB
              MOV     4CH,A
              POP     00H
              POP     01H
              POP     PSW
              POP     ACC
              RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      启动LCM子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INITIAL:      MOV   A,#00111000B;设置为8BIT汇流,显示两行并使用5*7的字型
              CALL  WRITE
              MOV   A,#00001100B;设置为显示器要显示,光标不显示
              CALL  WRITE
              MOV   A,#00000110B;设置为每一次资料输入后光标自动向右移一格
              CALL  WRITE
              RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;     检测显示器是否忙
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHECKBUSY:    PUSH  ACC
CHECKBUSYLOOP:CLR   E
              SETB  RW
              CLR   RS
              SETB  E
              MOV   A,DATDB
              CLR   E
              JB    ACC.7,CHECKBUSYLOOP;BF=1时忙,直到检测到BF=0时才跳出循环
              POP   ACC
              CALL  DELAY
              RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;     写寄存器子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE:       CALL  CHECKBUSY
             CLR   E
             CLR   RW
             CLR   RS
             SETB  E
             MOV   DATDB,A
             CLR   E
             RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;     写显示内容字程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITELCDDATA:CALL  CHECKBUSY
             CLR   E
             CLR   RW
             SETB  RS
             SETB  E

⌨️ 快捷键说明

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