📄 key.lst
字号:
< .DEFINE C_D2_LatchAB 0x00C0; //
<
< //... Define for P_LVD_Ctrl ...................
< .DEFINE C_LVD24V 0x0000; // LVD = 2.4V
< .DEFINE C_LVD28V 0x0001; // LVD = 2.8V
< .DEFINE C_LVD32V 0x0002; // LVD = 3.2V
< .DEFINE C_LVD36V 0x0003; // LVD = 3.6V
<
<
< .EXTERNAL F_SP_Read_INT_Status; // for further use
< .EXTERNAL F_SP_Write_INT_Status; // for further use
< .EXTERNAL F_SP_Set_INT_Vector; // for further use
< .EXTERNAL F_SP_Clear_INT_Vector; // for further use
<
< .EXTERNAL F_SP_Send_Out; //
< .EXTERNAL F_SP_Send_DAC1; //
< .EXTERNAL F_SP_Send_DAC2; //
< .EXTERNAL F_SP_Send_Two_DAC; //
< .EXTERNAL F_SP_Init_HW; //
<
< .EXTERNAL R_InterruptStatus;
<
<
< .EXTERNAL F_SP_RampUpDAC1;
< .EXTERNAL F_SP_RampDnDAC1;
< .EXTERNAL F_SP_RampUpDAC2;
< .EXTERNAL F_SP_RampDnDAC2;
<
< .EXTERNAL F_SP_InitQueue;
< .EXTERNAL F_SP_ReadQueue;
< .EXTERNAL F_SP_WriteQueue;
< .EXTERNAL F_SP_TestQueue;
<
<
<
< .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 _Key_Scan_ServiceLoop;
.DEFINE C_DebounceCnt 0x0050; //13ms 去抖
.DEFINE C_CONTINUE 0xB00; //第二次以后有效
.EXTERNAL _Key
.EXTERNAL _KeyPressFlag; //无键按下时清0;有键按下时B0=1;
//第二次以后有效B15=1
.EXTERNAL _SleepFlag
00000335 .RAM
00000335 00 00 .VAR Key_Buff; //本次键值暂存单元
00000336 00 00 .VAR Key_Debounce; //计数单元
00000337 00 00 .VAR KeyScanLineBuff;
000095A4 .CODE
.PUBLIC Key_Scan_Init
Key_Scan_Init: .PROC
000095A4 40 92 r1=0x0000
000095A5 19 D3 3A 03 [_Key]=r1
000095A7 19 D3 35 03 [Key_Buff]=r1
000095A9 19 D3 3B 03 [_KeyPressFlag]=r1
000095AB 90 9A retf
.ENDP
_Key_Scan_ServiceLoop: .PROC
000095AC 41 92 r1=0x0001; // Clear watch dog
000095AD 19 D3 12 70 [P_Watchdog_Clear]=r1;
000095AF 12 95 00 70 r2=[P_IOA_Data]
000095B1 0A B5 FF 00 r2&=0x00ff
000095B3 09 4E jnz F_SomeKeyIsPressed
000095B4 40 92 r1=0x0000
000095B5 19 D3 35 03 [Key_Buff]=r1
000095B7 19 D3 3B 03 [_KeyPressFlag]=r1 //清0
000095B9 41 92 r1=1
000095BA 19 D3 3D 03 [_SleepFlag] = r1 //置睡眠标志
000095BC 90 9A retf
//-----------------------------//
F_SomeKeyIsPressed:
000095BD 13 97 3B 03 r3=[_KeyPressFlag] //有键按下 B0=1
000095BF 41 A6 r3|=0x0001
000095C0 1B D7 3B 03 [_KeyPressFlag]=r3 //置按键标志
000095C2 40 96 r3=0
000095C3 1B D7 3D 03 [_SleepFlag] = r3 //清睡眠标志
000095C5 11 93 35 03 r1=[Key_Buff] //读上次键值
000095C7 1A D5 35 03 [Key_Buff]=r2 //暂存本次键值
000095C9 02 43 cmp r1,r2
000095CA 08 5E je L_KS_StableTwoSample
000095CB 40 92 r1=0x0000
000095CC 19 D3 3A 03 [_Key]=r1
000095CE 09 93 50 00 r1=C_DebounceCnt //初始化计数单元
000095D0 19 D3 36 03 [Key_Debounce]=r1
000095D2 90 9A retf
L_KS_StableTwoSample:
000095D3 11 93 36 03 r1=[Key_Debounce]
000095D5 04 5E jz L_KS_StableOverDebounce
000095D6 41 22 r1-=1 //计数减 1
000095D7 19 D3 36 03 [Key_Debounce]=r1
000095D9 90 9A retf
L_KS_StableOverDebounce: //形成键码
000095DA 11 93 35 03 r1=[Key_Buff] //暂存值
000095DC 0B 97 00 80 r3=0x8000 //是第一次有效吗?
000095DE 13 C7 3B 03 test r3,[_KeyPressFlag]
000095E0 03 5E jz Key_First_Avail
000095E1 09 A3 00 80 r1|=0x8000 //连续按键有效 ///////////////////////
000095E3 06 EE jmp Key_Get_Value
Key_First_Avail: //第一次有效
000095E4 13 97 3B 03 r3=[_KeyPressFlag] //有键按下 B15=1
000095E6 0B A7 00 80 r3|=0x8000
000095E8 1B D7 3B 03 [_KeyPressFlag]=r3
Key_Get_Value:
000095EA 19 D3 3A 03 [_Key]=r1 //存有效键值
000095EC 09 93 00 0B r1=C_CONTINUE
000095EE 19 D3 36 03 [Key_Debounce]=r1
000095F0 90 9A retf
.ENDP
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -