📄 _dis_sub.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 + -