📄 key.lst
字号:
< .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
< //========================================================================================
00000006 .IRAM
00000006 00 00 .VAR I_KeyBuf = 0 //保存键值
00000007 00 00 .VAR I_Key_Delay = 0 //扫描有键按下的次数
.EXTERNAL _KeyFlag //有键按下标识符
0000815B .CODE
.PUBLIC _SP_Init_IOA;
_SP_Init_IOA: .PROC
0000815B 09 93 F0 00 R1 = 0x00f0;
0000815D 19 D3 03 70 [P_IOA_Attrib] = R1;
0000815F 19 D3 02 70 [P_IOA_Dir] = R1;
00008161 19 D3 00 70 [P_IOA_Data] = R1;
00008163 90 9A RETF
.ENDP;
//============================================================================================
//函数: F_Key_Scan()
//语法:void F_Key_Scan()
//描述:键盘扫描函数
//参数:无
//返回:无
//=============================================================================================
.PUBLIC _F_Key_Scan;
_F_Key_Scan: .PROC
00008164 09 93 F0 00 R1 = 0x00F0 //扫描键盘
00008166 19 D3 00 70 [P_IOA_Data] = R1
00008168 4F 92 R1 = 0x000f
00008169 11 B3 00 70 R1 &= [P_IOA_Data]
0000816B 08 4E JNZ L_Have_Key_Pressed
L_NoKey_Press: //无键按下
0000816C 40 92 R1 = 0
0000816D 19 D3 06 00 [I_KeyBuf] = R1 //清键盘缓冲区
0000816F 19 D3 05 00 [_KeyFlag] = R1
00008171 19 D3 07 00 [I_Key_Delay]=R1;
00008173 90 9A RETF
L_Have_Key_Pressed: //有键按下处理
00008174 40 F0 79 81 CALL F_Key_Scaning //行扫描确定键
00008176 40 F0 9E 81 CALL Enter_Key; //确认有键按下
00008178 90 9A RETF
.ENDP
//============================================================================================
//函数: unsigned F_Key_Scaning()
//语法:void unsigned F_Key_Scaning()
//描述:行扫描函数
//参数:无
//返回:扫描键值
//=============================================================================================
.PUBLIC F_Key_Scaning;
F_Key_Scaning:
F_Key_Scan_B7:
00008179 0A 95 80 00 R2=0x0080 //扫描第一行
0000817B 1A D5 00 70 [P_IOA_Data] = R2
0000817D 4F 92 R1 = 0x000f
0000817E 11 B3 00 70 R1& =[P_IOA_Data]
00008180 40 42 CMP R1,0x0000 //是否该行有键按下
00008181 1A 4E JNZ F_Key_Pressed
F_Key_Scan_B6:
00008182 0A 95 40 00 R2=0x0040 //扫描第二行
00008184 1A D5 00 70 [P_IOA_Data] = R2
00008186 4F 92 R1 = 0x000f
00008187 11 B3 00 70 R1& =[P_IOA_Data]
00008189 40 42 CMP R1,0x0000 //是否该行有键按下
0000818A 11 4E JNZ F_Key_Pressed
F_Key_Scan_B5:
0000818B 60 94 R2=0x0020 //扫描第三行
0000818C 1A D5 00 70 [P_IOA_Data] = R2
0000818E 4F 92 R1 = 0x000f
0000818F 11 B3 00 70 R1& =[P_IOA_Data]
00008191 40 42 CMP R1,0x0000 //是否该行有键按下
00008192 09 4E JNZ F_Key_Pressed
F_Key_Scan_B4:
00008193 50 94 R2=0x0010 //扫描第四行
00008194 1A D5 00 70 [P_IOA_Data] = R2
00008196 4F 92 R1 = 0x000f
00008197 11 B3 00 70 R1& =[P_IOA_Data]
00008199 40 42 CMP R1,0x0000 //是否该行有键按下
0000819A 01 4E JNZ F_Key_Pressed
0000819B 90 9A RETF
F_Key_Pressed:
0000819C 01 A5 R2|=R1 //R2--B11~B8:输出 R1--B0~B7,输入
0000819D 90 9A RETF
//============================================================================================
//函数: Enter_Key()
//语法:Enter_Key()
//描述:确定有键按下函数
//参数:无
//返回:无
//============================================================================================
Enter_Key:
Scan_first:
0000819E 13 97 07 00 R3 = [I_Key_Delay]
000081A0 40 46 CMP R3,0x0000
000081A1 06 4E JNZ L_Scan_many;
000081A2 1A D5 06 00 [I_KeyBuf] = R2;
000081A4 41 06 R3 += 1;
000081A5 1B D7 07 00 [I_Key_Delay] = R3;
000081A7 90 9A RETF;
L_Scan_many: //去抖
000081A8 11 93 06 00 R1 = [I_KeyBuf]
000081AA 02 43 CMP R1,R2
000081AB 0F 4E JNE L_Error_Key_pro;
000081AC 13 97 07 00 R3 = [I_Key_Delay]
000081AE 41 06 R3 += 1;
000081AF 1B D7 07 00 [I_Key_Delay] = R3;
000081B1 50 46 CMP R3, 0x0010;
000081B2 01 5E JE L_Enter_Have_KeyDown;
000081B3 90 9A RETF;
L_Enter_Have_KeyDown:
000081B4 41 92 R1 = 1;
000081B5 19 D3 05 00 [_KeyFlag] = R1
000081B7 40 96 R3 = 0;
000081B8 1B D7 07 00 [I_Key_Delay]=R3
000081BA 90 9A RETF
L_Error_Key_pro:
000081BB 40 96 R3 = 0;
000081BC 1B D7 07 00 [I_Key_Delay]=R3
000081BE 1B D7 06 00 [I_KeyBuf] = R3
000081C0 90 9A RETF;
//============================================================================================
//函数: unsigned F_Get_Key()
//语法:unsigned F_Get_Key()
//描述:取键值函数
//参数:无
//返回:键值
//============================================================================================
.PUBLIC _F_Get_Key;
_F_Get_Key: .PROC
000081C1 41 96 R3 = 1
000081C2 12 95 06 00 R2 = [I_KeyBuf]
L_Key_value_Loop:
000081C4 0B 0B D2 81 BP = R3 + Key_Table
000081C6 C5 92 R1 = [bp]
000081C7 02 43 CMP R1,R2
000081C8 04 5E JE L_KeyCode_Return
000081C9 41 06 R3 += 1
000081CA 52 46 CMP R3,18
// CMP R3,11
000081CB 48 8E JBE L_Key_value_Loop
000081CC 40 96 R3=0
L_KeyCode_Return:
000081CD 40 92 R1 = 0;
000081CE 19 D3 06 00 [I_KeyBuf] = R1;
000081D0 03 93 R1=R3
000081D1 90 9A RETF //清键盘缓冲区
.endp
Key_Table:
//.DW 0x0088,0x0084,0x0082,0x0081
//.DW 0x0048,0x0044,0x0042,0x0041
//.DW 0x0028,0x0024,0x0022,0x0021
//.DW 0x0018,0x0014,0x0012,0x0011
000081D2 11 00 21 00 .DW 0x0011,0x0021,0x0041,0x0081
41 00 81 00
000081D6 12 00 22 00 .DW 0x0012,0x0022,0x0042,0x0082
42 00 82 00
000081DA 14 00 24 00 .DW 0x0014,0x0024,0x0044,0x0084
44 00 84 00
000081DE 18 00 28 00 .DW 0x0018,0x0028,0x0048,0x0088
48 00 88 00
// .DW 0x0000,0x0014,0x0024,0x0044
// .DW 0x0012,0x0022,0x0042,0x0011
// .DW 0x0021,0x0041,0x0028,0x0018
// .DW 0x0081,0x0082,0x0084,0x0048
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -