📄 lcd.asm
字号:
;================================================================
; 文件名称: LCD.ASM
; 功能描述: 图形点阵液晶, 128*64, 显示"唐都科教仪器公司欢迎您"
;================================================================
RW BIT P1.0
RS BIT P1.1
CS2 BIT P1.2
CS1 BIT P1.3
E BIT P1.4
LED BIT P1.5
XADD DATA 30H
YADD DATA 31H
ORG 0000H
LJMP START
ORG 0100H
START: CLR LED ;关闭背景灯
MOV R4, #3FH
LCALL SENDMCMD ;打开显示
LCALL SENDSCMD
MOV R4, #0C0H
LCALL SENDMCMD ;设置起始行
LCALL SENDSCMD
LCALL CLEAR ;清屏
MOV XADD, #0BAH ;显示汉字"唐"
MOV YADD, #40H
MOV DPTR, #TANG
LCALL WRITEHZM
MOV XADD, #0BAH ;显示汉字"都"
MOV YADD, #50H
MOV DPTR, #DU
LCALL WRITEHZM
MOV XADD, #0BAH ;显示汉字"科"
MOV YADD, #60H
MOV DPTR, #KE
LCALL WRITEHZM
MOV XADD, #0BAH ;显示汉字"教"
MOV YADD, #70H
MOV DPTR, #JIAO
LCALL WRITEHZM
MOV XADD, #0BAH ;显示汉字"仪"
MOV YADD, #40H
MOV DPTR, #YI
LCALL WRITEHZS
MOV XADD, #0BAH ;显示汉字"器"
MOV YADD, #50H
MOV DPTR, #QI
LCALL WRITEHZS
MOV XADD, #0BAH ;显示汉字"公"
MOV YADD, #60H
MOV DPTR, #GONG
LCALL WRITEHZS
MOV XADD, #0BAH ;显示汉字"司"
MOV YADD, #70H
MOV DPTR, #SI
LCALL WRITEHZS
MOV XADD, #0BCH ;显示汉字"欢"
MOV YADD, #60H
MOV DPTR, #HUAN
LCALL WRITEHZM
MOV XADD, #0BCH ;显示汉字"迎"
MOV YADD, #70H
MOV DPTR, #YING
LCALL WRITEHZM
MOV XADD, #0BCH ;显示汉字"您"
MOV YADD, #40H
MOV DPTR, #NIN
LCALL WRITEHZS
MOV XADD, #0BCH ;显示"感叹号"
MOV YADD, #50H
MOV DPTR, #GANTAN
LCALL WRITEHZS
MLP0: MOV R4, #0C0H ;滚屏显示
MLP1: INC R4
LCALL SENDMCMD
LCALL SENDSCMD
MOV R0, #0FFH
MLP2: LCALL DELAY
DJNZ R0, MLP2
MOV R0, #0FFH
MLP3: LCALL DELAY
DJNZ R0, MLP3
CJNE R4, #0FFH, MLP1
AJMP MLP0
;写汉字到控制器1
;入口参数: XADD YADD 以及汉字表首地址
WRITEHZM:
MOV R4, XADD
LCALL SENDMCMD
MOV R4, YADD
LCALL SENDMCMD
MOV R3, #00H
MOV R0, #10H ;写头16字节
WMLP1: MOV A, R3
MOVC A, @A+DPTR
MOV R4, A
LCALL SENDMDATA
INC R3
DJNZ R0, WMLP1
INC XADD
MOV R4, XADD
LCALL SENDMCMD
MOV R4, YADD
LCALL SENDMCMD
MOV R0, #10H ;写后16字节
WMLP2: MOV A, R3
MOVC A, @A+DPTR
MOV R4, A
LCALL SENDMDATA
INC R3
DJNZ R0, WMLP2
RET
;写汉字到控制器2
;入口参数: XADD YADD 以及汉字表首地址
WRITEHZS:
MOV R4, XADD
LCALL SENDSCMD
MOV R4, YADD
LCALL SENDSCMD
MOV R3, #00H
MOV R0, #10H
WSLP1: MOV A, R3
MOVC A, @A+DPTR
MOV R4, A
LCALL SENDSDATA
INC R3
DJNZ R0, WSLP1
INC XADD
MOV R4, XADD
LCALL SENDSCMD
MOV R4, YADD
LCALL SENDSCMD
MOV R0, #10H
WSLP2: MOV A, R3
MOVC A, @A+DPTR
MOV R4, A
LCALL SENDSDATA
INC R3
DJNZ R0, WSLP2
RET
;入口参数: R4, 命令字节
SENDMCMD: ;向控制器1发送命令
PUSH ACC
MOV R5, #01H
LCALL DELAY
CLR RS
CLR RW
CLR CS1
MOV A, R4
MOV P0, A
CLR E
NOP
SETB E
NOP
CLR E
NOP
SETB CS1
POP ACC
RET
;入口参数: R4, 命令字节
SENDSCMD: ;向控制器2发送命令
PUSH ACC
MOV R5, #02H
LCALL DELAY
CLR RS
CLR RW
CLR CS2
MOV A, R4
MOV P0, A
CLR E
NOP
SETB E
NOP
CLR E
NOP
SETB CS2
POP ACC
RET
;入口参数: R4, 数据字节
SENDMDATA: ;向控制器1发送数据
PUSH ACC
MOV R5, #01H
LCALL DELAY
SETB RS
CLR RW
CLR CS1
MOV A, R4
MOV P0, A
CLR E
NOP
SETB E
NOP
CLR E
NOP
SETB CS1
POP ACC
RET
;入口参数: R4, 数据字节
SENDSDATA: ;向控制器2发送数据
PUSH ACC
MOV R5, #02H
LCALL DELAY
SETB RS
CLR RW
CLR CS2
MOV A, R4
MOV P0, A
CLR E
NOP
SETB E
NOP
CLR E
NOP
SETB CS2
POP ACC
RET
;状态查询
;入口参数: R5; R5=1, 表示为控制器1, R5=2为控制器2
QUERY: PUSH ACC
MOV R7, #0A0H
CLR RS
SETB RW
CJNE R5, #01, QLP1
CLR CS1
AJMP QLP2
QLP1: CLR CS2
QLP2: SETB E
MOV A, P0
CLR E
ANL A, #80H
CJNE A, #80H, QLP4
DEC R7
CJNE R7, #00H, QLP2
CJNE R5, #01H, QLP3
CLR CS1
AJMP QLP4
QLP3: CLR CS2
QLP4: POP ACC
RET
;清屏
CLEAR: MOV R0, #08H
MOV R2, #0B8H
CLP1: MOV A, R2
MOV R4, A
LCALL SENDMCMD
LCALL SENDSCMD
MOV R4, #40H
LCALL SENDMCMD
LCALL SENDSCMD
MOV R1, #40H
MOV R4, #00H
CLP2: LCALL SENDMDATA
LCALL SENDSDATA
DJNZ R1, CLP2
INC R2
DJNZ R0, CLP1
RET
;延时程序
DELAY: MOV R7, #1H
DLP1: MOV R6, #40H
DLP2: DJNZ R6, DLP2
DJNZ R7, DLP1
RET
$include (LCDH.ASM) ;包含字库
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -