📄 demo.lst
字号:
00005106 40 92 R1 = 0;
00005107 0A 95 00 71 R2 = P_Seg0;
ClrLcdLoop:
00005109 D2 D2 [R2++] = R1;
0000510A 0A 45 27 71 CMP R2,P_Seg39;
0000510C 44 8E JBE ClrLcdLoop;
0000510D 90 9A RETF;
//****************************************************************************//
// State and vector definitions for keyboard scan
// The format is as follows:
// V_StateVector .DW Address of Subroutine
// .const S_StateName = State Number
V_KeyScan:
0000510E 18 51 V_WaitKeyInterrup: .DW F_WaitKeyInterrupt;
.const S_WaitKeyInterrup = V_WaitKeyInterrup - V_KeyScan;
0000510F 22 51 V_DelayToScanKey: .DW F_DelayToScanKey;
.const S_DelayToScanKey = V_DelayToScanKey - V_KeyScan;
00005110 A0 51 V_KeyCodeMapping: .DW F_KeyCodeMapping;
.const S_KeyCodeMapping = V_KeyCodeMapping - V_KeyScan;
//----------------------------------------------------------------------------------------
F_KeyScan:
00005111 11 93 07 00 R1 = [KeyScanFlag];
00005113 4F B2 R1 &= 0x000F;
00005114 09 03 0E 51 R1 += V_KeyScan;
00005116 C1 9E PC = [R1];
00005117 C1 9E PC = [R1];
//----------------------------------------------------------------------------------------
F_WaitKeyInterrupt:
00005118 11 93 08 00 R1 = [KeyIntFlag];
0000511A 06 5E JZ WaitKeyInterrupt_99;
0000511B 4F 92 R1 = 30*512/1000;
0000511C 19 D3 06 00 [KeyScan512HzTmr] = R1;
0000511E 41 92 R1 = S_DelayToScanKey;
0000511F 19 D3 07 00 [KeyScanFlag] = R1;
WaitKeyInterrupt_99:
00005121 90 9A RETF;
//----------------------------------------------------------------------------------------
F_DelayToScanKey:
00005122 11 93 06 00 R1 = [KeyScan512HzTmr];
00005124 44 4E JNZ WaitKeyInterrupt_99;
00005125 19 D3 08 00 [KeyIntFlag] = R1; //clear interrupt flag caused by key bounce
00005127 19 D3 02 70 [P_IOA_Dir] = R1; //set IOA as input
00005129 09 93 00 FF R1 = 0xFF00; //set internal pull high resistor
0000512B 19 D3 03 70 [P_IOA_PullR] = R1;
0000512D 19 D3 3A 70 [P_KeyScanMode] = R1; //disable key scan interrupt sources
0000512F 0D 9B 09 00 BP = KeyStatusBuf;
00005131 09 93 81 00 R1 = 0x0081; //enable normal key scan mode and disable LCD driver signal
00005133 19 D3 3B 70 [P_KeyScanCtrl] = R1;
00005135 09 93 FE FF R1 = 0xFFFE; //scan line 1
00005137 19 D3 3C 70 [P_KeyScanPort] = R1;
00005139 00 EE NOP;
0000513A 11 93 00 70 R1 = [P_IOA_Data];
0000513C 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
0000513E C5 A2 R1 |= [BP];
0000513F D5 D2 [BP++] = R1;
00005140 09 93 FD FF R1 = 0xFFFD; //scan line 2
00005142 19 D3 3C 70 [P_KeyScanPort] = R1;
00005144 00 EE NOP;
00005145 11 93 00 70 R1 = [P_IOA_Data];
00005147 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
00005149 C5 A2 R1 |= [BP];
0000514A D5 D2 [BP++] = R1;
0000514B 09 93 FB FF R1 = 0xFFFB; //scan line 3
0000514D 19 D3 3C 70 [P_KeyScanPort] = R1;
0000514F 00 EE NOP;
00005150 11 93 00 70 R1 = [P_IOA_Data];
00005152 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
00005154 C5 A2 R1 |= [BP];
00005155 D5 D2 [BP++] = R1;
00005156 09 93 F7 FF R1 = 0xFFF7; //scan line 4
00005158 19 D3 3C 70 [P_KeyScanPort] = R1;
0000515A 00 EE NOP;
0000515B 11 93 00 70 R1 = [P_IOA_Data];
0000515D 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
0000515F C5 A2 R1 |= [BP];
00005160 D5 D2 [BP++] = R1;
00005161 09 93 EF FF R1 = 0xFFEF; //scan line 5
00005163 19 D3 3C 70 [P_KeyScanPort] = R1;
00005165 00 EE NOP;
00005166 11 93 00 70 R1 = [P_IOA_Data];
00005168 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
0000516A C5 A2 R1 |= [BP];
0000516B D5 D2 [BP++] = R1;
0000516C 09 93 DF FF R1 = 0xFFDF; //scan line 6
0000516E 19 D3 3C 70 [P_KeyScanPort] = R1;
00005170 00 EE NOP;
00005171 11 93 00 70 R1 = [P_IOA_Data];
00005173 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
00005175 C5 A2 R1 |= [BP];
00005176 D5 D2 [BP++] = R1;
00005177 09 93 BF FF R1 = 0xFFBF; //scan line 7
00005179 19 D3 3C 70 [P_KeyScanPort] = R1;
0000517B 00 EE NOP;
0000517C 11 93 00 70 R1 = [P_IOA_Data];
0000517E 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
00005180 C5 A2 R1 |= [BP];
00005181 D5 D2 [BP++] = R1;
00005182 09 93 7F FF R1 = 0xFF7F; //scan line 8
00005184 19 D3 3C 70 [P_KeyScanPort] = R1;
00005186 00 EE NOP;
00005187 11 93 00 70 R1 = [P_IOA_Data];
00005189 09 B3 7F 00 R1 &= 0x007F;
// R1 ^= 0x007F;
0000518B C5 A2 R1 |= [BP];
0000518C D5 D2 [BP++] = R1;
0000518D 09 93 80 00 R1 = 0x0080;
0000518F 19 D3 3B 70 [P_KeyScanCtrl] = R1;
00005191 09 93 7F 00 R1 = 0x007F;
00005193 19 D3 3A 70 [P_KeyScanMode] = R1;
00005195 40 92 R1 = 0;
00005196 19 D3 3C 70 [P_KeyScanPort] = R1;
00005198 09 93 00 80 R1 = 0x8000;
0000519A 19 D3 03 70 [P_IOA_PullR] = R1;
0000519C 42 92 R1 = S_KeyCodeMapping;
0000519D 19 D3 07 00 [KeyScanFlag] = R1;
0000519F 90 9A RETF;
//----------------------------------------------------------------------------------------
F_KeyCodeMapping:
000051A0 0D 9B 09 00 BP = KeyStatusBuf;
GetChangedKey:
000051A2 C5 92 R1 = [BP];
000051A3 09 83 7F 00 R1 ^= 0x007F;
000051A5 79 95 R2 = R1 LSR 4;
000051A6 7A 95 R2 = R2 LSR 4;
000051A7 09 B3 7F 00 R1 &= 0x007F;
000051A9 01 85 R2 ^= R1;
000051AA 01 B5 R2 &= R1;
000051AB 5A 95 R2 = R2 LSL 4;
000051AC 5A 95 R2 = R2 LSL 4;
000051AD 02 A3 R1 |= R2;
000051AE D5 D2 [BP++] = R1;
000051AF 0D 4B 10 00 CMP BP,KeyStatusBuf+7;
000051B1 50 8E JBE GetChangedKey;
//----------------------------------------
000051B2 40 92 R1 = 0; //R1 - row number
SearchKeyLoop:
000051B3 09 0B 09 00 BP = R1+KeyStatusBuf;
000051B5 C5 94 R2 = [BP];
000051B6 0A B5 00 7F R2 &= 0x7F00;
000051B8 04 4E JNZ FindKeyChanged; //test changed key
000051B9 41 02 R1 += 1;
000051BA 48 42 CMP R1,8;
000051BB 49 4E JNZ SearchKeyLoop;
000051BC 2A EE JMP FinishedKeyCodeMapping;
FindKeyChanged: //R1 - row number
000051BD 0C 99 09 00 R4 = KeyStatusBuf;
CheckOtherPressedKey:
000051BF 05 49 CMP R4,BP;
000051C0 04 5E JZ SkipCurrentLine;
000051C1 C4 96 R3 = [R4];
000051C2 0B C7 7F 00 TEST R3,0x007F;
000051C4 22 4E JNZ FinishedKeyCodeMapping; //other key is still pressed
SkipCurrentLine:
000051C5 41 08 R4 += 1;
000051C6 0C 49 11 00 CMP R4,KeyStatusBuf+8;
000051C8 4A 4E JNZ CheckOtherPressedKey;
000051C9 41 02 R1 += 1;
000051CA 01 97 R3 = R1; //R1 = R1 * 7
000051CB 51 93 R1 = R1 LSL 3;
000051CC 03 23 R1 -= R3;
GetColumnLoop:
000051CD 41 22 R1 -= 1;
000051CE 42 95 R2 = R2 LSL 1;
000051CF 43 6E JPL GetColumnLoop;
000051D0 0A C5 FF 7F TEST R2,0x7FFF;
000051D2 14 4E JNZ FinishedKeyCodeMapping; //more than one key pressed
000051D3 09 03 F4 51 R1 += TB_KeyCode;
000051D5 C1 92 R1 = [R1]; //get key_code
000051D6 12 95 05 00 R2 = [GlobalFlag1];
000051D8 41 C4 TEST R2,B_KeyReady;
000051D9 07 4E JNZ SomeKeyIsPressed;
000051DA 41 A4 R2 |= B_KeyReady;
000051DB 1A D5 05 00 [GlobalFlag1] = R2;
000051DD 88 D2 PUSH R1,R1 TO [SP];
000051DE 40 F0 B5 53 CALL F_ClrAllDigits;
000051E0 88 90 POP R1,R1 FROM [SP];
SomeKeyIsPressed:
000051E1 40 F0 77 53 CALL F_ShiftDigitLeft;
000051E3 0D 9B DF 54 BP = Digit13;
000051E5 40 F0 F9 53 CALL F_ShowDigit;
//------------------------------------------------
FinishedKeyCodeMapping:
000051E7 0D 9B 09 00 BP = KeyStatusBuf;
000051E9 48 94 R2 = 8;
ClrKeyStatusBuf:
000051EA C5 92 R1 = [BP];
000051EB 59 93 R1 = R1 LSL 4;
000051EC 59 93 R1 = R1 LSL 4;
000051ED D5 D2 [BP++] = R1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -