⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yeijng.asm

📁 汇编书写的LCD1602显示程序
💻 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 + -