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

📄 scankey demo.asm

📁 This an assembly example for multi scanning key from 8x8 matrix. ELAN eAM eDSP
💻 ASM
📖 第 1 页 / 共 3 页
字号:
.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 + -