|
************************************************************ ;液晶显示屏通用子程序 ************************************************************ ;除法子程序 ;输入: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
|