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

📄 hpis.asm

📁 用SEED-DTK平台开发的液晶和键盘控制的源码
💻 ASM
字号:
*file:	hpi.asm

	.file	"hpis.asm"
	.c_mode	
	.copy	"vc5402.inc"
*	.copy	"mmi5402.inc"
	
	.ref	IV_RESET
	
	.def	_init_timer0
	.def	_init_hpi
	.def	test_key
	.def    ISR_TIMER0
	
	.def	_GUI_KeyValue
	
	.bss	_GUI_KeyValue,1
	.bss	_first_press,1
	.bss	_add_num,1
	
	.text
	
ISR_TIMER0:
	PSHM	AL
	PSHM	AH
	PSHM	BL
	PSHM	BH
	PSHM	AR0
	PSHM	AR1
	PSHM	AR2
	
	STM		#_first_press,AR0
	STM		#_GUI_KeyValue,AR1
	STM		#_add_num,AR2
	CMPM	*AR2,#20
	BC	T0,TC
	LD		*AR2,A
	ADD		#1h,A,B
	STL		B,*AR2
	B	T2
T0:
	LD		#0,A
	STL		A,*AR2	
	LD		*AR1,B
	BC	T2,BNEQ
	CALL	test_key
	BC	T1,AEQ
	LD		*AR0,B
	BC	T1,BNEQ
	STL		A,*AR1
	STL		A,*AR0
	
T1:
	STL		A,*AR0
	
T2:
	POPM	AR2
	POPM	AR1
	POPM	AR0
	POPM	BH
	POPM	BL
	POPM	AH
	POPM	AL
	POPM	ST1
	POPM	ST0
	
	RETE

***************************************************************************
*	函数:	_init_timer0
*	目的:	初始化HPI
*	输入:	无
*	输出:	无
***************************************************************************

_init_timer0:

	
	STM #0C30H,TCR
	STM #50000,PRD		;1ms
	STM #0,TIM
	STM #0C20H,TCR
	
	ANDM #00h,*(IMR)
;	ANDM #1FFFh,*(IFR)
	ORM  #08H,*(IMR)
	ANDM #03fh,*(PMST)
	ORM	 #IV_RESET,*(PMST)
	RSBX INTM
	RET
	
***************************************************************************
*	函数:	_init_hpi
*	目的:	初始化HPI
*	输入:	无
*	输出:	无
***************************************************************************

_init_hpi:

	STM	#0fh,GPIOCR	;configure hpi0~3 as output, hpi4~7 as input
	STM	#0FFh,GPIOSR	;configure hpi0~7 as high
	LD	#0,A
	STM		#_GUI_KeyValue,AR0
	STL		A,*AR0
	STM		#_first_press,AR0
	STL		A,*AR0
	STM		#_add_num,AR0
	STL		A,*AR0	
	RET
	
***************************************************************************
*	函数:	_test_key
*	目的:	键盘测试
*	输入:	无
*	输出:	A	0为无触动
*			1~20为19个按键触动
***************************************************************************

test_key:

	PSHM ST0
	PSHM BL
	PSHM BH
	
	LD  #0,A
	LD	#0,B
	STM	#0FEh,GPIOSR	;configure hpi0 as low
	NOP
	NOP
	NOP
	NOP

;test hpi4
	LD	#1,B
	LDM	GPIOSR,A
	XOR	#0EEh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi5
	LD	#2,B
	LDM	GPIOSR,A
	XOR	#0DEh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi6
	LD	#3,B
	LDM	GPIOSR,A
	XOR	#0BEh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi7
	LD	#4,B
	LDM	GPIOSR,A
	XOR	#07Eh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test BIO
	LD	#5,B
	BC	KEY1,BIO
	
	
	STM #0FFh,GPIOSR
	NOP
	NOP
	NOP
	NOP
	STM	#0FDh,GPIOSR	;configure hpi1 as low
	NOP
	NOP
	NOP
	NOP
;test hpi4
	LD	#6,B
	LDM	GPIOSR,A
	XOR	#0EDh,A
	BC	KEY1,AEQ	;if a = 0, goto key1

;test hpi5	
	LD	#7,B
	LDM	GPIOSR,A
	XOR	#0DDh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi6
	LD	#8,B
	LDM	GPIOSR,A
	XOR	#0BDh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi7
	LD	#9,B
	LDM	GPIOSR,A
	XOR	#07Dh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test bio
	LD	#10,B
	BC	KEY1,BIO
	
	

	STM	#0FBh,GPIOSR	;configure hpi2 as low
	NOP
	NOP
	NOP
	NOP

;test hpi4
	LD	#11,B
	LDM	GPIOSR,A
	XOR	#0EBh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi5
	LD	#12,B
	LDM	GPIOSR,A
	XOR	#0DBh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi6
	LD	#13,B
	LDM	GPIOSR,A
	XOR	#0BBh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi7
	LD	#14,B
	LDM	GPIOSR,A
	XOR	#07Bh,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test bio
	LD	#15,B
	BC	KEY1,BIO
	
	

	STM	#0F7h,GPIOSR	;configure hpi3 as low
	NOP
	NOP
	NOP
	NOP

;test hpi4
	LD	#16,B
	LDM	GPIOSR,A
	XOR	#0E7h,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi5
	LD	#17,B
	LDM	GPIOSR,A
	XOR	#0D7h,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi6
	LD	#18,B
	LDM	GPIOSR,A
	XOR	#0B7h,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi7
	LD	#19,B
	LDM	GPIOSR,A
	XOR	#077h,A
	BC	KEY1,AEQ	;if a = 0, goto key1
	
;test hpi7
	LD	#20,B
	BC	KEY1,BIO
	
	LD	#0,B		;no touch test_key_num = 0
	
KEY1:
	LD	B,A
	STM	#0FFh,GPIOSR	;configure hpi0~7 as high
		
	POPM BH
	POPM BL
	POPM ST0

	
	.if	__far_mode
	FRET
	.else
	RET
	.endif
	
	.end

⌨️ 快捷键说明

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