📄 key.asm
字号:
F_Checkkey:
; clrb B_HavKey
LDA PA ;\PA2\PA1
EOR #00000110B
AND #00000110B
;
STA R_KeyValue1 ; new PA
LDA R_KeyValue2 ; old PA
STA R_Temp
CMP R_KeyValue1
BEQ Check
LDA R_KeyValue1 ; if no equal, key act
STA R_KeyValue2
BEQ NoKey
EOR R_Temp
STA R_KeyValue1
and R_KeyValue2
BEQ Check
STA R_KDB ;error4
LDA #15
STA R_KCNTN ; KCNT=15, Debounce time = 15*2 = 30ms
SETB B_fKEYDeb
CLRB B_KeyHoldIncEn
CLRB B_KeyHoldInc
CLRB B_KeyHold
Check:
JB B_KeyHold,CheckKeyHold
JNB B_fKEYDeb,CheckKeyEnd
DEC R_KCNTN
BNE CheckKeyEnd
CLRB B_fKEYDeb
CheckRt2
LDA PA
EOR #00000110B
AND #00000110B
AND R_KDB
CMP R_KDB
BNE NoKey
JB B_SnowManLL,CheckRt3
JB B_SnowManRR,CheckRt3
LDA #256-29
STA R_TMCnt
CLRB B_AutoFunc
JB B_KeyHold,CheckKeyEnd2
CheckRt3
SETB B_KeyHold
LDA #256-20
STA R_KeyCnt
; SETB B_HavKey
CheckKeyEnd2:
LDA #00H
STA R_TmCnt1Min
STA R_TmCnt1Min+1
CAJE R_KDB,#00000010B,KEY_N1
CAJE R_KDB,#00000100B,KEY_N2
NoKey:
CLRB B_KeyHoldIncEn
CLRB B_KeyHoldInc
CLRB B_KeyHold
LDA #0
STA R_KeyValue1
; STA R_KeyValue2
; STA R_Temp
CheckKeyEnd:
RTS
KEY_N1:
SETB B_KeyLeft
RTS
KEY_N2:
SETB B_KeyRight
RTS
SetNormState
SETB B_WithKey
RTS
CheckKeyHold
JNB B_KeyHoldIncEn,CheckKeyEnd
JNB B_KeyHoldInc,CheckKeyEnd
JB B_AutoFunc,CheckKeyHold2
CLRB B_KeyHoldInc
JMP CheckRt2 ;CheckKeyEnd2
CheckKeyHold2
CLRB B_KeyHoldInc
; LDA #2
; JSR PlaySound
RTS
;==========================================================================
F_KeyFunction:
JNB B_KeyLeft,L_KeyRight
CLRB B_KeyLeft
; LDA #00H
; STA R_TmCnt1Min
; STA R_TmCnt1Min+1
JNB B_WithKey,SetNormState
INC R_Buffer
JB B_SnowManLL,L_KeyLeft2
JB B_SnowManRR,ClrManRRFlagR
LDA R_SnowManMov
BNE L_KeyLeft1
SETB B_SnowManLL
SETB B_KeyDelay
JMP L_KeyLeft2
; JB B_KeyHoldIncEn,CheckKeyEnd
; JSR Wait500MS
; JSR Wait400MS
; JSR DispLcdRout
; RTS
L_KeyLeft1
DEC R_SnowManMov
L_KeyLeft2
JB B_SnowManLL,L_SoundJUMP
JB B_SnowManRR,L_SoundJUMP
LDA R_SnowManMov
CMP #1
BCS L_SoundLANDJUMP ;>=
LDA #2
JMP L_SoundCOM
L_SoundLANDJUMP
LDA #256-29
STA R_TMCnt
CLRB B_AutoFunc
LDA #8
JMP L_SoundCOM
L_SoundJUMP
LDA #7
L_SoundCOM
JSR PlaySound
L_KeyLeftCOM
SETB B_FlashSnowManDisp
SETB B_FlashDisp
JSR DispLcdRout
RTS
ClrManRRFlagR
JB B_KeyDelay,L_KeyLeft2
CLRB B_SnowManRR
JMP L_KeyLeft2
ClrManRRFlagR2
CLRB B_SnowManRR
JMP L_KeyLeftCOM
;----------------------------------------------
L_KeyRight:
JNB B_KeyRight,L_KeyEnd
CLRB B_KeyRight
; LDA #00H
; STA R_TmCnt1Min
; STA R_TmCnt1Min+1
JNB B_WithKey,SetNormState
INC R_Buffer2
JB B_SnowManRR,L_KeyLeft2
JB B_SnowManLL,ClrManLLFlagR
LDA R_SnowManMov
CMP #2
BNE L_KeyRight1
SETB B_SnowManRR
SETB B_KeyDelay
JMP L_KeyRight2
; JB B_KeyHoldIncEn,L_KeyEnd
; JSR Wait500MS
; JSR Wait400MS
; RTS
L_KeyRight1
INC R_SnowManMov
L_KeyRight2
JB B_SnowManLL,L_SoundJUMP2
JB B_SnowManRR,L_SoundJUMP2
LDA R_SnowManMov
CMP #2
BCC L_SoundLANDJUMP2 ;<
LDA #2
JMP L_SoundCOM2
L_SoundLANDJUMP2
LDA #256-29
STA R_TMCnt
CLRB B_AutoFunc
LDA #8
JMP L_SoundCOM2
L_SoundJUMP2
LDA #7
L_SoundCOM2
JSR PlaySound
JMP L_KeyLeftCOM
;L_KeyRightCOM
; SETB B_FlashSnowManDisp
; SETB B_FlashDisp
L_KeyEnd:
RTS
ClrManLLFlagR
JB B_KeyDelay,L_KeyRight2
CLRB B_SnowManLL
JMP L_KeyRight2
ClrManLLFlagR2
CLRB B_SnowManLL
JMP L_KeyLeftCOM ;L_KeyRightCOM
;===========================================================
F_AutoFunc ;no key sound
CLRB B_AutoFunc
JB B_SnowManRR,ClrManRRFlagR2
JB B_SnowManLL,ClrManLLFlagR2
BBS1 R_SnowManMov,F_AutoFun3
BBS0 R_SnowManMov,F_AutoFun2
F_AutoFun1
INC R_SnowManMov
JMP L_KeyLeftCOM ;L_KeyRightCOM
F_AutoFun3
DEC R_SnowManMov
JMP L_KeyLeftCOM
F_AutoFun2
RTS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -