📄 for 240.txt
字号:
************************************************************
;液晶显示屏通用子程序
************************************************************
;除法子程序
;输入:LCDAX(被除数)!=0,LCDBX(除数)!=0 lcdbx<lcdax
;输出:ACCL(商),ACCH(余数)
DIVISION: POINT_B11 ;change data page
SPLK #0,DIVSHIFT ;wwa
DIV_TEST: LACL LCDAX
BCND DIV_RET,EQ
LACL LCDBX
BCND DIV_RET,EQ
BIT LCDAX,0
BCND DIV_LACC,TC ;TC=1,branch to load ACC
LACL LCDAX
SACL LCDAX,1
LACC DIVSHIFT
ADD #1
SACL DIVSHIFT
B DIV_TEST ;repeat until ACC(15) is 1
DIV_LACC: LACC #15
SUB DIVSHIFT
SACL DIVSHIFT
BCND OPEONCE,EQ
LACL LCDAX ;division
RPT DIVSHIFT ;#15 wwa
SUBC LCDBX
B DIV_RET
OPEONCE: LACL LCDAX
SUBC LCDBX
DIV_RET: RET
************************************************************
;十六进制到十进制转换子程序
;输入:LCDAX
;输出:LCDGX,LCDFX,LCDEX,LCDDX,LCDCX (从高位到低位)
HEXTODEC: SPLK #10000,LCDBX
CALL DIVISION
SACL LCDGX
SACH LCDAX
SPLK #1000,LCDBX
CALL DIVISION
SACL LCDFX
SACH LCDAX
SPLK #100,LCDBX
CALL DIVISION
SACL LCDEX
SACH LCDAX
SPLK #10,LCDBX
CALL DIVISION
SACL LCDDX
SACH LCDCX
RET
************************************************************
;滚动刷新一行子程序
;输入:LCD_O_Y
R_DISPLAY: SPLK #0,LCD_O_X
SPLK #16,LCDBX
SPLK #15,LCDAX
SPLK #8000,LCDCX
MAR *,AR6
RD_LOOP2: LAR AR6,LCDCX
LACL LCDCX
ADD #1
SACL LCDCX
RD_LOOP1: LACL *+
SACL LCD_CODE
CALL LCDWRI_CC
LACL LCD_O_X
ADD #2
SACL LCD_O_X
LACL LCDAX
SUB #1
SACL LCDAX
BCND RD_LOOP1,NEQ
;CALL mS_DELAY
SPLK #15,LCDAX
SPLK #0,LCD_O_X
LACL LCDBX
SUB #1
SACL LCDBX
BCND RD_LOOP2,NEQ
RET
************************************************************
;满屏刷新子程序(15*4)
P_DISPLAY: SPLK #0,LCD_O_Y
SPLK #0,LCD_O_X
SPLK #4,LCDBX
SPLK #15,LCDAX
MAR *,AR6
LAR AR6,#8100H
PD_LOOP: LACL *+
SACL LCD_CODE
CALL LCDWRI_CC
LACL LCD_O_X
ADD #2
SACL LCD_O_X
LACL LCDAX
SUB #1
SACL LCDAX
BCND PD_LOOP,NEQ
SPLK #0,LCD_O_X
LACL LCD_O_Y
ADD #16
SACL LCD_O_Y
SPLK #15,LCDAX
LACL LCDBX
SUB #1
SACL LCDBX
BCND PD_LOOP,NEQ
RET
************************************************************
;液晶屏初始化子程序
LCDINT: SPLK #0,LCDDAT1
SPLK #0,LCDDAT2
SPLK #40H,LCDCOM
CALL LCDPR1
SPLK #1EH,LCDDAT1
SPLK #0,LCDDAT2
SPLK #41H,LCDCOM
CALL LCDPR1
SPLK #0,LCDDAT1
SPLK #10H,LCDDAT2
SPLK #42H,LCDCOM
CALL LCDPR1
SPLK #1EH,LCDDAT1
SPLK #0,LCDDAT2
SPLK #43H,LCDCOM
CALL LCDPR1
SPLK #0A7H,LCDCOM
CALL LCDPR12
SPLK #81H,LCDCOM
CALL LCDPR12
SPLK #09CH,LCDCOM
CALL LCDPR12
RET
************************************************************
;清屏子程序
LCDCLEAR: SPLK #0,LCDDAT1
SPLK #0,LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
SPLK #0F0H,LCDCOUNT1
SPLK #0B0H,LCDCOM
CALL LCDPR12
LCDCLEAR1: CALL LCDST03
SPLK #0,LCDAX
OUT LCDAX,0000
LACL LCDCOUNT1
SUB #1
SACL LCDCOUNT1
BCND LCDCLEAR1,NEQ
SPLK #0B2H,LCDCOM
CALL LCDPR12
SPLK #0,LCDDAT1
SPLK #10H,LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
SPLK #8,LCDCOUNT2
SPLK #0F0H,LCDCOUNT1
SPLK #0B0H,LCDCOM
CALL LCDPR12
LCDCLEAR2: CALL LCDST03
SPLK #0,LCDAX
OUT LCDAX,0000
LACL LCDCOUNT1
SUB #1
SACL LCDCOUNT1
BCND LCDCLEAR2,NEQ ;TEST 0908
SPLK #0F0H,LCDCOUNT1
LACL LCDCOUNT2
SUB #1
SACL LCDCOUNT2
BCND LCDCLEAR2,NEQ
SPLK #0B2H,LCDCOM
CALL LCDPR12
RET
************************************************************
;建立CGRAM子程序
;输入:LCDCOUNT1(汉字数*4)
CGRAM: SPLK #3,LCDDAT1
SPLK #0,LCDDAT2
SPLK #22H,LCDCOM
CALL LCDPR1
SPLK #0,LCDDAT1
SPLK #1CH,LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
SPLK #0B0H,LCDCOM
CALL LCDPR12
LT LCDCOUNT1
SPLK #8,LCDTEMP4
MPYU LCDTEMP4
SPM 0
PAC
ADD #100H
SACL LCDTEMP1
AND #0FFH
SACL LCDCOUNT1
LACL LCDTEMP1
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDCOUNT2
MAR *,AR6
LAR AR6,#8200H
CGRAM1: CALL LCDST03
OUT *+,0000H
LACL LCDCOUNT1
SUB #1
SACL LCDCOUNT1
BCND CGRAM1,NEQ
LACL LCDCOUNT2
SUB #1
SACL LCDCOUNT2
BCND CGRAM1,NEQ
SPLK #0B2H,LCDCOM
CALL LCDPR12
RET
************************************************************
;图形方式下写中文子程序
;输入:LCD_O_Y,LCD_O_X,LCD_CODE
LCDWRI_CC: LT LCD_O_Y
SPLK #1EH,LCDTEMP4
MPYU LCDTEMP4
SPM 0
PAC
ADD LCD_O_X
ADD #1000H
SACL LCDTEMP3
AND #0FFH
SACL LCDTEMP1
LACL LCDTEMP3
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDTEMP2
LT LCD_CODE
SPLK #20H,LCDTEMP4
MPYU LCDTEMP4
SPM 0
PAC
ADD #8300H
SACL LCD_DPTR
LAR AR7,LCD_DPTR
MAR *,AR7
SPLK #16,LCDCOUNT1
LCDWRI_CC1: LACL LCDTEMP1
SACL LCDDAT1
LACL LCDTEMP2
SACL LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
LACL *
SACL LCDDAT2
ADRK #16
LACL *
SACL LCDDAT1
SBRK #16
LACL *+
SPLK #0C0H,LCDCOM
CALL LCDPR11
LACL LCDDAT1
SACL LCDDAT2
CALL LCDPR11
CLRC SXM
LACC LCDTEMP2,8
OR LCDTEMP1
ADD #1EH
SACL LCDTEMP3
AND #0FFH
SACL LCDTEMP1
LACL LCDTEMP3
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDTEMP2
LACL LCDCOUNT1
SUB #1
SACL LCDCOUNT1
BCND LCDWRI_CC1,NEQ
MAR *,AR6
RET
************************************************************
;文本方式下写中文子程序
;输入:LCD_O_Y,LCD_O_X,LCD_CODE
LCDWRI_CT: LT LCD_O_Y
SPLK #1EH,LCDTEMP4
MPYU LCDTEMP4
SPM 0
PAC
ADD LCD_O_X
SACL LCDTEMP1
AND #0FFH
SACL LCDDAT1
LACL LCDTEMP1
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDDAT2
SPLK #024H,LCDCOM
CALL LCDPR1
LACL LCD_CODE
SACL LCDDAT2
SPLK #0C0H,LCDCOM
CALL LCDPR11
ADD #2
SACL LCDDAT2
CALL LCDPR11
LACL #0
ADD LCDTEMP2
ADD #1000H
SACL LCDTEMP2
AND #0FFH
SACL LCDDAT1
LACL LCDTEMP1
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
LACL #0
ADD LCDTEMP1
ADD #1EH
SACL LCDTEMP1
AND #0FFH
SACL LCDDAT1
LACL LCDTEMP1
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
LACL LCD_CODE
ADD #1
SACL LCDDAT2
SPLK #0C0H,LCDCOM
CALL LCDPR11
ADD #2
SACL LCDDAT2
CALL LCDPR11
LACL #0
ADD LCDTEMP1
ADD #1000H
SACL LCDTEMP1
AND #0FFH
SACL LCDDAT1
LACL LCDTEMP1
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
RET
************************************************************
;文本方式下写西文子程序
;输入:LCD_O_Y,LCD_O_X,LCD_CODE
LCDWRI_C: LT LCD_O_Y
SPLK #1EH,LCDTEMP4
MPYU LCDTEMP4
SPM 0
PAC
ADD LCD_O_X
SACL LCDTEMP1
AND #0FFH
SACL LCDDAT1
LACL LCDTEMP1
AND #0FFH,8
CLRC SXM
RPT #7
SFR
SACL LCDDAT2
SPLK #24H,LCDCOM
CALL LCDPR1
LACL LCDDAT2
SACL LCDTEMP1
LACL LCD_CODE
SACL LCDDAT2
SPLK #0C4H,LCDCOM
CALL LCDPR11
************************************************************
;液晶屏写指令和写数据子程序
;输入:LCDDAT1,LCDDAT2,LCDCOM
LCDPR1: CALL LCDST01
OUT LCDDAT1,0000H
LCDPR11: CALL LCDST01
OUT LCDDAT2,0000H
LCDPR12: CALL LCDST01
OUT LCDCOM,0001H
RET
************************************************************
;液晶屏读数据子程序
;output:LCDDAT2
LCDPR2: CALL LCDST01
IN LCDDAT2,0000H
RET
************************************************************
;液晶屏判断读写指令/数据状态位子程序
LCDST01: IN LCD_STA,0001H
BIT LCD_STA,15
BCND LCDST01,NTC
BIT LCD_STA,14
BCND LCDST01,NTC
RET
************************************************************
;液晶屏判断数据自动读状态子程序
LCDST02: IN LCD_STA,0001H
BIT LCD_STA,13
BCND LCDST02,NTC
RET
************************************************************
;液晶屏判断数据自动写状态子程序
LCDST03: IN LCD_STA,0001H
BIT LCD_STA,12
BCND LCDST03,NTC
RET
************************************************************
;液晶屏判断屏读/屏拷状态位子程序
LCDST06: IN LCD_STA,0001H
BIT LCD_STA,9
BCND LCDST06,NTC
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -