key.lst
来自「结合"61板"的三个按键完成带有语音播报功能的电子钟:、KEY1--按一下播放年」· LST 代码 · 共 331 行 · 第 1/2 页
LST
331 行
< .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
00000332 .RAM
00000332 00 00 .VAR Key_Buff; //本次键值暂存单元
00000333 00 00 .VAR Key_Debounce; //计数单元
00000334 00 00 .VAR KeyScanLineBuff;
0000959E .CODE
.PUBLIC Key_Scan_Init
Key_Scan_Init: .PROC
0000959E 40 92 r1=0x0000
0000959F 19 D3 37 03 [_Key]=r1
000095A1 19 D3 32 03 [Key_Buff]=r1
000095A3 19 D3 38 03 [_KeyPressFlag]=r1
000095A5 90 9A retf
.ENDP
_Key_Scan_ServiceLoop: .PROC
000095A6 41 92 r1=0x0001; // Clear watch dog
000095A7 19 D3 12 70 [P_Watchdog_Clear]=r1;
000095A9 12 95 00 70 r2=[P_IOA_Data]
000095AB 0A B5 FF 00 r2&=0x00ff
000095AD 09 4E jnz F_SomeKeyIsPressed
000095AE 40 92 r1=0x0000
000095AF 19 D3 32 03 [Key_Buff]=r1
000095B1 19 D3 38 03 [_KeyPressFlag]=r1 //清0
000095B3 41 92 r1=1
000095B4 19 D3 3A 03 [_SleepFlag] = r1 //置睡眠标志
000095B6 90 9A retf
//-----------------------------//
F_SomeKeyIsPressed:
000095B7 13 97 38 03 r3=[_KeyPressFlag] //有键按下 B0=1
000095B9 41 A6 r3|=0x0001
000095BA 1B D7 38 03 [_KeyPressFlag]=r3 //置按键标志
000095BC 40 96 r3=0
000095BD 1B D7 3A 03 [_SleepFlag] = r3 //清睡眠标志
000095BF 11 93 32 03 r1=[Key_Buff] //读上次键值
000095C1 1A D5 32 03 [Key_Buff]=r2 //暂存本次键值
000095C3 02 43 cmp r1,r2
000095C4 08 5E je L_KS_StableTwoSample
000095C5 40 92 r1=0x0000
000095C6 19 D3 37 03 [_Key]=r1
000095C8 09 93 50 00 r1=C_DebounceCnt //初始化计数单元
000095CA 19 D3 33 03 [Key_Debounce]=r1
000095CC 90 9A retf
L_KS_StableTwoSample:
000095CD 11 93 33 03 r1=[Key_Debounce]
000095CF 04 5E jz L_KS_StableOverDebounce
000095D0 41 22 r1-=1 //计数减 1
000095D1 19 D3 33 03 [Key_Debounce]=r1
000095D3 90 9A retf
L_KS_StableOverDebounce: //形成键码
000095D4 11 93 32 03 r1=[Key_Buff] //暂存值
000095D6 0B 97 00 80 r3=0x8000 //是第一次有效吗?
000095D8 13 C7 38 03 test r3,[_KeyPressFlag]
000095DA 03 5E jz Key_First_Avail
000095DB 09 A3 00 80 r1|=0x8000 //连续按键有效 ///////////////////////
000095DD 06 EE jmp Key_Get_Value
Key_First_Avail: //第一次有效
000095DE 13 97 38 03 r3=[_KeyPressFlag] //有键按下 B15=1
000095E0 0B A7 00 80 r3|=0x8000
000095E2 1B D7 38 03 [_KeyPressFlag]=r3
Key_Get_Value:
000095E4 19 D3 37 03 [_Key]=r1 //存有效键值
000095E6 09 93 00 0B r1=C_CONTINUE
000095E8 19 D3 33 03 [Key_Debounce]=r1
000095EA 90 9A retf
.ENDP
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?