MOV A,TEMPHC ANL A,#0FH
MOV 72H,A ;十位 MOV A,TEMPHC SWAP A ANL A,#0FH
MOV 73H,A ;百位 DISPBCD2: RET
;*************************** LCD 显示数据处理子程序 ************************* CONV: MOV A,73H MOV LCD_X,#6 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
36
CONV2: LCALL SHOW_DIG2 CONV3: INC LCD_X MOV A,72H LCALL SHOW_DIG2 INC LCD_X
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
;*************************** 第二行显示数字子程序 ************************* SHOW_DIG2:ADD A,#30H MOV B,LCD_X LCALL LCDP2 RET
37
;*************************** 第二行显示数字子程序 ************************* LCDP2: PUSH ACC
MOV A,B ;设置显示地址
ADD A,#0C0H ;设置LCD的第二行地址 LCALL WCOM ;写入命令 POP ACC ;由堆栈取出A LCALL WDATA ;写入数据 RET
;*************************** 对 LCD 做初始化设置及测试************************* SET_LCD: CLR LCD_EN
LCALL INIT_LCD ;初始化 LCD
LCALL STORE_DATA ;将自定义字符存入LCD的CGRAM RET
;******************************
LCD
初
始
化
***********************************
INIT_LCD: MOV A,#38H ;2行显示,字形5*7点阵
38
LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1 MOV A,#38H LCALL WCOM LCALL DELAY1
MOV A,#0CH 闪烁
LCALL WCOM LCALL DELAY1
MOV A,#01H LCALL WCOM LCALL DELAY1 RET
;***************************** **************************
CLR_LINE1:MOV A,#80H LCALL WCOM MOV R0,#24 39
;开显示,显示光标,光标不;清除 LCD 显示屏 清除LCD的第一行字符 ;设置 LCD 的第一行地址 设置计数值
;
C1: MOV A,#' ' ;载入空格符至LCD LCALL WDATA ;输出字符至LCD DJNZ R0,C1 ;计数结束 RET
;************************* LCD的第一行或第二行显示字符 **********************
LCD_PRINT:CJNE A,#1,LINE2 ;判断是否为第一行 LINE1: MOV A,#80H ;设置 LCD 的第一行地址 LCALL WCOM ;写入命令 LCALL CLR_LINE ;清除该行字符数据 MOV A,#80H ;设置 LCD 的第一行地址 LCALL WCOM ;写入命令 JMP FILL
LINE2: MOV A,#0C0H ;设置 LCD 的第二行地址 LCALL WCOM ;写入命令 LCALL CLR_LINE ;清除该行字符数据 MOV A,#0C0H ;设置 LCD 的第二行地址 LCALL WCOM
FILL: CLR A ;填入字符
MOVC A,@A+DPTR ;由消息区取出字符 CJNE A,#0,LC1 ;判断是否为结束码 RET
40