📄 yeijng.asm
字号:
/******************************************************************
** 1602A液晶屏驱动程序
** 晶 振 频 率:11.0592M
** 线路->单片机实验开发板A
******************************************************************/
LCM_RS EQU P3.7 ;//定义接口
LCM_RW EQU P3.6
LCM_E EQU P3.5
LCM_Data EQU P1 ;数据接口
ORG 0000H ;从0000H处开始
SJMP MAIN ;跳转到MAIN处
ORG 0030H ;主程序从0030H处开始
MAIN: MOV SP,#70H ;堆栈指针指向70H
LCALL INITIAL ;调用启动LCM子程序进行初始化
LCALL CLS ;调用清除LCM子程序
MOV A,#80H ;向A送立即数80H设定显示地址为第一行第一列
LCALL WRITE_COM ;调用写指令到LCM子程序
MOV DPTR,#LINE1 ;将第一行字符串的启始地址送如DPTR中
LCALL DISP ;调用显示字符串到LCM子程序
MOV A,#0C0H ;向A送立即数0C0H设定显示地址为第二行第一列
LCALL WRITE_COM ;调用写指令到LCM子程序
MOV DPTR,#LINE2 ;将第二行字符串的启始地址送如DPTR中
LCALL DISP ;调用显示字符串到LCM子程序
SJMP $ ;程序动态停机
LINE1: DB " www.52c51.com ",00H ;第一行字符串
LINE2: DB " 1602A ",00H ;第二行字符串
INITIAL: MOV A,#38H ;启动LCM子程序
LCALL WRITE_COM
MOV A,#0EH
LCALL WRITE_COM
MOV A,#06H
LCALL WRITE_COM
RET
CHECK_BUSY: PUSH ACC ;查询忙碌信号子程序
BUSY_LOOP: CLR LCM_E
SETB LCM_RW
CLR LCM_RS
SETB LCM_E
MOV A,LCM_Data
CLR LCM_E
JB ACC.7,BUSY_LOOP
POP ACC
LCALL DEL
RET
WRITE_COM: LCALL CHECK_BUSY;写指令到LCM子程序
CLR LCM_E
CLR LCM_RS
CLR LCM_RW
SETB LCM_E
MOV LCM_Data,A
CLR LCM_E
RET
WRITE_DATA: LCALL CHECK_BUSY ;写数据到LCM子程序
CLR LCM_E
SETB LCM_RS
CLR LCM_RW
SETB LCM_E
MOV LCM_Data,A
CLR LCM_E
RET
CLS: MOV A,#01H ;清除LCM子程序
LCALL WRITE_COM
RET
DEL: MOV R6,#5 ;2.7ms延时子程序
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
DISP: PUSH ACC ;将A的内容压栈
DISP_LOOP: CLR A ;A清零
MOVC A,@A+DPTR ;查表将字符串内容送入A
JZ END_DISP ;若查到的内容为0则终止查表
LCALL WRITE_DATA ;调用写数据到LCM子程序
INC DPTR ;DPTR加1指向下一个对象
SJMP DISP_LOOP ;跳转到DISP_LOOP循环执行
END_DISP: POP ACC ;弹出压栈内容至A
RET
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -