📄 lcd.asm
字号:
NAME LCD
PUBLIC WRCOM,WRDATA, WR_Con, WR_Data
PUBLIC Disp_LineR, Disp_LineR1, Disp_LineDP, Disp_LineDP1
PUBLIC Clear_LCD, Close_Cursor, LCD_INIT, Set_Cursor
;RS----A0 ,R/W---A1
Y12864_W_CON XDATA 0FA00H ;写指令地址
Y12864_R_CON XDATA 0FA02H ;读取忙状态地址
Y12864_W_Data XDATA 0FA01H ;写数据地址
Y12864_R_Data XDATA 0FA03H ;读数据地址
Y12864_CODE SEGMENT CODE
RSEG Y12864_CODE
;写指令
;写命令到LCD,参数A
WR_Con:
WRCOM: PUSH DPL
PUSH DPH
MOV DPTR,#Y12864_W_CON ;写控制命令
MOVX @DPTR,A
NOP
MOV DPTR,#Y12864_R_CON ;读忙状态
WR_Con1: MOVX A,@DPTR
JB ACC.7,WR_Con1 ;检查液晶显示是否处于忙状态
POP DPH
POP DPL
RET
;写数据
;写数据到LCD,参数A
WR_Data:
WRDATA: PUSH DPL
PUSH DPH
MOV DPTR,#Y12864_W_Data
MOVX @DPTR,A
MOV DPTR,#Y12864_R_CON
WR_Data1: MOVX A,@DPTR
JB ACC.7,WR_Data1 ;检查液晶显示是否处于忙状态
POP DPH
POP DPL
RET
;从位置(a)开始显示DPTR指向的一行
Disp_LineDP: CALL WR_Con ;定位,第一个数据显示的位置
Disp_LineDP1: CLR A
MOVC A,@A+DPTR
JZ Disp_LineDP2 ;判断是否到了显示结束标志
INC DPTR
CALL WR_Data
SJMP Disp_LineDP1
Disp_LineDP2: RET
;从位置(a)开始显示R0指向的一行
Disp_LineR: CALL WR_Con ;定位,第一个数据显示的位置
Disp_LineR1: MOV A,@R0
JZ Disp_LineR2 ;判断是否到了显示结束标志
INC R0
CALL WR_Data
SJMP Disp_LineR1
Disp_LineR2: RET
;清屏
Clear_LCD: MOV A,#1H
CALL WR_Con
RET
;关光标
Close_Cursor: MOV A,#0CH
CALL WR_Con
RET
;********************************
;液晶初始化
;********************************
LCD_INIT: MOV A,#30H ;不调用扩充
LCALL WR_Con
MOV A,#04H ;点设定,游标向右移
LCALL WR_Con
MOV A,#0FH ;开光标
LCALL WR_Con
MOV A,#0CH ;关光标
LCALL WR_Con
MOV A,#01H ;清屏
LCALL WR_Con
NOP
MOV A,#02H ;地址归位,光标移到第1行第1列
LCALL WRCOM
RET
;设置光标 A--光标位置
Set_Cursor: PUSH ACC
MOV A,#0EH ;光标锁定相应调整的时间内容下
CALL WRCOM
POP ACC
CALL WRCOM
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -