基于液晶显示的单片机温度控制设计 第6页
CLR C
MOV A,TEMPL ;二进制数求补(双字节)
CPL A ;取反加1
ADD A,#01H
MOV TEMPL,A
MOV A,TEMPH
CPL A
ADDC A,#00H
MOV TEMPH,A
SJMP TEMPC11
TEMPC1: MOV TEMPHC,#0AH
TEMPC11: MOV A,TEMPHC
SWAP A
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH ;乘0.0625
MOV DPTR,#TEMPDOTTAB
MOVC A,@A+DPTR
MOV TEMPLC,A ;TEMPLC LOW=小数部分 BCD
MOV A,TEMPL ;整数部分
ANL A,#
SWAP A
MOV TEMPL,A
MOV A,TEMPH ;取出低四位
ANL A,#0FH
SWAP A
ORL A,TEMPL ;重新组合
MOV TEMP_ZH,A
LCALL HEX2BCD1
MOV TEMPL,A
ANL A,#
SWAP A
ORL A,TEMPHC ;TEMPHC LOW = 十位数 BCD
MOV TEMPHC,A
MOV A,TEMPL
ANL A,#0FH
SWAP A ;TEMPLC HI = 个位数 BCD
ORL A,TEMPLC
MOV TEMPLC,A
MOV A,R4
JZ TEMPC12
ANL A,#0FH
SWAP A
MOV R4,A
MOV A,TEMPHC ;TEMPHC HI = 百位数 BCD
ANL A,#0FH
ORL A,R4
MOV TEMPHC,A
TEMPC12: RET
;---------------------------------------------------------------
HEX2BCD1:
MOV B,#064H ;十优进制-> BCD
DIV AB ;B= A % 100
MOV R4,A ;R7 = 百位数
MOV A,#0AH
XCH A,B
DIV AB ;B = A % B
SWAP A
ORL A,B
RET
;-------------------------------------------------------------
; 小数部分码表
;-------------------------------------------------------------
TEMPDOTTAB:
DB 00H,00H,01H,01H,02H,03H,03H,04H
DB 05H,05H,06H,06H,07H,08H,08H,09H
;=====================================================
LOOK_ALARM:
MOV DPTR,#M_ALAX2 ;指针指到显示信息区
MOV A,#2 ;显示在第二行
CALL LCD_PRINT
MOV A,#
CALL TEMP_BJ1
MOV A,TEMP_TH ;加载TH数据
MOV LCD_X,#3 ;设置位置
CALL SHOW_DIG2H ;显示数据
MOV A,#0CEH
CALL TEMP_BJ1
MOV A,TEMP_TL ;加载TL数据
MOV LCD_X,#12 ;设置位置
CALL SHOW_DIG
RET
;--------------------------------------------
M_ALAX1:
DB " LOOK ALERT CODE",
DB "TH: TL: ",0
;--------------------------------------------
TEMP_BJ1:
CALL WCOM
MOV DPTR,#BJ2 ;指针指到显示信息区
MOV R1,#0
MOV R0,#2
BBJJ2: MOV A,R1
MOVC A,@A+DPTR
CALL WDATA
INC R1
DJNZ R0,BBJJ2
RET
BJ2:
DB 00H,"C"
;---------------------------------------------------
SHOW_DIG2H: ;在 LCD 的第二行显示数字
MOV B,#100
DIV AB
ADD A,#30H
PUSH B
MOV B,LCD_X
CALL LCDP2
POP B
MOV A,#0AH
XCH A,B
DIV AB
ADD A,#30H
INC POP B
INC LCD_X
MOV A,B
MOV B,LCD_X
ADD A,#30H
CALL LCDP2
RET
SHOW_DIG
MOV B,#100
DIV AB
MOV A,#0AH
XCH A,B
DIV AB
ADD A,#30H
PUSH B
MOV B,LCD_X
CALL LCDP2
POP B
INC LCD_X
MOV A,B
MOV B,LCD_X
ADD A,#30H
CALL LCDP2
RET
;-------------------------------------------------------------
;显示区 BCD 码温度值刷新子程序
;-------------------------------------------------------------
DISPBCD:A,TEMPLC
ANL A,#0FH
MOV 70H,A ;小数位
MOV A,TEMPLC
SWAP A
ANL A,#0FH
MOV 71H,A ;个位
MOV A,TEMPHC
MOV A,TEMPHC
SWAP A
ANL A,#0FH
MOV 73H,A ;百位
MOV A,TEMPHC
ANL A,#
CJNE A,#010H,DISPBCD0
SJMP DISPBCD2
DISPBCD0: ;十位数是0
MOV A,TEMPHC
SWAP A
ANL A,#0FH
MOV 73H,#0AH ;符号位不显示
MOV 72H,A ;十位数显示符
CONV:
MOV A,73H ;加载百位数据
MOV LCD_X,#6 ;设置位置
CJNE A,#1,CONV1
JMP CONV2
CONV1: MOV A,#" "
X
MOV A,72H ;十位
CALL SHOW_DIG2
INC LCD_X
MOV A,71H ;个位
CALL SHOW_DIG2
INC LCD_X
MOV A,#'.'
MOV B,LCD_X
CALL LCDP2
MOV A,70H ;加载小数点位
INC LCD_X ;设置位置
CALL SHOW_DIG2 ;显示数据
RET
;-------------------------------------------------------
SHOW_DIG2: ;在 LCD 的第二行显示数字
ADD A,#30H
MOV B,LCD_X
;设置显示地址
ADD A,#
CALL WCOM ;写入命令
POP ACC ;由堆栈取出A
CALL WDATA ;写入数据
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页