📄 scankey demo.asm
字号:
.include "vector.def"
.include "register.def"
.include "eSLMacro.def"
.GLOBAL POWERON
P_INIT .EQU 0x00FF
P_MAX .EQU 0x0004
.DATA
;--------------------------------------------------------------------
; RAM define
;--------------------------------------------------------------------
Scan_buff .DS 4
;--------------------------------------------------------------------
; CODE
;--------------------------------------------------------------------
.CODE
.include "eAMMSMacroDefine.def"
.include "interruptvector.def"
.include "MutiScanKey8x8.asm"
;===============================================================
;===============================================================
POWERON:
;------------------------------
; I/O setting
;------------------------------
R0 = #0xFFFF
IO[PDIRA] =R0 ;set portA = O/P, Lo
IO[PCON1B] =R0 ;set portBL = I/P, pull-up, wakeup
R0 = #0x5555
IO[PCON2B] =R0 ;set portBH = O/P, Lo
IO[PCONC] = R0 ;set portC = O/P, Lo
;------------------------------
; clear RAM
;------------------------------
R0=#0x0000
R1=#0x0000
R2=#@__LIB_INITIALSPA ;clear RAM from #0x0000~#__LIB_INITIALSPA
LOOP R2
NOP
NOP
[R0++]=R1
.ENDL
;------------------------------
; Audio initial Setting
;------------------------------
AUDIO_INI ;speech and melody initial setting
MPWMON
SFREQ 8000
S1VOL 127
S2VOL 127
S3VOL 127
S4VOL 127
; SPI_ON 0,0,0,0,0 ;external spi flash initial setting
R0 = #0x0000 ;set RAM bank0
IO[BSR] = R0
;------------------------------
; Scan key initial
;------------------------------
R0=#Scan_buff
R1=#P_INIT
[R0]=R1
R0++
[R0]=R1
R0++
[R0]=R1
R0++
[R0]=R1
;------------------------------------------------------------
; MAIN Follow
;------------------------------------------------------------
Main_Start:
Muti_Scan_64KEY #Scan_buff ;Multi scan 4 key to Scan_buff
R2=#0
R3=#P_MAX
MultikeyCHK:
R2++
;max key number is 4
CMP R2,R3
IF GT JMP play_polling
;R2 = SHL R2
R3 = R2 + #Multikeynumber
JMP R3
Multikeynumber:
JMP play_polling
JMP Multikey1
JMP Multikey2
JMP Multikey3
JMP Multikey4
JMP play_polling
Multikey1:
R0=#Scan_buff ;1st key
R0=[R0]
BTEST R0.key_open ;1st push
IF TS LJMP KEYIN_CHK_PUSH_1st
JMP MultikeyCHK
Multikey2:
R0=#Scan_buff ;2nd key
R0=R0+#1
R0=[R0]
BTEST R0.key_push ;2nd push
IF TS LJMP KEYIN_CHK_PUSH_2nd
JMP MultikeyCHK
Multikey3: ;3rd key
R0=#Scan_buff
R0=R0+#2
R0=[R0]
BTEST R0.key_push ;3th push
IF TS LJMP KEYIN_CHK_PUSH_3th
JMP MultikeyCHK
Multikey4: ;4th key
R0=#Scan_buff
R0=R0+#3
R0=[R0]
BTEST R0.key_push ;4th push
IF TS LJMP KEYIN_CHK_PUSH_4th
;JMP Main_Start
play_polling:
MCHECK Main_Start
S1CHECK Main_Start
S2CHECK Main_Start
S3CHECK Main_Start
S4CHECK Main_Start
Play_end:
;------------------------------
; Sleep mode
;------------------------------
SLEEP_Mode:
MSTOP
SSTOP
PLAYTAIL 100
R0 = #0
IO[PORTA] = R0
IO[PORTB] = R0
IO[PORTC] = R0
// IO[PORTD] = R0
;R0 = #0x5555
;IO[PCON2B] =R0 ;set portBH = O/P, Lo
SLEEPMODE ; Into Sleep mode
;------------------------------
; In Sleep ...
;------------------------------
;Wake Up
NOP
NOP
NOP
JMP Main_Start
;------------------------------
;1st key push check
;------------------------------
KEYIN_CHK_PUSH_1st: ;check 1st keyin
R0 = R0 AND #0x003F
BC IO[SR].Carry
R0 = SHL R0
R0 = R0 + #Keyin_Definition1
JMP R0
Keyin_Definition1:
LJMP key1_01
LJMP key1_02
LJMP key1_03
LJMP key1_04
LJMP key1_05
LJMP key1_06
LJMP key1_07
LJMP key1_08
LJMP key1_09
LJMP key1_10
LJMP key1_11
LJMP key1_12
LJMP key1_13
LJMP key1_14
LJMP key1_15
LJMP key1_16
LJMP key1_17
LJMP key1_18
LJMP key1_19
LJMP key1_20
LJMP key1_21
LJMP key1_22
LJMP key1_23
LJMP key1_24
LJMP key1_25
LJMP key1_26
LJMP key1_27
LJMP key1_28
LJMP key1_29
LJMP key1_30
LJMP key1_31
LJMP key1_32
LJMP key1_33
LJMP key1_34
LJMP key1_35
LJMP key1_36
LJMP key1_37
LJMP key1_38
LJMP key1_39
LJMP key1_40
LJMP key1_41
LJMP key1_42
LJMP key1_43
LJMP key1_44
LJMP key1_45
LJMP key1_46
LJMP key1_47
LJMP key1_48
LJMP key1_49
LJMP key1_50
LJMP key1_51
LJMP key1_52
LJMP key1_53
LJMP key1_54
LJMP key1_55
LJMP key1_56
LJMP key1_57
LJMP key1_58
LJMP key1_59
LJMP key1_60
LJMP key1_61
LJMP key1_62
LJMP key1_63
LJMP key1_64
LJMP Main_Start
;------------------------------
key1_01:
R0 = #1
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _1_8k
JMP MultikeyCHK
;------------------------------
key1_02:
R0 = #2
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _2_8k
JMP MultikeyCHK
;------------------------------
key1_03:
R0 = #3
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _3_8k
JMP MultikeyCHK
;------------------------------
key1_04:
R0 = #4
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _4_8k
JMP MultikeyCHK
;------------------------------
key1_05:
R0 = #5
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _5_8k
JMP MultikeyCHK
;------------------------------
key1_06:
R0 = #6
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _6_8k
JMP MultikeyCHK
;------------------------------
key1_07:
R0 = #7
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _7_8k
JMP MultikeyCHK
;------------------------------
key1_08:
R0 = #8
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _8_8k
JMP MultikeyCHK
;------------------------------
key1_09:
R0 = #9
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _9_8k
JMP MultikeyCHK
;------------------------------
key1_10:
R0 = #10
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _10_8k
JMP MultikeyCHK
;------------------------------
key1_11:
R0 = #11
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _11_8k
JMP MultikeyCHK
;------------------------------
key1_12:
R0 = #12
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _12_8k
JMP MultikeyCHK
;------------------------------
key1_13:
R0 = #13
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _13_8k
JMP MultikeyCHK
;------------------------------
key1_14:
R0 = #14
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _14_8k
JMP MultikeyCHK
;------------------------------
key1_15:
R0 = #15
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _15_8k
JMP MultikeyCHK
;------------------------------
key1_16:
R0 = #16
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _16_8k
JMP MultikeyCHK
;------------------------------
key1_17:
R0 = #17
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _17_8k
JMP MultikeyCHK
;------------------------------
key1_18:
R0 = #18
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _18_8k
JMP MultikeyCHK
;------------------------------
key1_19:
R0 = #19
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _19_8k
JMP MultikeyCHK
;------------------------------
key1_20:
R0 = #20
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _20_8k
JMP MultikeyCHK
;------------------------------
;------------------------------
key1_21:
R0 = #21
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _21_8k
JMP MultikeyCHK
;------------------------------
key1_22:
R0 = #22
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _22_8k
JMP MultikeyCHK
;------------------------------
key1_23:
R0 = #23
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _23_8k
JMP MultikeyCHK
;------------------------------
key1_24:
R0 = #24
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _24_8k
JMP MultikeyCHK
;------------------------------
key1_25:
R0 = #25
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _25_8k
JMP MultikeyCHK
;------------------------------
key1_26:
R0 = #26
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _26_8k
JMP MultikeyCHK
;------------------------------
key1_27:
R0 = #27
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _27_8k
JMP MultikeyCHK
;------------------------------
key1_28:
R0 = #28
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _28_8k
JMP MultikeyCHK
;------------------------------
key1_29:
R0 = #29
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _29_8k
JMP MultikeyCHK
;------------------------------
key1_30:
R0 = #30
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _30_8k
JMP MultikeyCHK
;------------------------------
key1_31:
R0 = #31
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _31_8k
JMP MultikeyCHK
;------------------------------
key1_32:
R0 = #32
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _32_8k
JMP MultikeyCHK
;------------------------------
key1_33:
R0 = #33
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _33_8k
JMP MultikeyCHK
;------------------------------
key1_34:
R0 = #34
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _34_8k
JMP MultikeyCHK
;------------------------------
key1_35:
R0 = #35
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _35_8k
JMP MultikeyCHK
;------------------------------
key1_36:
R0 = #36
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _36_8k
JMP MultikeyCHK
;------------------------------
key1_37:
R0 = #37
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _37_8k
JMP MultikeyCHK
;------------------------------
key1_38:
R0 = #38
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _38_8k
JMP MultikeyCHK
;------------------------------
key1_39:
R0 = #39
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _39_8k
JMP MultikeyCHK
;------------------------------
key1_40:
R0 = #40
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _40_8k
JMP MultikeyCHK
;------------------------------
key1_41:
R0 = #41
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _41_8k
JMP MultikeyCHK
;------------------------------
key1_42:
R0 = #42
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _42_8k
JMP MultikeyCHK
;------------------------------
key1_43:
R0 = #43
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _43_8k
JMP MultikeyCHK
;------------------------------
key1_44:
R0 = #44
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _44_8k
JMP MultikeyCHK
;------------------------------
key1_45:
R0 = #45
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _45_8k
JMP MultikeyCHK
;------------------------------
key1_46:
R0 = #46
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _46_8k
JMP MultikeyCHK
;------------------------------
key1_47:
R0 = #47
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _47_8k
JMP MultikeyCHK
;------------------------------
key1_48:
R0 = #48
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _48_8k
JMP MultikeyCHK
;------------------------------
key1_49:
R0 = #49
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _49_8k
JMP MultikeyCHK
;------------------------------
key1_50:
R0 = #50
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _50_8k
JMP MultikeyCHK
;------------------------------
key1_51:
R0 = #51
IO[PORTD] = R1
S1STOP
PLAYHEAD 100
S1PLAY _51_8k
JMP MultikeyCHK
;------------------------------
key1_52:
R0 = #52
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _52_8k
JMP MultikeyCHK
;------------------------------
;------------------------------
key1_53:
R0 = #53
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _53_8k
JMP MultikeyCHK
;------------------------------
key1_54:
R0 = #54
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _54_8k
JMP MultikeyCHK
;------------------------------
key1_55:
R0 = #55
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _55_8k
JMP MultikeyCHK
;------------------------------
key1_56:
R0 = #56
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _56_8k
JMP MultikeyCHK
;------------------------------
key1_57:
R0 = #57
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _57_8k
JMP MultikeyCHK
;------------------------------
key1_58:
R0 = #58
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _58_8k
JMP MultikeyCHK
;------------------------------
key1_59:
R0 = #59
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _59_8k
JMP MultikeyCHK
;------------------------------
key1_60:
R0 = #60
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _60_8k
JMP MultikeyCHK
;------------------------------
key1_61:
R0 = #61
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _61_8k
JMP MultikeyCHK
;------------------------------
key1_62:
R0 = #62
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _62_8k
JMP MultikeyCHK
;------------------------------
key1_63:
R0 = #63
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _63_8k
JMP MultikeyCHK
;------------------------------
key1_64:
R0 = #64
IO[PORTD] = R0
S1STOP
PLAYHEAD 100
S1PLAY _64_8k
JMP MultikeyCHK
;------------------------------
;------------------------------
;2nd key push check
;------------------------------
KEYIN_CHK_PUSH_2nd: ;check 2nd keyin
R0 = R0 AND #0x003F
BC IO[SR].Carry
R0 = SHL R0
R0 = R0 + #Keyin_Definition2
JMP R0
Keyin_Definition2:
LJMP KEY2_01
LJMP KEY2_02
LJMP KEY2_03
LJMP KEY2_04
LJMP KEY2_05
LJMP KEY2_06
LJMP KEY2_07
LJMP KEY2_08
LJMP KEY2_09
LJMP KEY2_10
LJMP KEY2_11
LJMP KEY2_12
LJMP KEY2_13
LJMP KEY2_14
LJMP KEY2_15
LJMP KEY2_16
LJMP KEY2_17
LJMP KEY2_18
LJMP KEY2_19
LJMP KEY2_20
LJMP KEY2_21
LJMP KEY2_22
LJMP KEY2_23
LJMP KEY2_24
LJMP KEY2_25
LJMP KEY2_26
LJMP KEY2_27
LJMP KEY2_28
LJMP KEY2_29
LJMP KEY2_30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -