⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _disp.asm

📁 lcd drive asm program
💻 ASM
字号:
;------------------------------------------------------------------------------------------------
;WHEN MENU IS ROLLED ONE PAGE, THIS FUNCTION IS NEEDED
;IN PARAMETER:
;	DPTR:	CURRENT SELECTED MENU ITEM POINTER
;OUT PARAMETER:
;------------------------------------------------------------------------------------------------
PROC	DRAWMENU
DRAWMENU:
	LCALL	DRAW_UD_ARROW
	MOV	DPH,ITEM_SEL_H	
	MOV	DPL,ITEM_SEL_L
	MOV	R5,#00H		;COUN THE LINE NUMBER ALREADY OUTED 
DR_NXT_ITEM:
	MOV	A,R5	;R6=2*R5 BECAUSE 16*8 NEEDS 2 LINE TO SHOW ONE CHAR
	MOV	R6,A
	MOV	R7,#00H
	CLR	F0
	CJNE	R6,#00H,DR_NM_CHAR
	SETB	F0
DR_NM_CHAR:
	LCALL	DRAW_MENU_ITEM
;------------------------------------------------------------
	PUSH	DPH
	PUSH	DPL
	LCALL	INC_DPTR6
	LCALL	GET_POINTER	;GET HELP INFO STRING ADDR
	CJNE	R5,#00H,NOT_HLP	; IS THE FIRST LINE?
	LCALL	NULL_DPTR
	JC 	DR_HLP
	SJMP	NOT_HLP		;NO HELP INFORMATION
DR_HLP:	MOV	R6,#00H
	MOV	R7,#12D
	LCALL	DRAW_MI_HELP
NOT_HLP:POP	DPL
	POP	DPH
;-----------------------------------------------------------
	LCALL	GET_POINTER 	;NOW DPTR POINTS TO NEXT MENU ITEM STRING 
	INC	R5
	LCALL	NULL_DPTR
	JC	DR_NXT
	RET
DR_NXT:	CJNE	R5,#08H,DR_NXT_ITEM
	RET
	END
;------------------------------------------------------------------------------------------------
;	DRAW_UD_ARROW
PROC	DRAW_UD_ARROW
DRAW_UD_ARROW:
	MOV	DPH,ITEM_SEL_H
	MOV	DPL,ITEM_SEL_L
	LCALL	TO_STR_END
	INC	DPTR
	INC	DPTR
	LCALL	GET_POINTER
	LCALL	NULL_DPTR
	JNC	NO_UP_ARROW
DIS_UP_ARROW:
	MOV	DPTR,#U_ARROW_SML
	MOV	R6,#00H
	MOV	R7,#54D
	LCALL	DIS_8_6
NO_UP_ARROW:
	MOV	DPH,ITEM_SEL_H
	MOV	DPL,ITEM_SEL_L
	MOV	R5,#00H
NEXT:	LCALL	GET_NEXT
	INC	R5
	CJNE	R5,#08H,NOT_PG_END
	LCALL	NULL_DPTR
	JNC	NO_NEXT
	MOV	DPTR,#D_ARROW_SML
	MOV	R6,#07H
	MOV	R7,#54D
	LCALL	DIS_8_6
	RET
NOT_PG_END:
	LCALL	NULL_DPTR
	JC	NEXT
NO_NEXT:RET
	END
;------------------------------------------------------------------------------------------------
;DRAW_MENU_ITEM
;
;给定DPTR,R6,R7
;然后调用本程序,就会在R6,R7所指向的坐标处显示一个字符串,它以\0结束
;
;IN PARAMETERS:
;	DPTR:	ADDRESS OF DATATO BE DISPLAYED
;		THIS DATA IS A STRING ,WITH \0 TERMINATE
;	F0:	THIS BIT INDICATE WHETHER THE CURRENT
;		SELECTED MENU ITEM IS SELECTED OR NOT
;	R6	X---PAGE
;	R7:	Y---COLUME 
;OUT PARAMETERS:
;	DPTR:	ADDRESS OF NEXT STRING WITH THE SAME
;		LAYER WITH LAST DISPLAYED STRING
;	F0:	NOT CHANGED
;	R6:	NOT CHANGED
;	R7:	Y---COLUME,BUT CHANGED,NOW IT KEEPS TO BE
;		THE LAST DISPLAYED CHAR'S START COLUME
;------------------------------------------------------------------------------------------------
PROC	DRAW_MENU_ITEM
DRAW_MENU_ITEM:
	PUSH	DPH
	PUSH	DPL
