📄 lcd.s51
字号:
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
; Saved register size: 9
; Auto size: 10
MOV A,#-0xa
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 19)
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 65 BYTE sendBuffer[10];
// 66
// 67 //send control data
// 68 sendBuffer[0] = LCD_ADDR;
MOV A,#0x76
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 69 sendBuffer[1] = RS_0;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
CLR A
MOVX @DPTR,A
// 70
// 71 if (address < 0x40)
MOV A,R1
CLR C
SUBB A,#0x40
MOV A,#0x2
JNC ??initNewSymbol_0
// 72 sendBuffer[2] = 0x80;
LCALL ?XSTACK_DISP0_8
MOV A,#-0x80
SJMP ??initNewSymbol_1
// 73 else
// 74 sendBuffer[2] = 0xC0;
??initNewSymbol_0:
LCALL ?XSTACK_DISP0_8
MOV A,#-0x40
??initNewSymbol_1:
MOVX @DPTR,A
// 75
// 76 sendBuffer[3] = 0x40 | (address & 0x3F);
MOV A,#0x3f
ANL A,R1
ORL A,#0x40
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 77 smbSend(sendBuffer, 4);
; Setup parameters for call to function smbSend
MOV R1,#0x4
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()
// 78
// 79 //send data
// 80 sendBuffer[0] = LCD_ADDR;
// 81 sendBuffer[1] = RS_1;
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOV A,#0x40
MOVX @DPTR,A
// 82
// 83 sendBuffer[2] = symbol[0];
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 84 sendBuffer[3] = symbol[1];
MOV DPL,R6
MOV DPH,R7
INC DPTR
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 85 sendBuffer[4] = symbol[2];
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 86 sendBuffer[5] = symbol[3];
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x5
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 87 sendBuffer[6] = symbol[4];
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 88 sendBuffer[7] = symbol[5];
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x7
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 89 sendBuffer[8] = symbol[6];
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x8
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 90 sendBuffer[9] = symbol[7];
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x9
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 91
// 92 smbSend(sendBuffer, 10);
; Setup parameters for call to function smbSend
MOV R1,#0xa
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()
// 93 }
MOV A,#0xa
LJMP ?Subroutine0 & 0xFFFF
CFI EndBlock cfiBlock0
// 94
// 95
// 96 /******************************************************************************
// 97 * See lcd.h for a description of this function.
// 98 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 99 void initLcd(void){
initLcd:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function initLcd
FUNCALL initLcd, smbSend
LOCFRAME ISTACK, 2, STACK
LOCFRAME XSTACK, 8, STACK
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL initLcd, lcdUpdateLine
LOCFRAME ISTACK, 2, STACK
LOCFRAME XSTACK, 8, STACK
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 8, STACK
FUNCALL initLcd, lcdUpdateLine
LOCFRAME ISTACK, 2, STACK
LOCFRAME XSTACK, 8, STACK
ARGFRAME ISTACK, 2, STACK
ARGFRAME XSTACK, 8, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 8
MOV A,#-0x8
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 8)
// 100 BYTE sendBuffer[8];
// 101
// 102 // Setting the ports as inputs.
// 103 IO_DIR_PORT_PIN(1, 2, IO_IN);
ANL 0xfe,#0xfb
// 104 IO_DIR_PORT_PIN(2, 0, IO_IN);
ANL 0xff,#0xfe
// 105
// 106 // Setting P2_3 and P2_4 for general IO operation.
// 107 IO_FUNC_PORT_PIN(1, 2, IO_FUNC_GIO);
ANL 0xf4,#0xfb
// 108 IO_FUNC_PORT_PIN(2, 0, IO_FUNC_GIO);
ANL 0xf5,#0xfe
// 109
// 110 // Setting ports for pull-up.
// 111 IO_IMODE_PORT_PIN(1, 2, IO_IMODE_PUD);
ANL 0xf6,#0xfb
// 112 IO_IMODE_PORT_PIN(2, 0, IO_IMODE_PUD);
ANL 0xf7,#0xfe
// 113 IO_PUD_PORT(1, IO_PULLUP);
ANL 0xf7,#0xbf
// 114 IO_PUD_PORT(2, IO_PULLUP);
ANL 0xf7,#0x7f
// 115
// 116 // Setting up the lcd initialisation data.
// 117 sendBuffer[0] = LCD_ADDR;
MOV A,#0x76
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 118 sendBuffer[1] = RS_0; // Instruction Register
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
CLR A
MOVX @DPTR,A
// 119 sendBuffer[2] = 0x0C; // Display control D = 1: Display On
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOV A,#0xc
MOVX @DPTR,A
// 120 // C = 0: Cursor Off
// 121 // B = 0: Cursor character blink off
// 122 sendBuffer[3] = 0x21; // Function set H = 1: Use extended instruction set
MOV A,#0x3
LCALL ?XSTACK_DISP0_8
MOV A,#0x21
MOVX @DPTR,A
// 123 sendBuffer[4] = 0xA0; // Set DDRAM address ADD = 0x20
MOV A,#0x4
LCALL ?XSTACK_DISP0_8
MOV A,#-0x60
MOVX @DPTR,A
// 124 sendBuffer[5] = 0x07; // Display configuration P = 1: Column data right to left
MOV A,#0x5
LCALL ?XSTACK_DISP0_8
MOV A,#0x7
MOVX @DPTR,A
// 125 // Q = 1: Row data, bottom to top
// 126 sendBuffer[6] = 0x34; // Function set DL= 0: 4 bits
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV A,#0x34
MOVX @DPTR,A
// 127 // M = 1: 2-line by 16 display
// 128 // SL= 0: MUX1:18
// 129 // H = 0: Use basic instruction set
// 130 sendBuffer[7] = 0x01; // Clearing display
MOV A,#0x7
LCALL ?XSTACK_DISP0_8
MOV A,#0x1
MOVX @DPTR,A
// 131 smbSend(sendBuffer, 8);
; Setup parameters for call to function smbSend
MOV R1,#0x8
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()
// 132
// 133 lcdUpdate((char*)"", (char*)""); //clear display
; Setup parameters for call to function lcdUpdateLine
MOV R2,#(`?<Constant "">` & 0xff)
MOV R3,#((`?<Constant "">` >> 8) & 0xff)
MOV R1,#0x0
MOV DPTR,#(lcdUpdateLine & 0xffff)
MOV A,#((lcdUpdateLine >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
; Setup parameters for call to function lcdUpdateLine
MOV R2,#(`?<Constant "">` & 0xff)
MOV R3,#((`?<Constant "">` >> 8) & 0xff)
MOV R1,#0x1
MOV A,#((lcdUpdateLine >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 134 }
MOV A,#0x8
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 XSP16+0
LJMP ??Subroutine1_1 & 0xFFFF
CFI EndBlock cfiBlock1
// 135
// 136
// 137
// 138 /******************************************************************************
// 139 * See lcd.h for a description of this function.
// 140 ******************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 141 void lcdUpdate(char *pLine1, char *pLine2) {
lcdUpdate:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function lcdUpdate
FUNCALL lcdUpdate, lcdUpdateLine
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL lcdUpdate, lcdUpdateLine
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, 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)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -