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

📄 key.asm

📁 直流电机转速测控
💻 ASM
字号:
.DEFINE Key_Debounce	4			
.DEFINE Key_TimeOut		64			
.DEFINE Key_IO_Port			0	
.DEFINE Key_IO_HighByte		0	
.IF Key_IO_HighByte==0
	.DEFINE Key_ALL			0x001f		
.ELSE
	.DEFINE Key_ALL			0x1f00
.ENDIF
.IF Key_IO_Port==0
	.DEFINE P_Key_Data		0x7000
	.DEFINE P_Key_Buf		0x7001
	.DEFINE P_Key_Dir		0x7002
	.DEFINE P_Key_Attrib	0x7003
.ELSE
	.DEFINE P_Key_Data		0x7005
	.DEFINE P_Key_Buf		0x7006
	.DEFINE P_Key_Dir		0x7007
	.DEFINE P_Key_Attrib	0x7008
.ENDIF
.DEFINE P_INT_Mask		0x702d
.DEFINE P_TimeBase_Setup	0x700e
.DEFINE	P_Watchdog_Clear	0x7012
.DEFINE C_IRQ6_TMB2		0x0001
.DEFINE C_TMB2_128Hz	0x0000

.PUBLIC F_Key_Init
.PUBLIC _Key_Init
.PUBLIC F_Key_Scan
.PUBLIC _Key_Scan
.PUBLIC F_Key_Get
.PUBLIC _Key_Get

.RAM
.VAR KeyCode						
.VAR ScanCnt						
.VAR KeyUp						

.CODE

F_Key_Init:
_Key_Init:
	push r1 to [sp]
	INT Off
	r1 = [P_Key_Dir]				
	r1 &= ~Key_ALL
	[P_Key_Dir] = r1
	r1 = [P_Key_Attrib]
	r1 &= ~Key_ALL
	[P_Key_Attrib] = r1
	r1 = [P_Key_Buf]
	r1 &= ~Key_ALL
	[P_Key_Buf] = r1
     r1 = 0
	[ScanCnt] = r1					
	[KeyCode] = r1
	[KeyUp] = r1
	r1 = C_TMB2_128Hz				
	[P_TimeBase_Setup] = r1
	r1 = [P_INT_Mask]
	r1 |= C_IRQ6_TMB2
	[P_INT_Mask] = r1
	INT FIQ,IRQ
	pop r1 from [sp]
retf

F_Key_Scan:
_Key_Scan:
	push r1,r2 to [sp]
	r2 = [P_Key_Data]				
	r2 &= Key_ALL
	jnz ?L_ScanKey_Down			
?L_ScanKey_Up:
	r1 = 1							
	[KeyUp] = r1
	jmp ?L_ScanKey_Exit
?L_ScanKey_Down:
	r1 = 0							
	[KeyUp] = r1
.if Key_IO_HighByte
	r2 = r2 lsr 4
	r2 = r2 lsr 4
.endif
	cmp r2,[KeyCode]			
	je	?L_ScanKey_Cont
?L_ScanKey_New:					
	[KeyCode] = r2
	r1 = 1							
	[ScanCnt] = r1
	jmp ?L_ScanKey_Exit
?L_ScanKey_Cont:					
	r1 = [ScanCnt]					
	r1 += 1
	[ScanCnt] = r1
?L_ScanKey_Exit:
	pop r1,r2 from [sp]
retf

F_Key_Get:
_Key_Get:
	INT OFF
	push r2 to [sp]
	r2 = 0x01
	[P_Watchdog_Clear] = r2
	r2 = [ScanCnt]
	cmp r2,Key_Debounce				
	jb	?L_GetKey_NoKey				
	cmp r2,Key_TimeOut				
	jnb ?L_GetKey					
	r2 = [KeyUp]					
	jnz ?L_GetKey					
?L_GetKey_NoKey:
	r1 = 0							
	jmp ?L_GetKey_Exit
?L_GetKey:
	r1 = [KeyCode]					
	r2 = 0
	[KeyCode] = r2					
	[ScanCnt] = r2
	[KeyUp] = r2
?L_GetKey_Exit:
	INT FIQ,IRQ
	pop r2 from [sp]
retf

⌨️ 快捷键说明

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