📄 lcd.s51
字号:
MOV DPTR,#(lcdUpdateSymbol & 0xffff)
MOV A,#((lcdUpdateSymbol >> 16) & 0xff)
LJMP ?Subroutine4 & 0xFFFF
CFI EndBlock cfiBlock7
// 201 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiBlock8 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI Invalid
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 9)
CFI Valid
??Subroutine0_0:
MOV R7,#0x1
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock8
// 202
// 203
// 204 /******************************************************************************
// 205 * See lcd.h for a description of this function.
// 206 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 207 void lcdUpdateSymbol(UINT8 line, UINT8 position, char c){
lcdUpdateSymbol:
CFI Block cfiBlock9 Using cfiCommon0
CFI Function lcdUpdateSymbol
FUNCALL lcdUpdateSymbol, smbSend
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL lcdUpdateSymbol, smbSend
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
MOV A,#-0x9
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 3
MOV A,#-0x3
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 12)
MOV A,R3
MOV R6,A
// 208 BYTE sendBuffer[3];
// 209 UINT8 i;
// 210
// 211 if(position > LINE_SIZE){
MOV A,R2
CLR C
SUBB A,#0x11
JC ??lcdUpdateSymbol_0
// 212 position = LINE_SIZE - 1;
MOV R2,#0xf
// 213 }
// 214
// 215 i = 0;
// 216 sendBuffer[i++] = LCD_ADDR;
??lcdUpdateSymbol_0:
MOV A,#0x76
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 217 sendBuffer[i++] = RS_0;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
CLR A
MOVX @DPTR,A
// 218 sendBuffer[i++] = ((line == LINE1) ? LINE1_ADDR : LINE2_ADDR) + position;
MOV A,R1
JNZ ??lcdUpdateSymbol_1
MOV R0,#-0x80
SJMP ??lcdUpdateSymbol_2
??lcdUpdateSymbol_1:
MOV R0,#-0x40
??lcdUpdateSymbol_2:
MOV A,R0
ADD A,R2
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 219 smbSend(sendBuffer, i);
; Setup parameters for call to function smbSend
MOV R1,#0x3
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(smbSend & 0xffff)
MOV A,#((smbSend >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 220
// 221 i = 0;
// 222 sendBuffer[i++] = LCD_ADDR;
// 223 sendBuffer[i++] = RS_1;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV A,#0x40
MOVX @DPTR,A
// 224 sendBuffer[i++] = c;
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV A,R6
MOVX @DPTR,A
// 225 smbSend(sendBuffer, i);
; Setup parameters for call to function smbSend
MOV R1,#0x3
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(smbSend & 0xffff)
MOV A,#((smbSend >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 226 }
MOV A,#0x3
SJMP ?Subroutine0
CFI EndBlock cfiBlock9
// 227
// 228
// 229
// 230 /******************************************************************************
// 231 * See lcd.h for a description of this function.
// 232 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 233 void scrollText(char *string, UINT8 length){
scrollText:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function scrollText
FUNCALL scrollText, getJoystickDirection
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL scrollText, lcdUpdateLine
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL scrollText, getJoystickDirection
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL scrollText, lcdUpdateLine
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL scrollText, halWait
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
MOV A,#-0xc
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
; Saved register size: 12
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
MOV ?V0 + 3,R1
// 234 UINT8 i = 0;
MOV ?V0 + 2,#0x0
// 235
// 236 while(getJoystickDirection() != CENTRED);
??scrollText_0:
; Setup parameters for call to function getJoystickDirection
MOV DPTR,#(getJoystickDirection & 0xffff)
MOV A,#((getJoystickDirection >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
JNZ ??scrollText_0
// 237
// 238 do{
// 239 lcdUpdateLine(LINE2, &string[i]);
??scrollText_1:
; Setup parameters for call to function lcdUpdateLine
MOV ?V0 + 0,?V0 + 2
MOV A,R6
ADD A,?V0 + 0
MOV R2,A
MOV A,R7
ADDC A,#0x0
MOV R3,A
MOV R1,#0x1
MOV DPTR,#(lcdUpdateLine & 0xffff)
MOV A,#((lcdUpdateLine >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 240 i++;
INC ?V0 + 2
// 241
// 242 if(getJoystickDirection() != CENTRED)
MOV DPL,?V0 + 3
MOV ?V0 + 0,DPL
; Setup parameters for call to function getJoystickDirection
MOV DPTR,#(getJoystickDirection & 0xffff)
MOV A,#((getJoystickDirection >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
JZ ??scrollText_2
// 243 {
// 244 lcdUpdateLine(LINE2, &(string[length-17]));
; Setup parameters for call to function lcdUpdateLine
MOV A,R6
ADD A,?V0 + 0
MOV R0,A
MOV A,R7
ADDC A,#0x0
MOV R1,A
MOV A,#-0x11
ADD A,R0
MOV R2,A
MOV A,#-0x1
ADDC A,R1
MOV R3,A
MOV R1,#0x1
MOV DPTR,#(lcdUpdateLine & 0xffff)
MOV A,#((lcdUpdateLine >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 245 return;
SJMP ??scrollText_3
// 246 }
// 247
// 248 halWait(100);
??scrollText_2:
; Setup parameters for call to function halWait
MOV R1,#0x64
MOV DPTR,#(halWait & 0xffff)
MOV A,#((halWait >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 249 } while((string[i+15] != '\0') && (i + 15) < length);
MOV DPL,?V0 + 2
MOV R0,DPL
MOV A,R6
ADD A,R0
MOV R2,A
MOV A,R7
ADDC A,#0x0
MOV R3,A
MOV A,#0xf
ADD A,R2
MOV DPL,A
CLR A
ADDC A,R3
MOV DPH,A
MOVX A,@DPTR
JZ ??scrollText_3
MOV A,#0xf
ADD A,R0
MOV R0,A
CLR A
ADDC A,#0x0
MOV R1,A
MOV A,R0
SUBB A,?V0 + 0
MOV A,R1
SUBB A,#0x0
CLR C
XRL A,PSW
RLC A
JC ??scrollText_1
??scrollText_3:
LJMP ?Subroutine2 & 0xFFFF
CFI EndBlock cfiBlock10
// 250 }
// 251
// 252 /******************************************************************************
// 253 * Internal function for lcd.c
// 254 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 255 void smbSend(BYTE *buffer, const UINT8 n){
smbSend:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function smbSend
FUNCALL smbSend, smbStart
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL smbSend, smbSendByte
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
FUNCALL smbSend, smbStop
LOCFRAME XSTACK, 10, STACK
ARGFRAME XSTACK, 10, STACK
MOV A,#-0xa
LCALL ?BANKED_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 10)
; Saved register size: 10
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
MOV ?V0 + 1,R1
// 256 UINT8 i = 0;
// 257
// 258 smbStart();
; Setup parameters for call to function smbStart
MOV DPTR,#(smbStart & 0xffff)
MOV A,#((smbStart >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 259 for(i = 0; i < n; i++){
MOV A,?V0 + 1
JZ ??smbSend_0
MOV ?V0 + 0,A
// 260 while(!smbSendByte(buffer[i])); //send until ACK received
??smbSend_1:
; Setup parameters for call to function smbSendByte
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(smbSendByte & 0xffff)
MOV A,#((smbSendByte >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
JZ ??smbSend_1
// 261 }
MOV DPL,R6
MOV DPH,R7
INC DPTR
MOV R6,DPL
MOV R7,DPH
DEC ?V0 + 0
MOV A,?V0 + 0
JNZ ??smbSend_1
// 262 smbStop();
??smbSend_0:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -