📄 key.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 + -