📄 key.lst
字号:
< .EXTERNAL F_SP_Get_ADC
<
< .EXTERNAL F_SP_Set_P_TimerA_Ctrl
< .EXTERNAL F_SP_Set_P_TimerA_Data
< .EXTERNAL F_SP_Set_P_TimerB_Ctrl
< .EXTERNAL F_SP_Set_P_TimerB_Data
< .EXTERNAL F_SP_Set_P_INT_Ctrl
< .EXTERNAL F_SP_Set_P_INT_Clear
< .EXTERNAL F_SP_Set_P_SystemClock
< .EXTERNAL F_SP_Set_P_DAC_Ctrl
< .EXTERNAL F_SP_Set_P_ADC_Ctrl
<
<
<
< //--------------------------------------------
< SACM_MACRO1: .MACRO
<
< .ENDM
<
< SACM_MACRO2: .MACRO
<
< .ENDM
<
<
<
<
< //.define PC_Play_Enable_A2000 1 // Enable the PC-Play function for SACM-A2000 module
< //.define PC_Play_Enable_S480 1 // Enable the PC-Play function for SACM-S480 module
< //.define PC_Play_Enable_S240 1 // Enable the PC-Play function for SACM-S240 module
< //.define PC_Play_Enable_MS01 1 // Enable the PC-Play function for SACM-MS01 module
<
<
<
< //========================================================================================
< // End of hardware.inc
< //========================================================================================
.PUBLIC F_Key_Scan_Initial;
.PUBLIC F_Key_Scan_ServiceLoop;
.PUBLIC F_Key_Scan_ServiceLoop_2;
.PUBLIC F_Key_DebounceCnt_Down;
.PUBLIC _SP_GetCh;
.PUBLIC F_SP_GetCh;
.PUBLIC R_KeyStrobe;
//////////////////////////////////////////////////////////////////
// RAM Define Area
//////////////////////////////////////////////////////////////////
00000313 .RAM
00000313 00 00 .VAR R_DebounceReg; //for keyboard scan
.DEFINE C_DebounceCnt 0x0002;
00000314 00 00 .VAR R_DebounceCnt; //for keyboard scan
00000315 00 00 .VAR R_KeyBuf; //for keyboard scan
00000316 00 00 .VAR R_KeyStrobe; //for keyboard scan
000095F1 .CODE
//////////////////////////////////////////////////////////////////
// Function: Initialization for F_Key_Scan_ServiceLoop
//////////////////////////////////////////////////////////////////
F_Key_Scan_Initial:
000095F1 40 92 r1 = 0x0000; //
000095F2 19 D3 13 03 [R_DebounceReg] = r1; //
000095F4 19 D3 15 03 [R_KeyBuf] = r1; //
000095F6 19 D3 16 03 [R_KeyStrobe] = r1; //
000095F8 42 92 r1 = C_DebounceCnt; //
000095F9 19 D3 14 03 [R_DebounceCnt] = r1; //reset debounce counter
000095FB 90 9A retf;
//////////////////////////////////////////////////////////////////
// Function: Get Key code from key pad(8 x 1 key pad)
// Input: Port IOA b7-b0
// Output: R_KeyStrobe b7-b0
// | | | |
// +Vcc --- x --- x ... x --- x ---
// | | | |
// IOA.7 IOA.0
// Note: 1)link F_DebounceCntDown is necessary
// Destory register: r1, r2
//////////////////////////////////////////////////////////////////
F_Key_Scan_ServiceLoop:
000095FC 11 93 00 70 r1 = [P_IOA_Data]; // get key data from IOA
//r1 = [P_IOB_Data]; // get key data from IOB
000095FE 09 B3 FF 00 r1 = r1 and 0xff; //
00009600 12 95 13 03 r2 = [R_DebounceReg]; //
00009602 19 D3 13 03 [R_DebounceReg] = r1; //
00009604 12 45 13 03 cmp r2,[R_DebounceReg]; //
00009606 04 5E je L_KS_StableTwoSample; //
00009607 42 92 r1 = C_DebounceCnt; //debounce time setting
00009608 19 D3 14 03 [R_DebounceCnt] = r1; //
0000960A 90 9A retf; //
L_KS_StableTwoSample:
0000960B 11 93 14 03 r1 = [R_DebounceCnt]; //
0000960D 01 5E jz L_KS_StableOverDebounce; //
0000960E 90 9A retf;
L_KS_StableOverDebounce:
0000960F 19 D3 14 03 [R_DebounceCnt] = r1; //
00009611 12 95 13 03 r2 = [R_DebounceReg]; //
00009613 11 93 15 03 r1 = [R_KeyBuf]; //
00009615 1A D5 15 03 [R_KeyBuf] = r2; //
00009617 09 83 FF 00 r1 = r1 xor 0x00ff; //
00009619 11 B3 15 03 r1 = r1 and [R_KeyBuf]; //
0000961B 09 B3 FF 00 r1 = r1 and 0x00ff; //
0000961D 11 A3 16 03 r1 = r1 or [R_KeyStrobe]; //
0000961F 19 D3 16 03 [R_KeyStrobe] = r1; //save stable key code to R_KeyStrobe
00009621 90 9A retf;
//////////////////////////////////////////
//
//////////////////////////////////////////
F_Key_Scan_ServiceLoop_2:
00009622 11 93 01 70 r1 = [P_IOA_Buffer]; // PortA.7 low(scan line +Vcc)
00009624 09 B3 7F FF r1 &= 0xFF7F;
00009626 19 D3 01 70 [P_IOA_Buffer] = r1;
00009628 11 93 00 70 r1 = [P_IOA_Data]; // get key data from IOA
//r1 = [P_IOB_Data]; // get key data from IOB
0000962A 4F B2 r1 &= 0x000F; //
0000962B 01 95 r2 = r1; // key from +Vcc
0000962C 0A 87 FF FF r3 = r2 xor 0xffff; // Be a +Vcc mask
// delay here
0000962E 00 EE nop;
0000962F 00 EE nop;
00009630 00 EE nop;
00009631 11 93 01 70 r1 = [P_IOA_Buffer]; // PortA.7 high(scan line)
00009633 09 A3 80 00 r1 |= 0x0080; //
00009635 19 D3 01 70 [P_IOA_Buffer] = r1; //
00009637 11 93 00 70 r1 = [P_IOA_Data]; //
//r1 = [P_IOB_Data]; // get key data from IOB
00009639 4F B2 r1 &= 0x000F; //
0000963A 02 83 r1 ^= r2; // possible bits by scan line
0000963B 03 B3 r1 &= r3; // do +Vcc mask
0000963C 59 93 r1 = r1 lsl 4; //
0000963D 02 A3 r1 |= r2; //
//r2 = r2 lsl 4; //
//r1 |= r2; //
0000963E 09 B3 FF 00 r1 = r1 and 0xFF; // mask bit[0..7]
00009640 12 95 13 03 r2 = [R_DebounceReg]; //
00009642 19 D3 13 03 [R_DebounceReg] = r1; //
00009644 12 45 13 03 cmp r2,[R_DebounceReg]; //
00009646 04 5E je L_KS_StableTwoSample_2; //
00009647 42 92 r1 = C_DebounceCnt; //debounce time setting
00009648 19 D3 14 03 [R_DebounceCnt] = r1; //
0000964A 90 9A retf; //
L_KS_StableTwoSample_2:
0000964B 11 93 14 03 r1 = [R_DebounceCnt]; //
0000964D 01 5E jz L_KS_StableOverDebounce_2; //
0000964E 90 9A retf;
L_KS_StableOverDebounce_2:
0000964F 19 D3 14 03 [R_DebounceCnt] = r1; //
00009651 12 95 13 03 r2 = [R_DebounceReg]; //
00009653 11 93 15 03 r1 = [R_KeyBuf]; //
00009655 1A D5 15 03 [R_KeyBuf] = r2; //
00009657 09 83 FF 00 r1 = r1 xor 0x00ff; //
00009659 11 B3 15 03 r1 = r1 and [R_KeyBuf]; //
0000965B 09 B3 FF 00 r1 = r1 and 0x00ff; //
0000965D 11 A3 16 03 r1 = r1 or [R_KeyStrobe]; //
0000965F 19 D3 16 03 [R_KeyStrobe] = r1; //save stable key code to R_KeyStrobe
00009661 90 9A retf;
//////////////////////////////////////////////////////////////////
// Function: debounce counter down count
//////////////////////////////////////////////////////////////////
F_Key_DebounceCnt_Down:
00009662 11 93 14 03 r1 = [R_DebounceCnt]; // Debounce subroutine for F_IO_Key_Scan:
00009664 03 5E jz L_DebounceCntZero; // stop count if zero
00009665 41 22 r1 -= 0x0001; //
00009666 19 D3 14 03 [R_DebounceCnt] = r1; //
L_DebounceCntZero: //
00009668 90 9A retf; //
//****************************************************************
// Function: Get Keycode for I/O Port
// Destory register: r1, r2
//****************************************************************
_SP_GetCh:
F_SP_GetCh:
//push BP,BP to [SP];
//BP = SP + 1;
00009669 11 93 16 03 r1 = [R_KeyStrobe]; // Get Key code
0000966B 40 94 r2 = 0x0000; // Clear KeyStrobe for next key
0000966C 1A D5 16 03 [R_KeyStrobe] = r2; //
//pop BP,BP from [SP];
0000966E 90 9A retf;
//========================================================================================
// End of key.asm
//========================================================================================
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -