?? 時鐘溫度顯示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 + -