📄 key.lst
字号:
< .EXTERNAL F_SP_TestQueue_S480
< .EXTERNAL F_SP_TestQueue_S240
< .EXTERNAL F_SP_TestQueue_MS01
< .EXTERNAL F_SP_TestQueue_DVR
<
< .EXTERNAL F_SP_ReadQueue_NIC // Read queue with no index change
< .EXTERNAL F_SP_ReadQueue_NIC_A2000
< .EXTERNAL F_SP_ReadQueue_NIC_S480
< .EXTERNAL F_SP_ReadQueue_NIC_S240
< .EXTERNAL F_SP_ReadQueue_NIC_MS01
< .EXTERNAL F_SP_ReadQueue_NIC_DVR
<
<
< .EXTERNAL F_SP_SACM_A2000_Init_
< .EXTERNAL F_SP_SACM_S480_Init_
< .EXTERNAL F_SP_SACM_S240_Init_
<
< .EXTERNAL F_SP_SACM_MS01_Init_
< .EXTERNAL F_SP_PlayMode0_
< .EXTERNAL F_SP_PlayMode1_
< .EXTERNAL F_SP_PlayMode2_
< .EXTERNAL F_SP_PlayMode3_
<
< .EXTERNAL F_SP_SACM_DVR_Init_
< .EXTERNAL F_SP_SACM_DVR_Rec_Init_
< .EXTERNAL F_SP_SACM_DVR_Play_Init_
<
< .EXTERNAL F_SP_GetResource
<
< //////////////////////////////////////////////////////////////////
< // Reserve old defintion
< // Note: Some user who use old library may use the old name
< //////////////////////////////////////////////////////////////////
< .EXTERNAL F_SP_Send_PWM // Get RAW data
< .EXTERNAL F_SP_Send_DAC1 //
< .EXTERNAL F_SP_Send_DAC2 //
<
< .EXTERNAL F_STD_Send_DAC1 // reserved old
< .EXTERNAL F_STD_Send_DAC2 // reserved old
<
< .EXTERNAL F_RampUpDAC1 // reserved old
< .EXTERNAL F_RampDnDAC1 // reserved old
< .EXTERNAL F_RampUpDAC2 // reserved old
< .EXTERNAL F_RampDnDAC2 // reserved old
< ///////////////////////////////////////////////////////////////////
<
<
<
< //========================================================================================
< // End of hardware.inc
< //========================================================================================
.external F_SP_INT_64Hz
.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
//////////////////////////////////////////////////////////////////
000001A6 .RAM
000001A6 00 00 .VAR R_DebounceReg; //for keyboard scan
.DEFINE C_DebounceCnt 0x0002;
000001A7 00 00 .VAR R_DebounceCnt; //for keyboard scan
000001A8 00 00 .VAR R_KeyBuf; //for keyboard scan
000001A9 00 00 .VAR R_KeyStrobe; //for keyboard scan
00008DA5 .CODE
//////////////////////////////////////////////////////////////////
// Function: Initialization for F_Key_Scan_ServiceLoop
//////////////////////////////////////////////////////////////////
F_Key_Scan_Initial:
00008DA5 40 92 r1 = 0x0000; //
00008DA6 19 D3 A6 01 [R_DebounceReg] = r1; //
00008DA8 19 D3 A8 01 [R_KeyBuf] = r1; //
00008DAA 19 D3 A9 01 [R_KeyStrobe] = r1; //
00008DAC 42 92 r1 = C_DebounceCnt; //
00008DAD 19 D3 A7 01 [R_DebounceCnt] = r1; //reset debounce counter
00008DAF 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:
00008DB0 11 93 00 70 r1 = [P_IOA_Data]; // get key data from IOA
//r1 = [P_IOB_Data]; // get key data from IOB
00008DB2 09 B3 FF 00 r1 = r1 and 0xff; //
00008DB4 12 95 A6 01 r2 = [R_DebounceReg]; //
00008DB6 19 D3 A6 01 [R_DebounceReg] = r1; //
00008DB8 12 45 A6 01 cmp r2,[R_DebounceReg]; //
00008DBA 04 5E je L_KS_StableTwoSample; //
00008DBB 42 92 r1 = C_DebounceCnt; //debounce time setting
00008DBC 19 D3 A7 01 [R_DebounceCnt] = r1; //
00008DBE 90 9A retf; //
L_KS_StableTwoSample:
00008DBF 11 93 A7 01 r1 = [R_DebounceCnt]; //
00008DC1 01 5E jz L_KS_StableOverDebounce; //
00008DC2 90 9A retf;
L_KS_StableOverDebounce:
00008DC3 19 D3 A7 01 [R_DebounceCnt] = r1; //
00008DC5 12 95 A6 01 r2 = [R_DebounceReg]; //
00008DC7 11 93 A8 01 r1 = [R_KeyBuf]; //
00008DC9 1A D5 A8 01 [R_KeyBuf] = r2; //
00008DCB 09 83 FF 00 r1 = r1 xor 0x00ff; //
00008DCD 11 B3 A8 01 r1 = r1 and [R_KeyBuf]; //
00008DCF 09 B3 FF 00 r1 = r1 and 0x00ff; //
00008DD1 11 A3 A9 01 r1 = r1 or [R_KeyStrobe]; //
00008DD3 19 D3 A9 01 [R_KeyStrobe] = r1; //save stable key code to R_KeyStrobe
00008DD5 90 9A retf;
//////////////////////////////////////////
//
//////////////////////////////////////////
F_Key_Scan_ServiceLoop_2:
00008DD6 11 93 01 70 r1 = [P_IOA_Buffer]; // PortA.7 low(scan line +Vcc)
00008DD8 09 B3 7F FF r1 &= 0xFF7F;
00008DDA 19 D3 01 70 [P_IOA_Buffer] = r1;
00008DDC 11 93 00 70 r1 = [P_IOA_Data]; // get key data from IOA
//r1 = [P_IOB_Data]; // get key data from IOB
00008DDE 4F B2 r1 &= 0x000F; //
00008DDF 01 95 r2 = r1; // key from +Vcc
00008DE0 0A 87 FF FF r3 = r2 xor 0xffff; // Be a +Vcc mask
// delay here
00008DE2 00 EE nop;
00008DE3 00 EE nop;
00008DE4 00 EE nop;
00008DE5 11 93 01 70 r1 = [P_IOA_Buffer]; // PortA.7 high(scan line)
00008DE7 09 A3 80 00 r1 |= 0x0080; //
00008DE9 19 D3 01 70 [P_IOA_Buffer] = r1; //
00008DEB 11 93 00 70 r1 = [P_IOA_Data]; //
//r1 = [P_IOB_Data]; // get key data from IOB
00008DED 4F B2 r1 &= 0x000F; //
00008DEE 02 83 r1 ^= r2; // possible bits by scan line
00008DEF 03 B3 r1 &= r3; // do +Vcc mask
00008DF0 59 93 r1 = r1 lsl 4; //
00008DF1 02 A3 r1 |= r2; //
//r2 = r2 lsl 4; //
//r1 |= r2; //
00008DF2 09 B3 FF 00 r1 = r1 and 0xFF; // mask bit[0..7]
00008DF4 12 95 A6 01 r2 = [R_DebounceReg]; //
00008DF6 19 D3 A6 01 [R_DebounceReg] = r1; //
00008DF8 12 45 A6 01 cmp r2,[R_DebounceReg]; //
00008DFA 04 5E je L_KS_StableTwoSample_2; //
00008DFB 42 92 r1 = C_DebounceCnt; //debounce time setting
00008DFC 19 D3 A7 01 [R_DebounceCnt] = r1; //
00008DFE 90 9A retf; //
L_KS_StableTwoSample_2:
00008DFF 11 93 A7 01 r1 = [R_DebounceCnt]; //
00008E01 01 5E jz L_KS_StableOverDebounce_2; //
00008E02 90 9A retf;
L_KS_StableOverDebounce_2:
00008E03 19 D3 A7 01 [R_DebounceCnt] = r1; //
00008E05 12 95 A6 01 r2 = [R_DebounceReg]; //
00008E07 11 93 A8 01 r1 = [R_KeyBuf]; //
00008E09 1A D5 A8 01 [R_KeyBuf] = r2; //
00008E0B 09 83 FF 00 r1 = r1 xor 0x00ff; //
00008E0D 11 B3 A8 01 r1 = r1 and [R_KeyBuf]; //
00008E0F 09 B3 FF 00 r1 = r1 and 0x00ff; //
00008E11 11 A3 A9 01 r1 = r1 or [R_KeyStrobe]; //
00008E13 19 D3 A9 01 [R_KeyStrobe] = r1; //save stable key code to R_KeyStrobe
00008E15 90 9A retf;
//////////////////////////////////////////////////////////////////
// Function: debounce counter down count
//////////////////////////////////////////////////////////////////
F_Key_DebounceCnt_Down:
00008E16 11 93 A7 01 r1 = [R_DebounceCnt]; // Debounce subroutine for F_IO_Key_Scan:
00008E18 03 5E jz L_DebounceCntZero; // stop count if zero
00008E19 41 22 r1 -= 0x0001; //
00008E1A 19 D3 A7 01 [R_DebounceCnt] = r1; //
L_DebounceCntZero: //
00008E1C 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;
00008E1D 11 93 A9 01 r1 = [R_KeyStrobe]; // Get Key code
00008E1F 40 94 r2 = 0x0000; // Clear KeyStrobe for next key
00008E20 1A D5 A9 01 [R_KeyStrobe] = r2; //
//pop BP,BP from [SP];
00008E22 90 9A retf;
//========================================================================================
// End of key.asm
//========================================================================================
//========================================================================================
// End of key.asm
//========================================================================================
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -