6液晶滚动显示.asm

来自「我这是一个1602的液晶程序」· 汇编 代码 · 共 100 行

ASM
100
字号
;***本显示用于LCD1602    
;********89C51引脚定义********
	RS BIT P3.6
	R_W BIT P2.5
	E BIT P2.6
	DB0_DB7 EQU P0
;*******程序开始********
	ORG 0000H
	LJMP MAIN
;*******主程序*******
	ORG 0030H
MAIN:	MOV SP,#70H
	MOV R0,#00H
	LCALL INITIAL
AGAIN:	LCALL CLS
	MOV A,#10000000B
	ORL A,R0
	CJNE A,#10001111B,NEXT1
	MOV R0,#00H
	SJMP AGAIN
NEXT1:	LCALL WRITE_COM
	MOV DPTR,#LINE1
	LCALL DISP
	MOV A,#11000000B
	ORL A,R0
	CJNE A,#11001111B,NEXT2
	MOV R0,#00H
	SJMP AGAIN
NEXT2:	LCALL WRITE_COM
	MOV DPTR,#LINE2
	LCALL DISP
	INC R0
	MOV R1,#255
DEL_LOOP:	LCALL DEL
	DJNZ R1, DEL_LOOP
	LJMP AGAIN
;****** 启动LCM子程序******
INITIAL:MOV A,#00111000B
	LCALL WRITE_COM
	MOV A,#00001110B 
	LCALL WRITE_COM 
	MOV A,#00000110B 
	LCALL WRITE_COM 
	RET
;*******查询忙碌标志信号子程序********
CHECK_BUSY: 	PUSH ACC
BUSY_LOOP:	CLR E
	SETB R_W
	CLR RS
	SETB E
	MOV A, DB0_DB7
	CLR E
	JB ACC.7,BUSY_LOOP
	POP ACC
	LCALL DEL
	RET
;****** 写指令到LCM子程序*******
WRITE_COM: 	LCALL CHECK_BUSY
	CLR E
	CLR RS 
	CLR R_W
	SETB E
	MOV  DB0_DB7,A
	CLR E
	RET
;****** 写数据到LCM子程序******
WRITE_DATA: 	LCALL CHECK_BUSY
	CLR E
	SETB RS 
	CLR R_W
	SETB E
	MOV  DB0_DB7,A
	CLR E
	RET
;*******清除LCM子程序*******
CLS:	MOV A,#00000001B
	LCALL WRITE_COM
	RET
;****延时子程序****
DEL:	MOV R6,#5
L1:	MOV R7,#248
	DJNZ R7,$
	DJNZ R6,L1
	RET
;*******显示字符串到LCM子程序********
DISP:	PUSH ACC
DISP_LOOP:	CLR A
	MOVC A,@A+DPTR
	JZ END_DISP
	LCALL WRITE_DATA
	INC DPTR
	SJMP DISP_LOOP
END_DISP:	POP ACC
	RET
;*****LCM第一、二行显示字符串*****
LINE1:	DB "China        ",00H
LINE2:	DB "I Love you!!           ",00H
	END
	

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?