📄 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
< //========================================================================================
00000000 .data
00000000 EE 00 DE 00 Table_key: .dw 0xee,0xde,0xbe,0x7e
BE 00 7E 00
00000004 ED 00 DD 00 .dw 0xed,0xdd,0xbd,0x7d
BD 00 7D 00
00000008 EB 00 DB 00 .dw 0xeb,0xdb,0xbb,0x7b
BB 00 7B 00
0000000C E7 00 D7 00 .dw 0xe7,0xd7,0xb7,0x77
B7 00 77 00
00000010 3F 00 06 00 Table_led: .dw 0x03f,0x006,0x05b,0x04f,0x066,0x06d,0x07d,0x007,0x07f,0x06f
5B 00 4F 00
66 00 6D 00
7D 00 07 00
7F 00 6F 00
0000001A 3F 01 06 01 .dw 0x13f,0x106,0x15b,0x14f,0x166,0x16d,0x17d,0x107,0x17f,0x16f
5B 01 4F 01
66 01 6D 01
7D 01 07 01
7F 01 6F 01
00000024 3F 02 06 02 .dw 0x23f,0x206,0x25b,0x24f,0x266,0x26d,0x27d,0x207,0x27f,0x26f
5B 02 4F 02
66 02 6D 02
7D 02 07 02
7F 02 6F 02
0000002E BF 03 86 03 .dw 0x3bf,0x386,0x3db,0x3cf,0x3e6,0x3ed,0x3fd,0x387,0x3ff,0x3ef
DB 03 CF 03
E6 03 ED 03
FD 03 87 03
FF 03 EF 03
00000038 3F 04 06 04 .dw 0x43f,0x406,0x45b,0x44f,0x466,0x46d,0x47d,0x407,0x47f,0x46f
5B 04 4F 04
66 04 6D 04
7D 04 07 04
7F 04 6F 04
00000042 BF 05 86 05 .dw 0x5bf,0x586,0x5db,0x5cf,0x5e6,0x5ed,0x5fd,0x587,0x5ff,0x5ef
DB 05 CF 05
E6 05 ED 05
FD 05 87 05
FF 05 EF 05
0000004C 3F 06 06 06 .dw 0x63f,0x606,0x65b,0x64f,0x666,0x66d,0x67d,0x607,0x67f,0x66f
5B 06 4F 06
66 06 6D 06
7D 06 07 06
7F 06 6F 06
00000056 3F 07 06 07 .dw 0x73f,0x706,0x75b,0x74f,0x766,0x76d,0x77d,0x707,0x77f,0x76f
5B 07 4F 07
66 07 6D 07
7D 07 07 07
7F 07 6F 07
00000000 .code
.public _key
_key:
L_key_init: //初始化A,B
00000000 4F 92 R1 = 0x0f;
00000001 19 D3 03 70 [P_IOA_Attrib] = R1;
00000003 19 D3 02 70 [P_IOA_Dir] = R1;
00000005 09 93 F0 00 r1=0xf0;
00000007 19 D3 00 70 [P_IOA_Data] = R1;
F_Key_Scan_A4:
00000009 4E 94 R2=0x0e; //扫描第一行
0000000A 1A D5 00 70 [P_IOA_Data] = R2 ;
0000000C 09 93 F0 00 R1 = 0xf0;
0000000E 11 B3 00 70 R1& =[P_IOA_Data];
00000010 09 43 F0 00 CMP R1,0xf0; //是否该行有键按下
00000012 1F 4E JNZ L_make_sure;
F_Key_Scan_A5:
00000013 4D 94 R2=0x0d; //扫描第二行
00000014 1A D5 00 70 [P_IOA_Data] = R2;
00000016 09 93 F0 00 R1 = 0xf0;
00000018 11 B3 00 70 R1& =[P_IOA_Data];
0000001A 09 43 F0 00 CMP R1,0xf0; //是否该行有键按下
0000001C 15 4E JNZ L_make_sure;
F_Key_Scan_A6:
0000001D 4B 94 R2=0x0b; //扫描第三行
0000001E 1A D5 00 70 [P_IOA_Data] = R2;
00000020 09 93 F0 00 R1 = 0xf0;
00000022 11 B3 00 70 R1& =[P_IOA_Data];
00000024 09 43 F0 00 CMP R1,0xf0; //是否该行有键按下
00000026 0B 4E JNZ L_make_sure;
F_Key_Scan_A7:
00000027 47 94 R2=0x07; //扫描第四行
00000028 1A D5 00 70 [P_IOA_Data] = R2;
0000002A 09 93 F0 00 R1 = 0xf0;
0000002C 11 B3 00 70 R1& =[P_IOA_Data];
0000002E 09 43 F0 00 CMP R1,0xf0; //是否该行有键按下
00000030 01 4E JNZ L_make_sure;
00000031 69 EE jmp F_Key_Scan_A4;
L_make_sure: // 去抖
00000032 01 97 r3=r1;
00000033 1A D5 00 70 [P_IOA_Data] = R2;
00000035 09 93 F0 00 R1 = 0xf0;
00000037 11 B3 00 70 R1& =[P_IOA_Data];
00000039 03 43 cmp r1,r3;
0000003A 72 4E jne F_Key_Scan_A4
0000003B 41 08 r4+=1;
0000003C 42 48 cmp r4,2;
0000003D 4C 4E jne L_make_sure;
0000003E 40 98 r4=0x00;
0000003F 0D 9B 00 00 bp=Table_key;
00000041 02 A3 r1=r1|r2;
L_key: //查表
00000042 D5 94 r2=[bp++];
00000043 02 43 cmp r1,r2
// je L_out
00000044 41 08 r4+=1;
00000045 44 EE jmp L_key
//L_out:
// R1 = 0xff;
// [P_IOB_Attrib] = R1;
// [P_IOB_Dir] = R1;
// [P_IOB_Data] = R1; //输出初始
00000046 0D 9B 10 00 bp=Table_led;
00000048 40 94 r2=0x00;
L_find:
00000049 04 45 cmp r2,r4
0000004A 03 5E je L_out1
0000004B 41 0A bp+=1;
0000004C 41 04 r2+=1;
0000004D 45 EE jmp L_find
L_out1:
0000004E C5 94 r2=[bp];
0000004F 1A D5 05 70 [P_IOB_Data]=r2;
.PUBLIC _IRQ3, _IRQ5;
.EXTERNAL _TimeCount; // 触发计时
.EXTERNAL Per500msSet //2Hz中断,每次500ms时钟
.EXTERNAL _TimeChangeCount; //计时
00000000 .text
_IRQ3:
00000000 A8 DA push r1,r5 to [sp]
00000001 09 93 80 03 r1 = 0x0380; //按键唤醒0000,0011,1000,0000
00000003 19 D3 11 70 [P_INT_Clear] = r1;
00000005 A8 90 pop r1,r5 from [sp];
00000006 98 9A reti;
//--------2Hz中断------//
_IRQ5:
00000007 A8 DA push r1,r5 to [sp]
00000008 48 92 r1 = 0x0008; //0000,0000,0000,1000
L_IRQ5_2Hz:
00000009 09 93 FF FF r1 = 0xFFFF; //万年历时间
0000000B 19 D3 00 00 [Per500msSet] = r1;
0000000D 11 93 00 00 r1 = [_TimeCount]; //计时
0000000F 41 02 r1 += 1;
00000010 19 D3 00 00 [_TimeCount] = r1;
00000012 44 92 r1=0x0004 //0000,0000,0000,0100
00000013 19 D3 11 70 [P_INT_Clear] = r1;
00000015 A8 90 pop r1,r5 from [sp];
00000016 98 9A reti
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -