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

📄 lcd.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        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 + -