📄 rocky2.asm
字号:
;用1602液晶显示模块显示字符串的51源程序
;作者 李双印
;编制于2006年4月6日
RS BIT P3.7 ;P3.7脚接RS端
R_W BIT P3.6 ;P3.6脚接R_W端
E BIT P3.5 ;P3.5脚接E端
D_BUS EQU P1 ;P1口控制D_BUS输出
ORG 0000H ;从0000H处开始
LJMP 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 " lishuangyin ",00H ;第一行字符串
LINE2: DB "tel:13466575928 ",00H ;第二行字符串
INITIAL: ;启动LCM子程序
MOV A,#38H
LCALL WRITE_COM
MOV A,#0EH
LCALL WRITE_COM
MOV A,#06H
LCALL WRITE_COM
RET
CHECK_BUSY: ;查询忙碌信号子程序
PUSH ACC
BUSY_LOOP:
CLR E
SETB R_W
CLR RS
SETB E
MOV A,D_BUS
CLR E
JB ACC.7,BUSY_LOOP
POP ACC
LCALL DEL
RET
WRITE_COM: ;写指令到LCM子程序
LCALL CHECK_BUSY
CLR E
CLR RS
CLR R_W
SETB E
MOV D_BUS,A
CLR E
RET
WRITE_DATA: ;写数据到LCM子程序
LCALL CHECK_BUSY
CLR E
SETB RS
CLR R_W
SETB E
MOV D_BUS,A
CLR E
RET
CLS: ;清除LCM子程序
MOV A,#01H
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 + -