MOV A,#0C0H ;设置 LCD 的第二行地址
LCALL WCOM
FILL: CLR A ;填入字符 MOVC A,@A+DPTR ;由消息区取出字符 CJNE A,#0,LC1 ;判断是否为结束码 RET
LC1: LCALL WDATA ;写入数据 INC DPTR ;指针加1 JMP FILL ;继续填入字符 RET
;*************************** 清
除
1
**************************** CLR_LINE: MOV R0,#24 CL1: MOV A,#' ' LCALL WDATA DJNZ R0,CL1 RET
DE: MOV R7,#250 DJNZ R7,$ RET
;**************************
显
************************************* SHOW_DIG2L: MOV B,#100 DIV AB MOV A,#0AH XCH A,B DIV AB ADD A,#30H
36
行
LCD
的
示
数
字
符据
PUSH B MOV B,LCD_X LCALL LCDP2 POP B INC LCD_X MOV A,B MOV B,LCD_X ADD A,#30H LCALL LCDP2 RET
;*************************** ************************* CONV:
MOV A,73H
MOV LCD_X,#8 CJNE A,#1,CONV1 JMP CONV2 CONV1: CJNE A,#0BH,CONV11
MOV A,#\
JMP CONV111 CONV11: MOV A,#\ CONV111: MOV B,LCD_X LCALL LCDP2 JMP CONV3
CONV2: LCALL SHOW_DIG2 CONV3: INC LCD_X MOV A,72H LCALL SHOW_DIG2 INC LCD_X
LCD 显示数据处
;加载百位数据
;设置位置
;\号显示
;\号不显示
;显示数据
;十位
37
理子程序
MOV A,71H LCALL SHOW_DIG2 INC LCD_X MOV A,#'.' MOV B,LCD_X LCALL LCDP2
MOV A,70H INC LCD_X LCALL SHOW_DIG2 RET
;************************
复
;个位
;加载小数点位 ;设置显示位置 ;显示数据
制暂存器子程序
******************************* WRITE_E2:
LCALL RST
;跳过ROM匹配
MOV A,#0CCH LCALL WRITE MOV A,#48H LCALL WRITE RET
;把暂存器里的温度报警值拷贝到EEROM
;************************将自定义字符写入********************* STORE_DATA:
MOV A,#40H LCALL WCOM MOV R2,#08H MOV DPTR,#D_DATA MOV R3,#00H S_DATA: MOV A,R3 MOVC A,@A+DPTR
38
LCD的CGRAM中
LCALL WDATA INC R3 DJNZ R2,S_DATA RET
;写入数据
D_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H ;************************ DS18B20
暂
存
器
操
作
子
程
序
*************************** RE_18B20:JB FLAG1,RE_18B20A RET
;**********************
响
应
***************************************************** RE_18B20A:
LCALL RST
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE WR_SCRAPD:
MOV A,#4EH ;写暂器
LCALL WRITE MOV A,TEMP_TH ;TH(报警上限)
LCALL WRITE MOV A,TEMP_TL ;TL(报警下限)
LCALL WRITE MOV A,#7FH ;12位精度
LCALL WRITE RET
;*********************** DS18B20数据写入操************************
WRITE: MOV R2,#8 ;一共8位数据 CLR C
39
作子程后
序
WR1: CLR DQ 状态
MOV R3,#07
;开始写入DS18B20总线要处于复位(低)
DJNZ R3,$ ;总线复位保持16微妙以上
RRC A ;把一个字节DATA 分成8个BIT环移给C MOV DQ,C MOV R3,#3CH
DJNZ R3,$ ;等待100微妙 SETB DQ NOP
DJNZ R2,WR1 ;写入下一位 SETB DQ RET
;**************写命令************************************** WCOM: ;以8位控制方式将命令写至LCD MOV lcd,A ;写入命令
CLR RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲 CLR RW SETB EN
LCALL DELAY1 CLR EN RET
;**************写数据************************************** WDATA: ;以8位控制方式将数据写至LCD MOV lcd,A ;写入数据 SETB RS CLR RW
SETB EN CALL DE
40
;写入一位
;重新释放总线