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

📄 lcdtest1.asm

📁 这是一个LCD 的显示驱动程序
💻 ASM
字号:
;---------------------------------------------------管脚配置
 	RS 		BIT 	P3.5  ;P3.4脚接RS端
 	R_W 	BIT 	P3.6  ;P3.5脚接R_W端
 	E 		BIT 	P3.7  ;P3.6脚接E端
 	D_BUS 	DATA 	P0    ;P1口控制D_BUS输出
;----------------------------------------------------LCD Commands	                 RS    RW    D7    D6    D5    D4    D3    D2    D1    D0
;	LCD_CLS			equ	1	;清显示					  0     0     0     0     0     0     0     0     0     1
;	LCD_HOME		equ	2	;光标复位			          0     0     0     0	  0     0     0	    0	  1	0
;	LCD_SETMODE		equ	4	;光标和显示模式设置			  0	0     0     0 	  0	0     0     1	 I/D	S
					   	;I/D=1光标右移,0左移,S=1文字移动使能
;	LCD_SETVISIBLE		equ	8	;显示开关控制				  0	0     0	    0	  0	0     1	    D	  C	B
						;D:控制整体显示的开与关,高电平开显示
						;C:控制光标的开与关,高电平表示有光标
						;B:控制光标是否闪烁,高电平闪烁		 
;	LCD_SHIFT		equ	16	;光标或显示移位 S/C			  0	0     0	    0	  0      1   S/C   R/L    0	0	  			 
						;高电平时移动文字,低电平时移动光标	
;	LCD_SETFUNCTION		equ	32	;功能设置命令				  0	0     0	    0     1	 DL   N     F	  0	0
						;DL:高电平为4位总线,低电平为8位总线										 
						;N:低电平为单行显示,高电平时双行显示
						;F: 低为5x7点阵字符,高为5x10点阵字符
;	LCD_SETCGADDR		equ	64	;字符发生器RAM地址设置			  0	0     0	    1   字符发生寄存器地址
;	LCD_SETDDADDR		equ	128	;置数寄存器地址				  0	0     1     显示数据寄存器地址
;---------------------------------------------------------------------
 	ORG 	0000H   ;从0000H处开始
 	LJMP 	MAIN   ;跳转到MAIN处
	ORG    000BH
    AJMP   INSE 
 	ORG 	0030H   ;主程序从0030H处开始
MAIN:
    MOV   TMOD,#0
    MOV   TL0,#0
    MOV   TH0,#0
    SETB  EA
    SETB  ET0
    SETB  TR0
    MOV   R5,#50 
 	MOV 	SP,#60H   ;堆栈指针指向70H
 	LCALL INITIAL   ;调用启动LCM子程序进行初始化
 	LCALL CLS   ;调用清除LCM子程序
 	MOV 	A,#80H   ;向A送立即数80H设定显示地址为第一行第一列
 	LCALL WRITE_COM  ;调用写指令到LCM子程序
	;MOV A,#01000001B   ;字母“A”的代码。
	;LCALL WRITE_DATA
 	MOV DPTR,#LINE1  ;将第一行字符串的启始地址送如DPTR中
 	LCALL DISP   ;调用显示字符串到LCM子程序
 	MOV A,#0C0H   ;向A送立即数0C0H设定显示地址为第二行第一列
	LCALL WRITE_COM
	;MOV A,#01000010B   ;字母“A”的代码。
	;LCALL WRITE_DATA
 	;LCALL WRITE_COM  ;调用写指令到LCM子程序
 	MOV DPTR,#LINE2  ;将第二行字符串的启始地址送如DPTR中
 	LCALL DISP   ;调用显示字符串到LCM子程序
 	SJMP $   ;程序动态停机
INSE: MOV   TL0,#0         ;中断服务子程序。
      MOV   TH0,#0
      DJNZ  R5,NO
      MOV   R5,#50
NO:   RETI
LINE1: DB "   welcome to   ",00H ;第一行字符串
LINE2: DB " www.zwmcu.com! ",00H ;第二行字符串

INITIAL:    ;初始化LCD子程序
 	MOV   A,#00111000B   ;使用8Bits汇流排,显示两行,使用5*7的字型。
 	LCALL WRITE_COM
	MOV   A,#00001111B   ;显示器开,光标开,光标闪烁。
 	LCALL WRITE_COM
	MOV   A,#00000110B   ;字符不动,光标自动右移一格
 	LCALL WRITE_COM
 	RET

CHECK_BUSY:    ;查询忙碌信号子程序
 	PUSH ACC
BUSY_LOOP:
    CLR 	RS
    SETB  	R_W
    CLR   	E
    SETB  	E
    MOV   	A,D_BUS
    CLR   	E
    JB    	ACC.7,BUSY_LOOP
    POP   	ACC
    ACALL 	DEL
    RET
WRITE_COM:    ;写指令到LCD子程序
 	LCALL CHECK_BUSY
 	CLR 	E
 	CLR 	RS
 	CLR 	R_W
 	SETB 	E
 	MOV 	D_BUS,A
 	CLR 	E
 	RET
WRITE_DATA:    ;写数据到LCD子程序
 	LCALL CHECK_BUSY
 	CLR 	E
 	SETB 	RS
 	CLR 	R_W
 	SETB 	E
 	MOV 	D_BUS,A
	CLR 	E
 	RET

CLS:           ;清除LCD子程序
 	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 + -