GETCHAR:POP	DPL
	POP	DPH
	MOV	A,#00H
	MOVC	A,@A+DPTR 	;A KEEP THE ASCII CODE
	INC	DPTR
	PUSH	DPH
	PUSH	DPL
	JZ	DRAW_MI_RET
	CLR	C
	SUBB	A,#20H	
	MOV	DPTR,#NM_CHAR_SML
	JNB	F0,TO_DRAW
	MOV	DPTR,#IT_CHAR_SML
TO_DRAW:MOV	B,#06D	;RELATIVE ADDRESS IS ASCII*6
	MUL	AB	 
	CLR	C	;DPTR ADD RELATIVE
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,DPH
	ADDC	A,B
	MOV	DPH,A
;NOW DPTR KEEP THE CORECT ADDRESS OF POINT MATRICS FOR DISPLAY 
	LCALL	DIS_8_6	; DPTR CHANGED,BUT NO PROBLEM
	MOV	A,R7
	ADD	A,#06H
	MOV	R7,A
	SJMP	GETCHAR
DRAW_MI_RET:
	LCALL	INC_DPTR4
	LCALL	GET_POINTER
	LCALL	NULL_DPTR
	JNC	NO_SON
	MOV	DPTR,#R_ARROW_SML
	LCALL	DIS_8_6
NO_SON:	POP	DPL
	POP	DPH
	RET
	END
;----------------------------------------------
PROC	NULL_DPTR
NULL_DPTR:
	PUSH	A
	MOV	A,DPH
	ORL	A,DPL
	JNZ	UN_NULL
	CLR	C
	POP	A
	RET
UN_NULL:SETB	C
	POP	A
	RET
	END
;----------------------------------------------
;DRAW_MI_HELP
;------------------------------------------------------------------------------------------------
;给定DPTR,R6,R7,然后调用本程序,就会在右半屏幕R6,R7所指向的坐标处开始显示一个字符串,它以\0结束
;IN PARAMETERS:
;	DPTR:	ADDRESS OF DATATO BE DISPLAYED THIS DATA IS A STRING ,WITH \0 TERMINATE
;	R6	X---PAGE
;	R7:	Y---COLUME 
;OUT PARAMETERS:
;	DPTR:	ADDRESS OF NEXT STRING WITH THE SAME LAYER WITH LAST DISPLAYED STRING
;	R6:	PAGE,BUT CHANGED,NOW IT KEEPS TO BE THE LAST DISPLAYED CHAR'S START LINE
;	R7:	Y---COLUME,BUT CHANGED,NOW IT KEEPS TO BE THE LAST DISPLAYED CHAR'S START COLUME
;------------------------------------------------------------------------------------------------
PROC	DRAW_MI_HELP
DRAW_MI_HELP:
	PUSH	DPH
	PUSH	DPL
MI_HLP_GETCH:
	POP	DPL
	POP	DPH
	MOV	A,#00H
	MOVC	A,@A+DPTR 	;A KEEP THE ASCII CODE
	INC	DPTR	
	PUSH	DPH
	PUSH	DPL
	JZ	MI_HLP_RET	;IS ASCII =\0?
	CLR	C
	SUBB	A,#20H
	MOV	DPTR,#NM_CHAR_SML
	JNB	HLP_FONT,NM_FONT
	MOV	DPTR,#IT_CHAR_SML
NM_FONT:MOV	B,#06D	;RELATIVE ADDRESS IS ASCII*6
	MUL	AB	 
	CLR	C	;DPTR ADD RELATIVE
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,DPH
	ADDC	A,B
	MOV	DPH,A		;NOW DPTR KEEP THE CORECT ADDRESS OF POINT MATRICS FOR DISPLAY 
	LCALL	DIS_8_6R	; DPTR CHANGED,BUT NO PROBLEM

	CJNE	R7,#54D,INC_COL
	MOV	R7,#00H
	INC	R6
	SJMP	MI_HLP_GETCH
INC_COL:MOV	A,R7
	ADD	A,#06H
	MOV	R7,A
	SJMP	MI_HLP_GETCH
MI_HLP_RET:
	POP	DPL
	POP	DPH
	RET
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -