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

📄 _dis_sub.asm

📁 lcd drive asm program
💻 ASM
字号:
;------------------------------------------------------------------------------------------------
;给定DPTR,即把DPTR压入堆栈,然后调用本程序,就会在R6,R7所指向的坐标处显示一个8*8的块
;
;IN PARAMETERS:
;	DPTR:	DATA ADDRESS TO BE DISPLAYED
;	R6	X---PAGE
;	R7:	y---COLUME 
;OUT PARAMETERS:
;	DPTR:CHANGED
;	R6,R7 NOT CHANGED
;------------------------------------------------------------------------------------------------
PROC	DIS_8_8
DIS_8_8:MOV	R4,#00H
	PUSH	DPH
	PUSH	DPL
	LCALL	DIS_8_8_
	POP	DPL
	POP	DPH
	RET
	END
;----------------------------------------------
PROC	DIS_8_8R
DIS_8_8R:MOV	R4,#00H
	PUSH	DPH
	PUSH	DPL
	LCALL	DIS_8_8_R
	POP	DPL
	POP	DPH
	RET
	END
;----------------------------------------------
PROC	DIS_8_8_R
DIS_8_8_R:
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD2	;sel page
	MOV	A,R6
	ADD	A,#BGNPG
	MOVX	@DPTR,A
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD2	;sel colume
	MOV	A,R7		;0~63
	ADD 	A,#BGNCOL	;+40H<=7FH
	MOVX	@DPTR,A
	MOV	R3,#08H		;NUMBER NOT OUT
W_MIN_BLKR:
	MOV	R0,SP
	DEC	R0
	DEC	R0
	MOV	DPL,@R0
	DEC	R0
	MOV	DPH,@R0
	MOV	A,R4
	MOVC	A,@A+DPTR
	INC	R4		;DATA POINTER
	LCALL	LCDBUSY
	MOV	DPTR,#WDATA2
	MOVX	@DPTR,A
	DJNZ	R3,W_MIN_BLKR
	RET
	END
;----------------------------------------------
PROC	DIS_8_8_
DIS_8_8_:
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD1	;sel page
	MOV	A,R6
	ADD	A,#BGNPG
	MOVX	@DPTR,A
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD1	;sel colume
	MOV	A,R7		;0~63
	ADD 	A,#BGNCOL	;+40H<=7FH
	MOVX	@DPTR,A
	MOV	R3,#08H		;NUMBER NOT OUT
W_MIN_BLK:
	MOV	R0,SP
	DEC	R0
	DEC	R0
	MOV	DPL,@R0
	DEC	R0
	MOV	DPH,@R0
	MOV	A,R4
	MOVC	A,@A+DPTR
	INC	R4		;DATA POINTER
	LCALL	LCDBUSY
	MOV	DPTR,#WDATA1
	MOVX	@DPTR,A
	DJNZ	R3,W_MIN_BLK
	RET
	END

;------------------------------------------------------------------------------------------------
;给定DPTR,即把DPTR压入堆栈,然后调用本程序,就会在R6,R7所指向的坐标处显示一个8*6的块
;
;IN PARAMETERS:
;	DPTR:	DATA ADDRESS TO BE DISPLAYED
;	R6	X---PAGE
;	R7:	y---COLUME 
;OUT PARAMETERS:
;	DPTR:CHANGED
;	R6,R7 NOT CHANGED
;------------------------------------------------------------------------------------------------
PROC	DIS_8_6
DIS_8_6:PUSH	DPH
	PUSH	DPL
	MOV	R4,#00H		;DATA POINTER
	LCALL	DIS_8_6_
	POP	DPL
	POP	DPH
	RET
	END
;------------------------------------------------------------------------------------------------
PROC	DIS_8_6R
DIS_8_6R:PUSH	DPH
	PUSH	DPL
	MOV	R4,#00H		;DATA POINTER
	LCALL	DIS_8_6_R
	POP	DPL
	POP	DPH
	RET	
	END
;------------------------------------------------------------------------------------------------
PROC	DIS_8_6_
DIS_8_6_:
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD1	;sel page
	MOV	A,R6
	ADD	A,#BGNPG
	MOVX	@DPTR,A
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD1	;sel colume
	MOV	A,R7		;0~63
	ADD 	A,#BGNCOL	;+40H<=7FH
	MOVX	@DPTR,A
	MOV	R3,#06H		;NUMBER NOT OUT
W_BLK86_:
	MOV	R0,SP
	DEC	R0
	DEC	R0
	MOV	DPL,@R0
	DEC	R0
	MOV	DPH,@R0
	MOV	A,R4
	MOVC	A,@A+DPTR
	INC	R4		;DATA POINTER
	LCALL	LCDBUSY
	MOV	DPTR,#WDATA1
	MOVX	@DPTR,A
	DJNZ	R3,W_BLK86_
	RET
	END
