📄 lcd.asm
字号:
;实验名称:字符型LCD接口实验
; 功能:在LCD上显示
; AT89S51 DEMO
; www.mcuprog.com
; 作者:http://www.mcuprog.com
; 05-02-01
;
E BIT P2.2
RW BIT P2.1
RS BIT P2.0
LCDPORT EQU P0
CMD_BYTE EQU 30H
DAT_BYTE EQU 31H
ORG 0000H
AJMP MAIN
ORG 0050H
MAIN: MOV SP,#60H
LCALL INITLCD
LCALL DISPMSG1
LCALL DISPMSG2
SJMP $
;LCD1602要用到的一些子程序
;写命令(入口参数CMD_BYTE)
WRITE_CMD: CLR RS
CLR RW
MOV A,CMD_BYTE
MOV LCDPORT,A
SETB E
NOP
NOP
CLR E
LCALL DELAY
RET
;写显示数据(入口参数DAT_BYTE)
WRITE_DAT: SETB RS
CLR RW
MOV A,DAT_BYTE
MOV LCDPORT,A
SETB E
NOP
NOP
CLR E
LCALL DELAY
RET
;LCD显示初始化
INITLCD: MOV CMD_BYTE,#30H
LCALL WRITE_CMD
MOV CMD_BYTE,#30H
LCALL WRITE_CMD
MOV CMD_BYTE,#30H
LCALL WRITE_CMD
MOV CMD_BYTE,#38H ;设定工作方式
LCALL WRITE_CMD
MOV CMD_BYTE,#0CH ;显示状态设置
LCALL WRITE_CMD
MOV CMD_BYTE,#01H ;清屏
LCALL WRITE_CMD
MOV CMD_BYTE,#06H ;输入方式设置
LCALL WRITE_CMD
RET
;在第一行显示表格1的内容
DISPMSG1: MOV CMD_BYTE,#80H //设置DDRAM的地址
LCALL WRITE_CMD
MOV R7,#10H
MOV R6,#00H
MOV DPTR,#TAB1
DISPMSG1_1: MOV A,R6
MOVC A,@A+DPTR
MOV DAT_BYTE,A
LCALL WRITE_DAT
INC R6
DJNZ R7,DISPMSG1_1
RET
;在第二行显示表格1的内容
DISPMSG2: MOV CMD_BYTE,#0C0H //设置DDRAM的地址
LCALL WRITE_CMD
MOV R7,#10H
MOV R6,#00H
MOV DPTR,#TAB2
DISPMSG2_1: MOV A,R6
MOVC A,@A+DPTR
MOV DAT_BYTE,A
LCALL WRITE_DAT
INC R6
DJNZ R7,DISPMSG2_1
RET
;延时子程序
DELAY: MOV R5,#0A0H
DELAY1: NOP
DJNZ R5,DELAY1
RET
ORG 0200H
;要显示的内容
TAB1: DB " AT89S51 DEMO "
TAB2: DB "www.mcuprog.com "
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -