📄
字号:
;文件名:LCD1304.ASM
;程序功能:LCD循环显示
RS bit P2.0
RW bit P2.1
E bit P2.2
LCD EQU P0
MAIN: ;主程序
ACALL INIT_LCD ;调用初始化子程序
loop1: ;循环
MOV LCD,#02H ;写入显示起始地址
ACALL WR_COMM ;调用写指令子程序
MOV DPTR,#LINE1 ;字符串地址送入DPTR
MOV R0,#16 ;字符串的字符数
ACALL DISP_LCD ;调用查表子程序
ACALL DELAY ;调用延时子程序
MOV LCD,#0c0H ;写入显示起始地址
ACALL WR_COMM ;调用写指令子程序
MOV DPTR,#LINE2 ;字符串地址送入DPTR
MOV R0,#16 ;字符串的字符数
ACALL DISP_LCD ;调用查表子程序
ACALL DELAY ;调用延时子程序
ACALL CLS ;调用清屏子程序
MOV LCD,#80H ;写入显示起始地址
ACALL WR_COMM ;调用写指令子程序
MOV DPTR,#LINE3 ;字符串地址送入DPTR
MOV R0,#16 ;字符串的字符数
ACALL DISP_LCD ;调用查表子程序
ACALL DELAY ;调用延时子程序
MOV LCD,#0C0H ;写入显示起始地址
ACALL WR_COMM ;调用写指令子程序
MOV DPTR,#LINE4 ;字符串地址送入DPTR
MOV R0,#16 ;字符串的字符数
ACALL DISP_LCD ;调用查表子程序
ACALL DELAY ;调用延时子程序
ACALL CLS ;调用清屏子程序
jmp loop1
INIT_LCD: ;LCM初始化设定
MOV LCD,#00000001B ;清屏并光标复位
ACALL WR_COMM ;调用写指令子程序
MOV LCD,#00111000B;设置8位、2行、5x7点阵
ACALL WR_COMM ;调用写指令子程序
MOV LCD,#00001111B ;显示器开,光标允许闪烁
ACALL WR_COMM ;调用写指令子程序
MOV LCD,#00000110B ;文字不动,光标自动右移
ACALL WR_COMM ;调用写指令子程序
RET
WR_COMM: ;写指令子程序
CLR RS ;RS=0,选择指令寄存器
CLR RW ;RW=0,选择写模式
CLR E ;E=0,禁止读/写LCM
ACALL CHECK_BF ;调用判LCM忙碌子程序
SETB E ;E=1,允许读/写LCM
RET
CHECK_BF: ;判断是否忙碌子程序
MOV LCD, #0FFH ;此时不接受外来指令
CLR RS ;RS=0,选择指令寄存器
SETB RW ;RW=1,选择读模式
CLR E ;E=0,禁止读/写LCM
NOP ;延时1微秒
SETB E ;E=1,允许读/写LCM
JB LCD.7,CHECK_BF ;忙碌循环等待
RET
WR_DATA: ;写数据子程序
SETB RS ;RS=1,选择数据寄存器
CLR RW ;RW=0,选择写模式
CLR E ;E=0,禁止读/写LCM
ACALL CHECK_BF ;调用判断忙碌子程序
SETB E ;E=1,允许读/写LCM
RET
DISP_LCD: ;查表显示子程序
MOV R1,#0 ;查表地址初始值
LOOP: MOV A,R1 ;将表地址初值赋予A
MOVC A,@A+DPTR ;查表将字符串内容送入A
MOV LCD,A ;将字符串内容送入LCD
INC R1 ;地址值加1
ACALL WR_DATA ;调用写入数据子程序
mov r5,#25
acall d1
DJNZ R0,LOOP ;判断查表是否6次?
RET ;子程序返回
CLS: ;清显示屏
MOV LCD,#00000001B
ACALL WR_COMM
RET
DELAY: ;延时时间为3秒
MOV R5,#100
D1:MOV R6,#100
D2:MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
LINE1: DB ' 0000--86300000 '
LINE2: DB 'Welcome to x511!'
LINE3: DB '1602 LCD TEST!'
LINE4: db 'I LOVE YOU! ^_^ '
END ; 程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -