📄 lm3033.asm
字号:
RS EQU P3.2
RW EQU P3.4
E EQU P3.5
LCD_BUS EQU P1 ;8位数据线接P1口
ORG 0000H
;********************显示初始化**********************
MOV SP,#5FH
MOV A,#30H ;30H--基本指令操作
LCALL WR_COM
LCALL DY_100US
MOV A,#30H ;8_BIT数据流
LCALL WR_COM
LCALL DY_100US
MOV A,#0CH ;开显示,无游标不反白
LCALL WR_COM
LCALL DY_100US
MOV A,#01H ;清除显示
LCALL WR_COM
LCALL DY_100US
MOV A,#06H ;指定在资料写入或读取时,光标的移动方向 及
LCALL WR_COM ;指定显示的移位
LCALL DY_100US
LCALL CESHI ;display
LCALL DY_50MS
MOV A,#01H ; Clear scream
SJMP main
CESHI: LCALL DY_100US
MOV A,#80H
LCALL WR_COM
MOV DPTR,#TAB1 ;第一行字的首地址
LCALL HZKDIS
MOV A,#90H
LCALL WR_COM
MOV DPTR,#TAB2 ;第二行字的首地址
LCALL HZKDIS
MOV A,#88H
LCALL WR_COM
MOV DPTR,#TAB3 ;第3行字的首地址
LCALL HZKDIS
MOV A,#98H
LCALL WR_COM
MOV DPTR,#TAB4 ;第4行字的首地址
LCALL HZKDIS
RET
;===============================================
;写数据子程序
;RS=1,RW=0,E=高脉冲,D0-D7=数据
;===============================================
WR_DATA: SETB RS
CLR RW
SETB E
MOV LCD_BUS,A
CLR E
LCALL DY_100US
RET
;===============================================
;写指令子程序
;RS=0,RW=0,E=高脉冲,D0-D7=指令码
;===============================================
WR_COM: CLR RS
CLR RW
SETB E
MOV LCD_BUS,A
CLR E
LCALL DY_100US
RET
;==================================================
;显示字符串子程序
;==========================================
HZKDIS: CLR A
MOVC A,@A+DPTR
CJNE A,#00H,GO_DIS ;TAB的末尾加 00H作为结束标志
SJMP GO_RET
GO_DIS: LCALL WR_DATA
INC DPTR
LCALL DY_100US
SJMP HZKDIS
GO_RET: RET
;==========================================
;延时程序
;*************************************
DY_50MS: PUSH 00H ;R0
PUSH 01H ;R1
MOV R0,#120
DEL: MOV R1,#250
DJNZ R1,$
DJNZ R0,DEL
POP 01H
POP 00H
RET
DY_100US: PUSH 00H ;R0
MOV R0,#150
DJNZ R0,$
POP 00H
RET
TAB1: DB '故人西辞黄鹤楼,',00H
TAB2: DB '烟花三月下扬州。',00H
TAB3: DB '孤帆远影碧空尽,',00H
TAB4: DB '唯见长江天际流。',00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -