📄 lcd.lst
字号:
\ 000005 ; Auto size: 3
\ 000005 74FD MOV A,#-0x3
\ 000007 12.... LCALL ?ALLOC_XSTACK8
\ 00000A EB MOV A,R3
\ 00000B FE MOV R6,A
208 BYTE sendBuffer[3];
209 UINT8 i;
210
211 if(position > LINE_SIZE){
\ 00000C EA MOV A,R2
\ 00000D C3 CLR C
\ 00000E 9411 SUBB A,#0x11
\ 000010 4002 JC ??lcdUpdateSymbol_0
212 position = LINE_SIZE - 1;
\ 000012 7A0F MOV R2,#0xf
213 }
214
215 i = 0;
216 sendBuffer[i++] = LCD_ADDR;
\ ??lcdUpdateSymbol_0:
\ 000014 7476 MOV A,#0x76
\ 000016 85..82 MOV DPL,?XSP + 0
\ 000019 85..83 MOV DPH,?XSP + 1
\ 00001C F0 MOVX @DPTR,A
217 sendBuffer[i++] = RS_0;
\ 00001D 7401 MOV A,#0x1
\ 00001F 12.... LCALL ?XSTACK_DISP0_8
\ 000022 E4 CLR A
\ 000023 F0 MOVX @DPTR,A
218 sendBuffer[i++] = ((line == LINE1) ? LINE1_ADDR : LINE2_ADDR) + position;
\ 000024 E9 MOV A,R1
\ 000025 7004 JNZ ??lcdUpdateSymbol_1
\ 000027 7880 MOV R0,#-0x80
\ 000029 8002 SJMP ??lcdUpdateSymbol_2
\ ??lcdUpdateSymbol_1:
\ 00002B 78C0 MOV R0,#-0x40
\ ??lcdUpdateSymbol_2:
\ 00002D E8 MOV A,R0
\ 00002E 2A ADD A,R2
\ 00002F C0E0 PUSH A
\ 000031 7402 MOV A,#0x2
\ 000033 12.... LCALL ?XSTACK_DISP0_8
\ 000036 D0E0 POP A
\ 000038 F0 MOVX @DPTR,A
219 smbSend(sendBuffer, i);
\ 000039 ; Setup parameters for call to function smbSend
\ 000039 7903 MOV R1,#0x3
\ 00003B 85..82 MOV DPL,?XSP + 0
\ 00003E 85..83 MOV DPH,?XSP + 1
\ 000041 AA82 MOV R2,DPL
\ 000043 AB83 MOV R3,DPH
\ 000045 90.... MOV DPTR,#(smbSend & 0xffff)
\ 000048 74.. MOV A,#((smbSend >> 16) & 0xff)
\ 00004A 12.... LCALL ?BCALL ; Banked call to: DPTR()
220
221 i = 0;
222 sendBuffer[i++] = LCD_ADDR;
223 sendBuffer[i++] = RS_1;
\ 00004D 7401 MOV A,#0x1
\ 00004F 12.... LCALL ?XSTACK_DISP0_8
\ 000052 7440 MOV A,#0x40
\ 000054 F0 MOVX @DPTR,A
224 sendBuffer[i++] = c;
\ 000055 7402 MOV A,#0x2
\ 000057 12.... LCALL ?XSTACK_DISP0_8
\ 00005A EE MOV A,R6
\ 00005B F0 MOVX @DPTR,A
225 smbSend(sendBuffer, i);
\ 00005C ; Setup parameters for call to function smbSend
\ 00005C 7903 MOV R1,#0x3
\ 00005E 85..82 MOV DPL,?XSP + 0
\ 000061 85..83 MOV DPH,?XSP + 1
\ 000064 AA82 MOV R2,DPL
\ 000066 AB83 MOV R3,DPH
\ 000068 90.... MOV DPTR,#(smbSend & 0xffff)
\ 00006B 74.. MOV A,#((smbSend >> 16) & 0xff)
\ 00006D 12.... LCALL ?BCALL ; Banked call to: DPTR()
226 }
\ 000070 7403 MOV A,#0x3
\ 000072 80.. SJMP ?Subroutine0
227
228
229
230 /******************************************************************************
231 * See lcd.h for a description of this function.
232 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
233 void scrollText(char *string, UINT8 length){
\ scrollText:
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 89.. MOV ?V0 + 3,R1
234 UINT8 i = 0;
\ 00000B 75..00 MOV ?V0 + 2,#0x0
235
236 while(getJoystickDirection() != CENTRED);
\ ??scrollText_0:
\ 00000E ; Setup parameters for call to function getJoystickDirection
\ 00000E 90.... MOV DPTR,#(getJoystickDirection & 0xffff)
\ 000011 74.. MOV A,#((getJoystickDirection >> 16) & 0xff)
\ 000013 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000016 E9 MOV A,R1
\ 000017 70F5 JNZ ??scrollText_0
237
238 do{
239 lcdUpdateLine(LINE2, &string[i]);
\ ??scrollText_1:
\ 000019 ; Setup parameters for call to function lcdUpdateLine
\ 000019 85.... MOV ?V0 + 0,?V0 + 2
\ 00001C EE MOV A,R6
\ 00001D 25.. ADD A,?V0 + 0
\ 00001F FA MOV R2,A
\ 000020 EF MOV A,R7
\ 000021 3400 ADDC A,#0x0
\ 000023 FB MOV R3,A
\ 000024 7901 MOV R1,#0x1
\ 000026 90.... MOV DPTR,#(lcdUpdateLine & 0xffff)
\ 000029 74.. MOV A,#((lcdUpdateLine >> 16) & 0xff)
\ 00002B 12.... LCALL ?BCALL ; Banked call to: DPTR()
240 i++;
\ 00002E 05.. INC ?V0 + 2
241
242 if(getJoystickDirection() != CENTRED)
\ 000030 85..82 MOV DPL,?V0 + 3
\ 000033 8582.. MOV ?V0 + 0,DPL
\ 000036 ; Setup parameters for call to function getJoystickDirection
\ 000036 90.... MOV DPTR,#(getJoystickDirection & 0xffff)
\ 000039 74.. MOV A,#((getJoystickDirection >> 16) & 0xff)
\ 00003B 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 00003E E9 MOV A,R1
\ 00003F 601C JZ ??scrollText_2
243 {
244 lcdUpdateLine(LINE2, &(string[length-17]));
\ 000041 ; Setup parameters for call to function lcdUpdateLine
\ 000041 EE MOV A,R6
\ 000042 25.. ADD A,?V0 + 0
\ 000044 F8 MOV R0,A
\ 000045 EF MOV A,R7
\ 000046 3400 ADDC A,#0x0
\ 000048 F9 MOV R1,A
\ 000049 74EF MOV A,#-0x11
\ 00004B 28 ADD A,R0
\ 00004C FA MOV R2,A
\ 00004D 74FF MOV A,#-0x1
\ 00004F 39 ADDC A,R1
\ 000050 FB MOV R3,A
\ 000051 7901 MOV R1,#0x1
\ 000053 90.... MOV DPTR,#(lcdUpdateLine & 0xffff)
\ 000056 74.. MOV A,#((lcdUpdateLine >> 16) & 0xff)
\ 000058 12.... LCALL ?BCALL ; Banked call to: DPTR()
245 return;
\ 00005B 8036 SJMP ??scrollText_3
246 }
247
248 halWait(100);
\ ??scrollText_2:
\ 00005D ; Setup parameters for call to function halWait
\ 00005D 7964 MOV R1,#0x64
\ 00005F 90.... MOV DPTR,#(halWait & 0xffff)
\ 000062 74.. MOV A,#((halWait >> 16) & 0xff)
\ 000064 12.... LCALL ?BCALL ; Banked call to: DPTR()
249 } while((string[i+15] != '\0') && (i + 15) < length);
\ 000067 85..82 MOV DPL,?V0 + 2
\ 00006A A882 MOV R0,DPL
\ 00006C EE MOV A,R6
\ 00006D 28 ADD A,R0
\ 00006E FA MOV R2,A
\ 00006F EF MOV A,R7
\ 000070 3400 ADDC A,#0x0
\ 000072 FB MOV R3,A
\ 000073 740F MOV A,#0xf
\ 000075 2A ADD A,R2
\ 000076 F582 MOV DPL,A
\ 000078 E4 CLR A
\ 000079 3B ADDC A,R3
\ 00007A F583 MOV DPH,A
\ 00007C E0 MOVX A,@DPTR
\ 00007D 6014 JZ ??scrollText_3
\ 00007F 740F MOV A,#0xf
\ 000081 28 ADD A,R0
\ 000082 F8 MOV R0,A
\ 000083 E4 CLR A
\ 000084 3400 ADDC A,#0x0
\ 000086 F9 MOV R1,A
\ 000087 E8 MOV A,R0
\ 000088 95.. SUBB A,?V0 + 0
\ 00008A E9 MOV A,R1
\ 00008B 9400 SUBB A,#0x0
\ 00008D C3 CLR C
\ 00008E 65D0 XRL A,PSW
\ 000090 33 RLC A
\ 000091 4086 JC ??scrollText_1
\ ??scrollText_3:
\ 000093 02.... LJMP ?Subroutine2 & 0xFFFF
250 }
251
252 /******************************************************************************
253 * Internal function for lcd.c
254 ******************************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
255 void smbSend(BYTE *buffer, const UINT8 n){
\ smbSend:
\ 000000 74F6 MOV A,#-0xa
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 10
\ 000005 ; Auto size: 0
\ 000005 EA MOV A,R2
\ 000006 FE MOV R6,A
\ 000007 EB MOV A,R3
\ 000008 FF MOV R7,A
\ 000009 89.. MOV ?V0 + 1,R1
256 UINT8 i = 0;
257
258 smbStart();
\ 00000B ; Setup parameters for call to function smbStart
\ 00000B 90.... MOV DPTR,#(smbStart & 0xffff)
\ 00000E 74.. MOV A,#((smbStart >> 16) & 0xff)
\ 000010 12.... LCALL ?BCALL ; Banked call to: DPTR()
259 for(i = 0; i < n; i++){
\ 000013 E5.. MOV A,?V0 + 1
\ 000015 6022 JZ ??smbSend_0
\ 000017 F5.. MOV ?V0 + 0,A
260 while(!smbSendByte(buffer[i])); //send until ACK received
\ ??smbSend_1:
\ 000019 ; Setup parameters for call to function smbSendByte
\ 000019 8E82 MOV DPL,R6
\ 00001B 8F83 MOV DPH,R7
\ 00001D E0 MOVX A,@DPTR
\ 00001E F9 MOV R1,A
\ 00001F 90.... MOV DPTR,#(smbSendByte & 0xffff)
\ 000022 74.. MOV A,#((smbSendByte >> 16) & 0xff)
\ 000024 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ 000027 E9 MOV A,R1
\ 000028 60EF JZ ??smbSend_1
261 }
\ 00002A 8E82 MOV DPL,R6
\ 00002C 8F83 MOV DPH,R7
\ 00002E A3 INC DPTR
\ 00002F AE82 MOV R6,DPL
\ 000031 AF83 MOV R7,DPH
\ 000033 15.. DEC ?V0 + 0
\ 000035 E5.. MOV A,?V0 + 0
\ 000037 70E0 JNZ ??smbSend_1
262 smbStop();
\ ??smbSend_0:
\ 000039 ; Setup parameters for call to function smbStop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -