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

📄 _menusel.asm

📁 lcd drive asm program
💻 ASM
字号:
;--------------------------------------------------
;	
;	THIS FILE IS INCLUDED IN FILE "_INT_0.ASM"
;
;原则:每个函数调用都假设A被修改了
;只在最高层函数体里面保护A
;
;--------------------------------------


;------------------------------------
;
;	THIS FUNCTION ARE USE TO INCREASE DPTR 
;
;INPUT PARAMETERS:	DPTR
;OUTPUT PARAMETERS:	DPTR=DPTR+1, C FLAG CHANGED
;
;------------------------------------
;
;	DPTR IS INCREASED 
;
PROC	INC_DPTR4
INC_DPTR4:
	INC	DPTR
	INC	DPTR
	INC	DPTR
	INC	DPTR
	RET
	END
PROC	INC_DPTR6
INC_DPTR6:
	ACALL	INC_DPTR4
	INC	DPTR
	INC	DPTR
	RET
	END
PROC	INC_DPTR8
INC_DPTR8:
	ACALL	INC_DPTR4
	ACALL	INC_DPTR4
	RET
	END
;---------------------------------------------------------------------------------------
;
;	GET POINTER CURRENTLY DPTR POINTS TO
;
;INPUT PARAMETERS:	DPTR
;OUTPUT PARAMETERS:	DPTR=(WORD)*DPTR
;
PROC	GET_POINTER
GET_POINTER:
	PUSH	A
	MOV	A,#00H
	MOVC	A,@A+DPTR
	PUSH	A
	MOV	A,#01H
	MOVC	A,@A+DPTR
	POP	DPH
	MOV	DPL,A
	POP	A
	RET
	END
;---------------------------------------------------------------------------------------
;	MAKE DPTR POINTS TO THE END OF STRING 
;INPUT PAR:
;	DPTR POINTS TO THE STRING HEAD
;OUTPUT PAR:
;	DPTR POINTS NEXT TO THE '\0',CHANGE NONE OF REGISTERS EXECPT MAKE C FLAG 0
;
PROC	TO_STR_END
TO_STR_END:
	PUSH	A
NO_STR_END:
	MOV	A,#00H
	MOVC	A,@A+DPTR
	INC	DPTR
	JNZ	NO_STR_END
	POP	A
	RET
	END
;---------------------------------------------------------------------------------------
;
;INPUT PAR:	DPTR POINTS TO THE CURRENT SELECTED MENU ITEM
;OUTPUT PAR:	DPTR POINTS TO THE LAST MENU ITEM IN THE SAME LAYER
;		IF LAST NOT EXIST ,RETURN VALUE IS 0 AND VALUE OF DPTR IS NULL,ELSE 
;		IF LAST DO EXIST ,RETURN VALUE IS 1,AND DPTR POINTS TO THE LAST ITEM
;
PROC	GET_LAST
GET_LAST:
	ACALL	TO_STR_END	;NO CHANGE ANY THING ELSE EXCEPT MAKING C FLAG 0
	INC	DPTR
	INC	DPTR	
	ACALL	GET_POINTER	;NO CHANGE ANY THING ELSE
	MOV	A,DPH
	ORL	A,DPL
	JNZ	UP_I_EXIST
	MOV	A,#00H
	RET
UP_I_EXIST:
	MOV	A,#01H
	RET
	END
;---------------------------------------------------------------------------------------
;	
;IN PAR:	DPTR POINTS TO THE CURRENT SELECTED MENU ITEM
;OUT PAR:	DPTR POINTS TO THE NEXT MENU ITEM IN THE SAME LAYER 
;	IF NEXT NOT EXIST ,RETURN VALUE IS 0 AND VALUE OF DPTR IS NULL,ELSE 
;	IF NEXT DO EXIST ,RETURN VALUE IS 1,AND VALUE OF DPTR IS ADDRSS OF NEXT ITEM
;
PROC	GET_NEXT
GET_NEXT:
	LCALL	TO_STR_END
	ACALL	GET_POINTER
	MOV	A,DPH
	ORL	A,DPL
	JNZ	DN_I_EXIST
	MOV	A,#00H
	RET
DN_I_EXIST:
	MOV	A,#01H
	RET
	END
;-------------------------------------------------------------------------
;
;	GET THE IDENTIFIER OF CURRENTLY SELECTED MENU ITEM 
;
;INPUT PAR:	NONE
;
;OUTPUT PAR:	ID OF CURRENTLY SELECTED MENU ITEM IS IN REGISTER A
;
PROC	GET_ID
GET_ID:	MOV	DPH,ITEM_SEL_H
	MOV	DPL,ITEM_SEL_L
	LCALL	TO_STR_END
	LCALL	INC_DPTR8
	MOV	A,#00H
	MOVC	A,@A+DPTR
	RET
	END
;-------------------------------------------------------------------------
PROC	GET_PARENT,GET_SON
GET_PARENT:
	LCALL	FN_ITEM_DN
	MOV	A,DPH
	JNZ	GET_PARENT
	MOV	A,DPL
	JNZ	GET_PARENT
;NOW DPTR IS SURE BE NULL,SO GIVE IT THE ADDRESS OF
;THE CURRENT SELECTED MENU ITEM 
GET_SON:MOV	DPH,ITEM_SEL_H
	MOV	DPL,ITEM_SEL_L
	LCALL	TO_STR_END
	LCALL	INC_DPTR4
	LCALL	GET_POINTER
	MOV	ITEM_SEL_H,DPH
	MOV	ITEM_SEL_L,DPL
	RET
	END
;---------------------------------------------------------------------------------------
;	IF LAST ITEM EXIST ,ITEM_SEL_H(L) POINTS TO IT,
;	IF IT NOT EXIST,ITEM_SEL_H(L) NOT CHANGED
PROC	FN_ITEM_UP
FN_ITEM_UP:
	MOV	DPH,ITEM_SEL_H
	MOV	DPL,ITEM_SEL_L
	ACALL	GET_LAST
	JZ	FN_I_UP_RET	;NOT EXIST
	MOV	ITEM_SEL_H,DPH
	MOV	ITEM_SEL_L,DPL
FN_I_UP_RET:
	RET
	END
;---------------------------------------------------------------------------------------
;	IF NEXT ITEM EXIST ,ITEM_SEL_H(L) POINTS TO IT,
;	IF IT NOT EXIST,ITEM_SEL_H(L) NOT CHANGED,AND 
;	DPTR IS NULL
PROC	FN_ITEM_DN
FN_ITEM_DN:
	MOV	DPH,ITEM_SEL_H
	MOV	DPL,ITEM_SEL_L
	ACALL	GET_NEXT
	JZ	FN_I_DN_RET
	MOV	ITEM_SEL_H,DPH
	MOV	ITEM_SEL_L,DPL
FN_I_DN_RET:
	RET
	END
;-------------------------------------------------------------------------------------------
PROC	FN_PG_UP
FN_PG_UP:
	ACALL	FN_ITEM_UP
	ACALL	FN_ITEM_UP
	ACALL	FN_ITEM_UP
	RET
	END
;-------------------------------------------------------------------------------------------
PROC	FN_PG_DN
FN_PG_DN:
	ACALL	FN_ITEM_DN
	ACALL	FN_ITEM_DN
	ACALL	FN_ITEM_DN
	RET
	END

⌨️ 快捷键说明

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