📄 6963.asm
字号:
;T6963C, 240*128 DOTS LCM 6*8 点阵的字库描点子程序例子
TXHOME EQU 40H
TXAREA EQU 41H
GRHOME EQU 42H
GRAREA EQU 43H
ADDRPTR EQU 24H
WRSET EQU 0C4H;data write and ADP novariable
INWRSET EQU 0C0H;data write and ADP increament
INRDSET EQU 0C1H;data write and ADP increament
AWRON EQU 0B0H
ARDON EQU 0B1H
AUTOFF EQU 0B2H
;
DATAPORT EQU 6000H
CTRLPORT EQU 6002H
; WR1 EQU P2.5
; RD1 EQU P2.6
; CD EQU P2.4
DATA0 EQU 30H
DATA1 EQU 31H
DATA2 EQU 32H
CTRLCODE EQU 33H ;写液晶显示的控制码
X EQU 34H ;显示内容的坐标
Y EQU 35H ;显示内容的坐标
TER0 EQU 36H ;延时用的计数器
TER1 EQU 37H ;延时用的计数器
G2 EQU 38H
D1 EQU 39H
D2 EQU 3AH
CHARFLAG BIT 3H ;字符反显、正显标志
;
ORG 0000H
AJMP BEGIN
ORG 0040H
Main:
BEGIN: NOP
CLR EA
MOV SP,#50H
SETB CHARFLAG ;字符标志平时为正显
SETB EA; open interrupter
SETB EX1; open ZD1
CLR IT1; active low level
CLR RS0
CLR RS1
NOP
LCALL DELAY1S
LCALL INITIAL
MOV CTRLCODE,#9CH;text ON,graphic ON,cursor OFF
LCALL CMD
NOP
LCALL CLRRAM
MAIN0:
MOV G2, #08H
lcall CHAR
LCALL CLRRAM
MOV D1,#0FFH
MOV D2, #0FFH
LCALL DISPFULL
LCALL DELAY1S
LCALL CLRRAM
LCALL DELAY1S
MOV D1,#0FFH
MOV D2, #000H
LCALL DISPFULL
LCALL DELAY1S
MOV D1,#0H
MOV D2, #0FFH
LCALL DISPFULL
LCALL DELAY1S
MOV D1,#0AAH
MOV D2, #0AAH
LCALL DISPFULL
LCALL DELAY1S
MOV D1,#055H
MOV D2, #055H
LCALL DISPFULL
LCALL DELAY1S
MOV D1,#0AAH
MOV D2, #055H
LCALL DISPFULL
LCALL DELAY1S
MOV D1,#055H
MOV D2, #0AAH
LCALL DISPFULL
LCALL DELAY1S
LCALL CLRRAM
LCALL BOX
LCALL DISPHZ
LCALL CLRRAM
LJMP MAIN0
DISPFULL:
MOV DATA1,#00H
MOV DATA2,#08H
MOV CTRLCODE,#ADDRPTR
LCALL CMD1
MOV CTRLCODE,#AWRON
LCALL CMD
MOV R3, #32
FULL3:
MOV R2,#40
FULL1:
MOV A, D1
LCALL SEND1
DJNZ R2, FULL1
MOV R2,#40
FULL2:
MOV A, D2
LCALL SEND1
DJNZ R2, FULL2
DJNZ R3, FULL3
MOV CTRLCODE,#AUTOFF
LCALL CMD
RET
BOX:
MOV X, #0
MOV Y, #80H
MOV R2,#240
LCALL WLINE2
MOV X, #0
MOV Y, #80H
MOV R2,#64
LCALL WLINE
MOV X, #0
MOV Y, #0BFH
MOV R2,#240
LCALL WLINE2
MOV X, #239
MOV Y, #80H
MOV R2,#64
LCALL WLINE
RET
DISPHZ:
MOV G2, #13H
MOV X, #23
MOV Y, #0
MOV DPTR, #LINE1
LCALL WR_HZL
MOV X, #23
MOV Y, #16
MOV DPTR, #LINE2
LCALL WR_HZL
MOV X, #23
MOV Y, #32
MOV DPTR, #LINE3
LCALL WR_HZL
MOV X, #30
MOV Y, #48
MOV DPTR, #LINE4
LCALL WR_HZL
MOV DATA1,#00H
MOV DATA2,#13H
MOV CTRLCODE,#GRHOME
LCALL CMD1; graphic home address set
LCALL DELAY1S
MOV DATA1,#00H
MOV DATA2,#08H
MOV CTRLCODE,#GRHOME
LCALL CMD1; graphic home address set
RET
WLINE: ;竖线子程序, X, Y:坐标, R2:线长
LCALL WDOT
INC Y
DJNZ R2, WLINE
RET
WLINE2: ;横线子程序, X, Y:坐标, R2:线长
LCALL WDOT
INC X
DJNZ R2, WLINE2
RET
;Display a line deppend on R2
;The bit is "1" then display the dot
;
WLINE3:
MOV A, Y
PUSH ACC
MOV A, X
PUSH ACC
MOV R3,#8
WLINE30:
MOV A, R2
CLR C
RLC A
MOV R2,A
JC WLINE31
MOV A, Y
ANL A, #7FH
MOV Y, A
SJMP WLINE32
WLINE31: MOV A, Y
ORL A, #80H
MOV Y, A
WLINE32: LCALL WDOT
INC X
DJNZ R3, WLINE30
POP ACC
MOV X, A
POP ACC
MOV Y, A
RET
;display a chinese CHAR line
; DPTR: CHINESE code start address
; x, y: position
WR_HZL:
PUSH ACC
HZL1:
CLR A
MOVC A, @A+DPTR
CJNE A, 0FFH, HZL2
SJMP HZL_END
HZL2:
PUSH DPL
PUSH DPH
MOV DPTR, #TABHZ ;TO THE font start address
MOV B, #32
MUL AB
ADD A, DPL
MOV DPL, A
MOV A, B
ADDC A, DPH
MOV DPH, A ; To find the char's font
LCALL WR_HZ
POP DPH
POP DPL
INC DPTR
MOV A, X
ADD A, #16
MOV X, A
SJMP HZL1
HZL_END:
POP ACC
RET
;display a chinese 16*16
; DPTR: CHINESE fonts start address
; x, y: position
WR_HZ:
PUSH ACC
MOV R4,#16
HZ1:
clr a
MOVC A, @A+DPTR
MOV R2, A
LCALL WLINE3
INC DPTR
INC Y
DJNZ R4, HZ1
MOV A, X
ADD A, #8
MOV X, A
MOV A, Y
SUBB A, #16
MOV Y, A
MOV R4,#16
HZ2:
clr a
MOVC A, @A+DPTR
MOV R2, A
LCALL WLINE3
INC DPTR
INC Y
DJNZ R4, HZ2
MOV A, X
SUBB A, #8
MOV X, A
MOV A, Y
SUBB A, #16
MOV Y, A
POP ACC
RET
GCHAR: ;图形状态下写一个字符的子程序 X, Y: 字符的左上角坐标
;A: 字符码
PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR, #CCS20 ;初始化DPTR
CLR C
SUBB A, #20H ;计算在字符表中的地址
JZ GCHA5
MOV R7, A
GCHA4: INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
DJNZ R7, GCHA4 ;8*6字符,所以 DPTR加6
GCHA5:
CLR A
MOVC A, @A+DPTR
MOV R5, Y
MOV R3, #6
GCHAR3:
CLR A
MOVC A, @A+DPTR
MOV R4, A
INC DPTR
MOV R2, #8
MOV Y, R5
GCHAR2:
JNB CHARFLAG, GCHAR6
CLR C
MOV A, R4
RRC A
MOV R4, A
JNC GCHAR1
MOV A, Y
ORL A, #80H
MOV Y, A ;置点
SJMP GCHAR4
GCHAR1:
MOV A, Y
ANL A, #7FH
MOV Y, A ;清点
GCHAR4:
LCALL WDOT
SJMP GCHAR9
GCHAR6:
CLR C
MOV A, R4
RRC A
MOV R4, A
JC GCHAR7
MOV A, Y
ORL A, #80H
MOV Y, A ;置点
SJMP GCHAR8
GCHAR7:
MOV A, Y
ANL A, #7FH
MOV Y, A ;清点
GCHAR8:
LCALL WDOT
GCHAR9:
INC Y
DJNZ R2, GCHAR2
INC X
DJNZ R3, GCHAR3
MOV Y, R5
POP DPL
POP DPH
POP ACC
RET
GCHARL: ;图形状态下写一个字符行的子程序 X, Y: 字符的左上角坐标; DPTR: 字符行首地址
PUSH ACC
PUSH DPH
PUSH DPL
GCHL1: MOV A, #0
MOVC A, @A+DPTR
CJNE A, #0FFH, GCHL2 ;判断是结束符吗?
SJMP GCHLEND
GCHL2:
INC DPTR
LCALL GCHAR
SJMP GCHL1
GCHLEND:
POP DPL
POP DPH
POP ACC
RET
WDOT: NOP ;写点子程序,Y的D7为1,则置点。否则消点
PUSH ACC
MOV A,Y ;Y为128方向上的坐标,X为240方向上的坐标
PUSH ACC
CLR ACC.7
MOV B,#40 ;图形显示宽40
MUL AB
MOV DATA1,A
MOV DATA2,B
MOV A,X
MOV B,#06H
DIV AB ;B为点数值
ADD A,DATA1
MOV DATA1,A ;DATA1, DATA2: display ram address
MOV A, G2
ADDC A,DATA2
MOV DATA2,A
MOV CTRLCODE,#24H
LCALL CMD1 ;设置显示RAM地址
MOV A,B ;转换位数据
CPL A
ANL A,#07H
DEC A
DEC A ;8*8字符时,不用减; 6*8时,要减2; 7*8时,减1
XCH A,Y
SWAP A
ANL A,#08H
ORL A,#0F0H
ORL A,Y
MOV CTRLCODE,A
LCALL CMD
POP ACC
MOV Y, A
POP ACC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -