📄 时钟温度显示1114.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;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 + -