📄 lcd.txt
字号:
;*************************************************
;THE SUB TO WRITE A CHINESE TO LCD
;SUB NAME: WWORD
;INPUT HZ,HZHP,HZLP,HBXSB,RW3
;*************************************************
WWORD: MOV HZIP,#00H
MOV HZLIP,#00H
SETB DDR9:PINE
SETB DDR8:PINRW
SETB DDR8:PINDI
SETB DDR0:PINCSA
SETB DDR0:PINCSB
MOV A,HZ
MOV CSTEMP,#20H
MULU A,CSTEMP
ADDW A,#HZTAB
MOVW RW3,A ;ROW IS LOCATE THE CHINESE WORD(设置该汉字的行位置)
BEGINWRITE: MOV A,HZLP
ADD A,HZLIP
.IF (A<#40H)
MOV CSTEMP,#00H
.ELSE
MOV CSTEMP,#0FFH
.ENDIF
CLRB PDR9:PINE
MOV A,CSTEMP
.IF (A!=#00H)
CLRB PDR9:PINE
CALL T500U
SETB PDR0:PINCSB
CALL T500U
CLRB PDR0:PINCSA
.ELSE
CLRB PDR9:PINE
CALL T500U
SETB PDR0:PINCSA
CALL T500U
CLRB PDR0:PINCSB
.ENDIF
SETB PDR8:PINRW
CLRB PDR8:PINDI
CALL T500U
SETB PDR9:PINE
CALL T500U
MOV DDR1,#00H
NOP
BBC PDR1:4,TESTBUSY ;IF RESET THEN WAIT 45ms
CALL T200U
TESTBUSY: BBC PDR1:7,TURE_WRITE ;IF BUSY THEN WAIT 45ms
CALL T200U
TURE_WRITE: CLRB PDR9:PINE
CALL T500U
CLRB PDR8:PINDI
CLRB PDR8:PINRW
MOV A,HZHP
ADD A,#0B8H
SETB PDR9:PINE
MOV DDR1,#0FFH
NOP
MOV PDR1,A
CALL T200U
CLRB PDR9:PINE
NOP
MOV DDR1,#00H
CALL T500U
CLRB PDR8:PINDI
CLRB PDR8:PINRW
MOV A,HZLP
ADD A,HZLIP
.IF (A>=#40H)
SUB A,#40H
.ENDIF
ADD A,#40H
SETB PDR9:PINE
MOV DDR1,#0FFH
NOP
MOV PDR1,A
CALL T200U
MOV DDR1,#00H
WRITE_LOOP: CLRB PDR9:PINE
CALL T500U
SETB PDR8:PINDI
CLRB PDR8:PINRW
MOV A,@RW3
CLRB HBXSB
BBC HBXSB,WRITE
NOT A
WRITE: CALL T500U
SETB PDR9:PINE
CALL T200U
MOV DDR1,#0FFH
; AND A,#0FEH
CALL T500U
MOV PDR1,A ;WRITE A BIT TO LCD
CALL T200U
CLRB PDR9:PINE
NOP
MOV DDR1,#00H
MOV A,HZIP
INC HZIP
INCW RW3
MOV A,HZLIP
CMP A,#0FH
BNE NOT16 ;IF HZLIP<>16 THEN
INC HZHP
MOV HZLIP,#00H
JMP BEGINWRITE2
NOT16: INC HZLIP
JMP BEGINWRITE
BEGINWRITE2:
MOV A,HZLP
ADD A,HZLIP
.IF (A<#40H)
MOV CSTEMP,#00H
.ELSE
MOV CSTEMP,#0FFH
.ENDIF
CLRB PDR9:PINE
MOV A,CSTEMP
.IF (A!=#00H)
CLRB PDR9:PINE
CALL T500U
SETB PDR0:PINCSB
CALL T500U
CLRB PDR0:PINCSA
.ELSE
CLRB PDR9:PINE
CALL T500U
SETB PDR0:PINCSA
CALL T500U
CLRB PDR0:PINCSB
.ENDIF
SETB PDR8:PINRW
CLRB PDR8:PINDI
CALL T500U
SETB PDR9:PINE
CALL T500U
MOV DDR1,#00H
NOP
BBC PDR1:4,TESTBUSY2 ;IF RESET THEN WAIT 45ms
CALL T200U
TESTBUSY2: BBC PDR1:7,TURE_WRITE2 ;IF BUSY THEN WAIT 45ms
CALL T200U
TURE_WRITE2:
CLRB PDR9:PINE
CALL T500U
CLRB PDR8:PINDI
CLRB PDR8:PINRW
MOV A,HZHP
ADD A,#0B8H
SETB PDR9:PINE
MOV DDR1,#0FFH
NOP
MOV PDR1,A
CALL T200U
MOV DDR1,#00H
CLRB PDR9:PINE
CALL T500U
CLRB PDR8:PINDI
CLRB PDR8:PINRW
MOV A,HZLP
ADD A,HZLIP
.IF (A>=#40H)
SUB A,#40H
.ENDIF
ADD A,#40H
SETB PDR9:PINE
MOV DDR1,#0FFH
NOP
MOV PDR1,A
CALL T200U
CLRB PDR9:PINE
NOP
MOV DDR1,#00H
WRITE_LOOP2:
CLRB PDR9:PINE
CALL T500U
SETB PDR8:PINDI
CLRB PDR8:PINRW
CALL T500U
MOV A,@RW3
CLRB HBXSB
BBC HBXSB,WRITE2
NOT A
; JMP WRITE21
WRITE2: ;AND A,#7FH
WRITE21: CALL T500U
SETB PDR9:PINE
CALL T500U
MOV DDR1,#0FFH
CALL T500U
MOV PDR1,A ;WRITE A BIT TO LCD
CALL T200U
CLRB PDR9:PINE
NOP
MOV DDR1,#00H
MOV A,HZIP
CMP A,#1FH
BEQ ENDWRITE
INC HZIP
INCW RW3
MOV A,HZLIP
CMP A,#0FH
BNE NOT162 ;IF HZLIP<>16 THEN
JMP ENDWRITE
NOT162: INC HZLIP
JMP BEGINWRITE2
ENDWRITE: MOV DDR1,#0FFH
MOV PDR1,#00H
SETB PDR9:PINE
SETB PDR8:PINRW
SETB PDR8:PINDI
SETB PDR0:PINCSA
SETB PDR0:PINCSB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -