📄 for 80c196.txt
字号:
;***************************************************************************
;液晶显示屏相关子程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;***************************************************************************
;十六进制到BCD码转换子程序
;输入: LCDAX
;输出: LCDDL LCDCH LCDCL LCDBH LCDBL
HEXTODEC: CLR LCDBX
DIVU LCDAX,#10000 ;16进制转换为10进制
ANDB LCDAL,#0FH
LDB LCDDL,LCDAL
LD LCDAX,LCDBX
CLR LCDBX
DIVU LCDAX,#1000
ANDB LCDAL,#0FH
LDB LCDCH,LCDAL
LD LCDAX,LCDBX
LD LCDBX,#0000H
DIVU LCDAX,#0064H
ANDB LCDAL,#0FH
LDB LCDCL,LCDAL
ST LCDBX,LCDAX
DIVUB LCDAX,#0AH
ANDB LCDAL,#0FH
LDB LCDBH,LCDAL
LDB LCDAL,LCDAH
ANDB LCDAL,#0FH
LDB LCDBL,LCDAL
RET
;****************************************************************************
;滚动刷新一行子程序
RDISROW: LDB LCD_O_X,#00H
LDB COUNTL,#16
LDB COUNTH,#15
DWL2: LD LCDDX,PAGE_ADD
INC PAGE_ADD
DWL1: LDB LCD_CODE,[LCDDX]+
LCALL LCDWRI_CC
ADDB LCD_O_X,#2
DJNZ COUNTH,DWL1
; LCALL DELAY1
LDB COUNTH,#15
LDB LCD_O_X,#00H
DJNZ COUNTL,DWL2
RET
;****************************************************************************
;刷新一行子程序
DISROW: LDB LCDCL,#15
LDB LCD_O_X,#0
DRLOOP: LDB LCD_CODE,[PAGE_ADD]+
PUSH LCD_O_X
LCALL LCDWRI_CC
POP LCD_O_X
ADDB LCD_O_X,#2
DJNZ LCDCL,DRLOOP
RET
;*****************************************************************************
;满屏写汉字子显示程序:15*4
DISPLAY: LDB LCDCL,#15
LDB LCDCH,#4
LDB LCD_O_Y,#0
LDB LCD_O_X,#0
DLOOP: LDB LCD_CODE,[PAGE_ADD]+
LCALL LCDWRI_CC
ADDB LCD_O_X,#2
DJNZ LCDCL,DLOOP
ADDB LCD_O_Y,#16
CLRB LCD_O_X
LDB LCDCL,#15
DJNZ LCDCH,DLOOP
RET
;***************************************************************************
;液晶屏初始化子程序
LCDINT: LDB LCDDAT1,#00H
LDB LCDDAT2,#00H
LDB LCDCOM,#40H
LCALL LCDPR1
LDB LCDDAT1,#1EH
LDB LCDDAT2,#00H
LDB LCDCOM,#41H
LCALL LCDPR1
LDB LCDDAT1,#00H
ADDB LCDDAT2,#10H
LDB LCDCOM,#42H
LCALL LCDPR1
LDB LCDDAT1,#1EH
LDB LCDDAT2,#00H
LDB LCDCOM,#43H
LCALL LCDPR1
LDB LCDCOM,#0A7H
LCALL LCDPR12
LDB LCDCOM,#81H
LCALL LCDPR12
LDB LCDCOM,#9CH
LCALL LCDPR12
RET
;***************************************************************************
;液晶屏清显示RAM区子程序
LCDCLEAR: LDB LCDDAT1,#00H
LDB LCDDAT2,#00H
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCD_COUNT,#0F0H
LDB LCDCOM,#0B0H
LCALL LCDPR12
LCDCLEAR1: LCALL LCDST3
CLRB LCDAL
STB LCDAL,[LCDD_ADD]
DJNZ LCD_COUNT,LCDCLEAR1
LDB LCDCOM,#0B2H
LCALL LCDPR12
LDB LCDDAT1,#00H
ADDB LCDDAT2,#10H
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCD_COUNT,#0F0H
LDB LCD_COUNT1,#8
LDB LCDCOM,#0B0H
LCALL LCDPR12
LCDCLEAR2: LCALL LCDST3
CLRB LCDAL
STB LCDAL,[LCDD_ADD]
DJNZ LCD_COUNT,LCDCLEAR2
LDB LCD_COUNT,#0F0H
DJNZ LCD_COUNT1,LCDCLEAR2
LDB LCDCOM,#0B2H
LCALL LCDPR12
RET
;***************************************************************************
;建立CGRAM子程序
CGRAM: LD LCDDAT,#0003H
LDB LCDCOM,#22H
LCALL LCDPR1
LD LCDDAT,#1C00H
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDCOM,#0B0H
LCALL LCDPR12
MULUB LCDAX,LCD_COUNT,#08H
STB LCDAL,LCD_COUNT
INCB LCDAH
STB LCDAH,LCD_COUNT1
LD LCDCX,HZ_ADDR
CGRAM1: LCALL LCDST3
LDB LCDDAT1,[LCDCX]+
STB LCDDAT1,[LCDD_ADD]
DJNZ LCD_COUNT,CGRAM1
DJNZ LCD_COUNT1,CGRAM1
LDB LCDCOM,#0B2H
LCALL LCDPR12
RET
;***************************************************************************
;图形方式下写汉字子程序
LCDWRI_CC: LDB LCD_TEMPL,LCD_O_X
LDB LCD_TEMPH,LCD_O_Y
LDB LCDAL,#1EH
MULUB LCDAX,LCDAL,LCD_TEMPH
ADDB LCD_TEMPL,LCDAL
ADDCB LCDAH,#10H
LDB LCD_TEMPH,LCDAH
LD DPTR,#TXHZ
LDB LCDAL,#20H
MULUB LCDAX,LCDAL,LCD_CODE
ADD DPTR,LCDAX
LDB LCD_COUNT,#10H
LCDWRI_CC1: LDB LCDDAT1,LCD_TEMPL
LDB LCDDAT2,LCD_TEMPH
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDDAT2,0[DPTR]
LDB LCDDAT1,16[DPTR]
INC DPTR
LDB LCDCOM,#0C0H
LCALL LCDPR11
LDB LCDDAT2,LCDDAT1
LCALL LCDPR11
ADDB LCD_TEMPL,#1EH
ADDCB LCD_TEMPH,#0
DJNZ LCD_COUNT,LCDWRI_CC1
RET
;***************************************************************************
;文本方式下写汉字子程序
LCDWRI_CT: LDB LCDAL,#1EH
MULUB LCDAX,LCD_O_Y
ADDB LCDAL,LCD_O_X
ADDCB LCDAH,#0
LD LCDDAT,LCDAX
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDDAT2,LCD_CODE
LDB LCDCOM,#0C0H
LCALL LCDPR11
INCB LCDDAT2
INCB LCDDAT2
LCALL LCDPR11
ADD LCDDAT,LCDAX,#1000H
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDDAT2,LCD_ATTR
LDB LCDCOM,#0C0H
; LCALL LCDPR11
; LCALL LCDPR11
ADD LCDAX,#001EH
LD LCDDAT,LCDAX
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDDAT2,LCD_CODE
INCB LCDDAT2
LDB LCDCOM,#0C0H
LCALL LCDPR11
INCB LCDDAT2
INCB LCDDAT2
LCALL LCDPR11
ADD LCDDAT,LCDAX,#1000H
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDDAT2,LCD_ATTR
LDB LCDCOM,#0C0H
; LCALL LCDPR11
; LCALL LCDPR11
RET
;***************************************************************************
;文本方式下写西文子程序
LCDWRI_C: LDB LCDDAT,#1EH
MULUB LCDDAT,LCD_O_Y
ADDB LCDDAT1,LCD_O_X
ADDCB LCDDAT2,R0
STB LCDDAT2,LCDAL
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDDAT2,LCD_CODE
LDB LCDCOM,#0C4H
LCALL LCDPR11
ADDB LCDDAT2,LCDAL,#10H
LDB LCDCOM,#24H
LCALL LCDPR1
LDB LCDDAT2,LCD_ATTR
LDB LCDCOM,#0C4H
LCALL LCDPR11
RET
;***************************************************************************
;液晶屏判断读写指令/数据状态位子程序
LCDST01: LDB LCD_STA,[LCDC_ADD]
JBC LCD_STA,0,LCDST01
JBC LCD_STA,1,LCDST01
RET
;***************************************************************************
;液晶屏判断数据自动读状态位子程序
LCDST2: LDB LCD_STA,[LCDC_ADD]
JBC LCD_STA,2,LCDST2
RET
;***************************************************************************
;液晶屏判断数据自动写状态位子程序
LCDST3: LDB LCD_STA,[LCDC_ADD]
JBC LCD_STA,3,LCDST3
RET
;***************************************************************************
;液晶屏判断屏读/屏拷状态位子程序
LCDST6: LDB LCD_STA,[LCDC_ADD]
JBC LCD_STA,6,LCDST6
RET
;***************************************************************************
;液晶屏写指令和写数据子程序
LCDPR1: LCALL LCDST01
STB LCDDAT1,[LCDD_ADD]
LCDPR11: LCALL LCDST01
STB LCDDAT2,[LCDD_ADD]
LCDPR12: LCALL LCDST01
STB LCDCOM,[LCDC_ADD]
RET
;***************************************************************************
;液晶屏读数据子程序
LCDPR2: LCALL LCDST01
LDB LCDDAT2,[LCDD_ADD]
RET
;***************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -