基于液晶显示的单片机温度控制设计 第7页
RET
;---------------------------------------------------------
SET_LCD: ;对 LCD 做初始化设置及测试
CLR LCD_EN
CALL INIT_LCD ;初始化 LCD
CALL STORE_DATA ;将自定义字符存入LCD的CGRAM
RET
INIT_LCD: ;8位I/O控制 LCD 接口初始化
MOV A,#38H ;双列显示,字形5*7点阵
CALL WCOM
CALL DELAY1
MOV A,#38H
CALL WCOM
CALL DELAY1
MOV A,#38H
CALL WCOM
CALL DELAY1
MOV A,#0CH ;开显示,显示光标,光标不闪烁
CALL WCOM
CALL DELAY1
MOV A,#01H ;清除 LCD 显示屏
CALL WCOM
CALL DELAY1
RET
;==================================================
CLR_LINE1: ;清除LCD的第一行字符
MOV A,#80H ;设置 LCD 的第一行地址
CALL WCOM
MOV R0,#24 ;设置计数值
C1: MOV A,#' ' ;载入空格符至LCD
CALL WDATA ;输出字符至LCD
DJNZ R0,C1 ;计数结束
RET
;==================================================
LCD_PRINT: ;在LCD的第一行或第二行显示字符
CJNE A,#1,LINE2 ;判断是否为第一行
LINE1: MOV A,#80H ;设置 LCD 的第一行地址
CALL WCOM ;写入命令
CALL CLR_LINE ;清除该行字符数据
MOV A,#80H ;设置 LCD 的第一行地址
CALL WCOM ;写入命令
JMP FILL
LINE2: MOV A,#
CALL WCOM ;写入命令
CALL CLR_LINE ;清除该行字符数据
MOV A,#
CALL WCOM
FILL: CLR A ;填入字符
MOVC A,@A+DPTR ;由消息区取出字符
CJNE A,#0,LC1 ;判断是否为结束码
RET
LC1: CALL WDATA ;写入数据
INC DPTR ;指针加1
JMP FILL ;继续填入字符
RET
;=========================================
CLR_LINE: ;清除该行 LCD 的字符
MOV R0,#24
CL1: MOV A,#' '
CALL WDATA
DJNZ R0,CL1
RET
DE: MOV R7,#250
DJNZ R7,$
RET
;============================================
WCOM: ;以8位控制方式将命令写至LCD
MOV P0,A ;写入命令
CLR LCD_RS ;RS=L,RW=L,D0-D7=指令码,E=高脉冲
CLR LCD_RW
SETB LCD_EN
ACALL DELAY1
CLR LCD_EN
RET
;=============================================
WDATA: ;以8位控制方式将数据写至LCD
MOV P0,A ;写入数据
SETB LCD_RS
CLR LCD_RW
SETB LCD_EN
CALL DE
CLR LCD_EN
CALL DE
RET
;=============================================
;PRINT A CHAR ON LINE 1
;A=ASC DATA, B=LINE X POS
;==============================================
LCDP1: ;在LCD的第一行显示字符
80H ;设置LCD的第一行地址
CALL WCOM ;写入命令
POP ACC ;由堆栈取出A
CALL WDATA ;写入数据
100
BL2: CALL DEX1
CPL BEEP
DJNZ R6,BL2
MOV R5,#10
CALL DELAY
RET
DEX1: MOV R7,#180
DE2: NOP
50
DL1: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL1
DJNZ R5,DELAY
RET
DELAY1: ;延时5MS
R7,$
DJNZ R6,DL2
RET
;================================================
END
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页