;------------------------------------------------------------------------------------------------
PROC	DIS_8_6_R
DIS_8_6_R:
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD2	;sel page
	MOV	A,R6
	ADD	A,#BGNPG
	MOVX	@DPTR,A
	LCALL	LCDBUSY
	MOV	DPTR,#CMMD2	;sel colume
	MOV	A,R7		;0~63
	ADD 	A,#BGNCOL	;+40H<=7FH
	MOVX	@DPTR,A
	MOV	R3,#06H		;NUMBER NOT OUT
W_BLK86_R:
	MOV	R0,SP
	DEC	R0
	DEC	R0
	MOV	DPL,@R0
	DEC	R0
	MOV	DPH,@R0
	MOV	A,R4
	MOVC	A,@A+DPTR
	INC	R4		;DATA POINTER
	LCALL	LCDBUSY
	MOV	DPTR,#WDATA2
	MOVX	@DPTR,A
	DJNZ	R3,W_BLK86_R
	RET
	END
;----------------------------------------------
PROC	LCDBUSY
LCDBUSY:PUSH	A
	PUSH	DPH
	PUSH	DPL
LBUY2:	MOV	DPTR,#STAT1
	MOVX	A,@DPTR
LBUY:	JB	ACC.7,LBUY2
	POP	DPL
	POP	DPH
	POP	A
	RET
	END
;----------------------------------------------
PROC	DELAY_65MS
DELAY_65MS:	MOV	R3,#0FFH
LOOP1:	MOV	R2,#0FFH
LOOP2:	DJNZ	R2,LOOP2
	DJNZ	R3,LOOP1
	RET	
	END
;--------------------------------------
;----------------------------------------------
;给定DPTR,即把DPTR压入堆栈,然后调用本程序,就会
;在R6,R7所指向的坐标处显示一个16*16的块
;
;IN PARAMETERS:
;	DPTR:	DATA ADDRESS TO BE DISPLAYED
;	R6	X---PAGE
;	R7:	y---COLUME 
;OUT PARAMETERS:
;	DPTR:CHANGED
;	R6,R7 NOT CHANGED
;----------------------------------------------
PROC DIS_16_16
DIS_16_16:
	MOV	R2,#02H
	MOV	R4,#00H
	PUSH	DPH
	PUSH	DPL
HALFOUT:LCALL	DIS_8_8_
	MOV	A,R7
	ADD	A,#08D
	MOV	R7,A
	LCALL	DIS_8_8_
	MOV	A,R7
	SUBB	A,#08D
	MOV	R7,A
	INC	R6
	DJNZ	R2,HALFOUT	
	DEC	R6
	DEC	R6
	POP	DPL
	POP	DPL
	RET
	END
;----------------------------------------------
PROC	DIS_16_16R
DIS_16_16R:
	MOV	R2,#02H
	MOV	R4,#00H
	PUSH	DPH
	PUSH	DPL
HALFOUT:LCALL	DIS_8_8_R
	MOV	A,R7
	ADD	A,#08D
	MOV	R7,A
	LCALL	DIS_8_8_R
	MOV	A,R7
	SUBB	A,#08D
	MOV	R7,A
	INC	R6
	DJNZ	R2,HALFOUT	
	DEC	R6
	DEC	R6
	POP	DPL
	POP	DPL
	RET
	END
;------------------------------------------------------------------------------------------------
PROC	LCDCLR
LCDCLR:	PUSH	A
	MOV	R2,#8
	MOV	R3,#64
	MOV	R4,#BGNPG

CLR22:	LCALL	LCDBUSY
	MOV	DPTR,#CMMD1	;Y轴地址从40开始,到7F
	MOV	A,#BGNCOL
	MOVX	@DPTR,A

	LCALL	LCDBUSY
CLR11:	MOV	DPTR,#CMMD1	;X轴地址从B8开始,到BF
	MOV	A,R4
	MOVX	@DPTR,A

	LCALL	LCDBUSY
				;上面的工作是为了选中一个基本的字节,下面是往这个字节里写数据
	MOV	DPTR,#WDATA1	;写数据地址
	MOV	A,#0		;全填0
	MOVX	@DPTR,A

	DJNZ	R3,CLR11
	INC	R4
	DJNZ	R2,CLR22
	NOP
	POP	A
	RET
	END
;---------------------------------------
PROC	LCDCLRR
LCDCLRR:PUSH	A
	MOV	R2,#8
	MOV	R3,#64
	MOV	R4,#BGNPG

CLR22R:	LCALL	LCDBUSY
	MOV	DPTR,#CMMD2	;Y轴地址从40开始,到7F
	MOV	A,#BGNCOL
	MOVX	@DPTR,A

	LCALL	LCDBUSY
CLR11R:	MOV	DPTR,#CMMD2	;X轴地址从B8开始,到BF
	MOV	A,R4
	MOVX	@DPTR,A

	LCALL	LCDBUSY
				;上面的工作是为了选中一个基本的字节,下面是往这个字节里写数据
	MOV	DPTR,#WDATA2	;写数据地址
	MOV	A,#0		;全填0
	MOVX	@DPTR,A

	DJNZ	R3,CLR11R
	INC	R4
	DJNZ	R2,CLR22R
	NOP
	POP	A
	RET
	END

⌨️ 快捷键说明

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