⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.lst

📁 key scan and lcd display file it can run in the computer with sunplus compile
💻 LST
📖 第 1 页 / 共 5 页
字号:
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 + -