📄 lcd.lst
字号:
; 110: LCM_E = 0;
110 0004 3512 CLR [012H].2
; 111: LCM_E = 1;
文件:LCD.c 盛群编译器版本 2.86 页次7
111 0005 3112 SET [012H].2
111 0006 L22:
111 0006 L23:
; 112: while (_pb & Busy); //检测忙信号
112 0006 3F94 SZ __pb.7
112 0007 2800 R JMP L22
; 113: return(_pb);
113 0008 0714 MOV A,__pb
113 0009 L21:
113 0009 0003 RET
113 000A _ReadStatusLCM ENDP
; 117: {
117 0000 @LCMInit .SECTION 'CODE'
117 0000 PUBLIC _LCMInit
117 0000 _LCMInit PROC
; 118: WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
118 0000 0F38 MOV A,038h
118 0001 0080 R MOV WriteCommandLCM0,A
118 0002 0F00 MOV A,00h
118 0003 0080 R MOV WriteCommandLCM1,A
118 0004 2000 R CALL _WriteCommandLCM
; 119: Delay5Ms();
119 0005 2000 R CALL _Delay5Ms
; 120: WriteCommandLCM(0x38,0);
120 0006 0F38 MOV A,038h
120 0007 0080 R MOV WriteCommandLCM0,A
120 0008 0F00 MOV A,00h
120 0009 0080 R MOV WriteCommandLCM1,A
120 000A 2000 R CALL _WriteCommandLCM
; 121: Delay5Ms();
121 000B 2000 R CALL _Delay5Ms
; 122: WriteCommandLCM(0x38,0);
122 000C 0F38 MOV A,038h
122 000D 0080 R MOV WriteCommandLCM0,A
122 000E 0F00 MOV A,00h
122 000F 0080 R MOV WriteCommandLCM1,A
122 0010 2000 R CALL _WriteCommandLCM
; 123: Delay5Ms();
123 0011 2000 R CALL _Delay5Ms
; 125: WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
文件:LCD.C 盛群编译器版本 2.86 页次7
125 0012 0F38 MOV A,038h
125 0013 0080 R MOV WriteCommandLCM0,A
125 0014 0F01 MOV A,01h
125 0015 0080 R MOV WriteCommandLCM1,A
125 0016 2000 R CALL _WriteCommandLCM
; 126: WriteCommandLCM(0x08,1); //关闭显示
126 0017 0F08 MOV A,08h
文件:LCD.c 盛群编译器版本 2.86 页次8
126 0018 0080 R MOV WriteCommandLCM0,A
126 0019 0F01 MOV A,01h
126 001A 0080 R MOV WriteCommandLCM1,A
126 001B 2000 R CALL _WriteCommandLCM
; 127: WriteCommandLCM(0x01,1); //显示清屏
127 001C 0F01 MOV A,01h
127 001D 0080 R MOV WriteCommandLCM0,A
127 001E 0F01 MOV A,01h
127 001F 0080 R MOV WriteCommandLCM1,A
127 0020 2000 R CALL _WriteCommandLCM
; 128: WriteCommandLCM(0x06,1); // 显示光标移动设置
128 0021 0F06 MOV A,06h
128 0022 0080 R MOV WriteCommandLCM0,A
128 0023 0F01 MOV A,01h
128 0024 0080 R MOV WriteCommandLCM1,A
128 0025 2000 R CALL _WriteCommandLCM
; 129: WriteCommandLCM(0x0C,1); // 显示开及光标设置
129 0026 0F0C MOV A,0ch
129 0027 0080 R MOV WriteCommandLCM0,A
129 0028 0F01 MOV A,01h
129 0029 0080 R MOV WriteCommandLCM1,A
129 002A 2000 R CALL _WriteCommandLCM
129 002B L25:
129 002B 0003 RET
129 002C _LCMInit ENDP
; 134: {
134 0000 @Display .SECTION 'CODE'
134 0000 PUBLIC _Display
134 0000 _Display PROC
; 133: void Display( Uchar dd )
133 0000 PUBLIC Display0
133 0000 00 LOCAL Display0 DB ? ; dd
; 137: for (i=0;i<8;i++)
137 0000 1F00 R CLR CR8
137 0001 2800 R JMP L30
137 0002 L27:
; 139: DisplayOneChar(i,1,dd++);
139 0002 0700 R MOV A,CR8
139 0003 0080 R MOV DisplayOneChar0,A
139 0004 0F01 MOV A,01h
139 0005 0080 R MOV DisplayOneChar1,A
139 0006 0700 R MOV A,Display0
139 0007 0080 R MOV b0_7,A
139 0008 1480 R INC Display0
139 0009 0700 R MOV A,b0_7
139 000A 0080 R MOV DisplayOneChar2,A
139 000B 2000 R CALL _DisplayOneChar
; 140: dd &= 0x7f;
文件:LCD.C 盛群编译器版本 2.86 页次8
140 000C 3400 R CLR Display0.7
; 141: if (dd<32) dd=32;
文件:LCD.c 盛群编译器版本 2.86 页次9
141 000D 0700 R MOV A,Display0
141 000E 0A20 SUB A,020h
141 000F 3C0A SZ [0ah].0
141 0010 2800 R JMP L31
141 0011 0F20 MOV A,020h
141 0012 0080 R MOV Display0,A
141 0013 L31:
141 0013 L28:
; 137: for (i=0;i<8;i++)
137 0013 1480 R INC CR8
137 0014 L30:
137 0014 0700 R MOV A,CR8
137 0015 0A08 SUB A,08h
137 0016 380A SNZ [0ah].0
137 0017 2800 R JMP L27
137 0018 L26:
137 0018 0003 RET
137 0001 00 LOCAL b0_7 DB ?
; 135: Uchar i;
135 0002 00 LOCAL CR8 DB ? ; i
135 0019 _Display ENDP
; 147: {
147 0000 @DisplayOneChar .SECTION 'CODE'
147 0000 PUBLIC _DisplayOneChar
147 0000 _DisplayOneChar PROC
; 146: void DisplayOneChar(Uchar X, Uchar Y, Uchar DData)
146 0000 PUBLIC DisplayOneChar0
146 0000 00 LOCAL DisplayOneChar0 DB ? ; X
146 0000 PUBLIC DisplayOneChar1
146 0001 00 LOCAL DisplayOneChar1 DB ? ; Y
146 0000 PUBLIC DisplayOneChar2
146 0002 00 LOCAL DisplayOneChar2 DB ? ; DData
; 148: Y &= 0x1;
148 0000 0F01 MOV A,01h
148 0001 0680 R ANDM A,DisplayOneChar1
; 149: X &= 0xF; //限制X不能大于15,Y不能大于1
149 0002 0F0F MOV A,0fh
149 0003 0680 R ANDM A,DisplayOneChar0
; 150: if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
150 0004 1080 R SZ DisplayOneChar1
150 0005 2800 R JMP L36
150 0006 2800 R JMP L34
150 0007 L36:
150 0007 3000 R SET DisplayOneChar0.6
150 0008 L34:
; 151: X |= 0x80; //算出指令码
文件:LCD.C 盛群编译器版本 2.86 页次9
151 0008 3000 R SET DisplayOneChar0.7
; 152: WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
152 0009 0700 R MOV A,DisplayOneChar0
文件:LCD.c 盛群编译器版本 2.86 页次10
152 000A 0080 R MOV WriteCommandLCM0,A
152 000B 0F00 MOV A,00h
152 000C 0080 R MOV WriteCommandLCM1,A
152 000D 2000 R CALL _WriteCommandLCM
; 153: WriteDataLCM(DData);
153 000E 0700 R MOV A,DisplayOneChar2
153 000F 0080 R MOV WriteDataLCM0,A
153 0010 2000 R CALL _WriteDataLCM
153 0011 L33:
153 0011 0003 RET
153 0012 _DisplayOneChar ENDP
; 158: {
158 0000 @DisplayListChar .SECTION 'CODE'
158 0000 PUBLIC _DisplayListChar
158 0000 _DisplayListChar PROC
; 157: void DisplayListChar(Uchar X, Uchar Y, Uchar *DData)
157 0000 PUBLIC DisplayListChar0
157 0000 00 LOCAL DisplayListChar0 DB ? ; X
157 0000 PUBLIC DisplayListChar1
157 0001 00 LOCAL DisplayListChar1 DB ? ; Y
157 0000 PUBLIC DisplayListChar2
157 0002 0002[ LOCAL DisplayListChar2 DB 2 DUP (?) ; DData
00
]
; 161: ListLength = 0;
161 0000 1F00 R CLR CR11
; 162: Y &= 0x1;
162 0001 0F01 MOV A,01h
162 0002 0680 R ANDM A,DisplayListChar1
; 163: X &= 0xF; //限制X不能大于15,Y不能大于1
163 0003 0F0F MOV A,0fh
163 0004 0680 R ANDM A,DisplayListChar0
163 0005 2800 R JMP L39
163 0006 L38:
; 166: if (X <= 0xF) //X坐标应小于0xF
166 0006 0F0F MOV A,0fh
166 0007 0200 R SUB A,DisplayListChar0
166 0008 380A SNZ [0ah].0
166 0009 2800 R JMP L41
; 168: DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
168 000A 0700 R MOV A,DisplayListChar0
168 000B 0080 R MOV DisplayOneChar0,A
168 000C 0700 R MOV A,DisplayListChar1
168 000D 0080 R MOV DisplayOneChar1,A
168 000E 0700 R MOV A,CR11
168 000F 0300 R ADD A,DisplayListChar2
168 0010 0080 R MOV b0_9,A
文件:LCD.C 盛群编译器版本 2.86 页次10
168 0011 0700 R MOV A,DisplayListChar2[1]
168 0012 0080 R MOV b0_9[1],A
168 0013 0700 R MOV A,b0_9[1]
文件:LCD.c 盛群编译器版本 2.86 页次11
168 0014 0084 MOV [04H],A
168 0015 0700 R MOV A,b0_9
168 0016 0083 MOV [03H],A
168 0017 0702 MOV A,[02H]
168 0018 0080 R MOV b0_9,A
168 0019 0700 R MOV A,b0_9
168 001A 0080 R MOV DisplayOneChar2,A
168 001B 2000 R CALL _DisplayOneChar
; 169: ListLength++;
169 001C 1480 R INC CR11
; 170: X++;
170 001D 1480 R INC DisplayListChar0
170 001E L41:
170 001E L39:
; 164: while (DData[ListLength]>0x20) //若到达字串尾则退出
164 001E 0700 R MOV A,CR11
164 001F 0300 R ADD A,DisplayListChar2
164 0020 0080 R MOV b0_9,A
164 0021 0700 R MOV A,DisplayListChar2[1]
164 0022 0080 R MOV b0_9[1],A
164 0023 0700 R MOV A,b0_9[1]
164 0024 0084 MOV [04H],A
164 0025 0700 R MOV A,b0_9
164 0026 0083 MOV [03H],A
164 0027 0702 MOV A,[02H]
164 0028 0080 R MOV b0_9,A
164 0029 0F20 MOV A,020h
164 002A 0200 R SUB A,b0_9
164 002B 380A SNZ [0ah].0
164 002C 2800 R JMP L38
164 002D L37:
164 002D 0003 RET
164 0004 0002[ LOCAL b0_9 DB 2 DUP(?)
00
]
; 159: Uchar ListLength;
159 0006 00 LOCAL CR11 DB ? ; ListLength
159 002E _DisplayListChar ENDP
; 177: {
177 0000 @Delay5Ms .SECTION 'CODE'
177 0000 PUBLIC _Delay5Ms
177 0000 _Delay5Ms PROC
; 178: _delay(15000);
178 0000 0F0E MOV A,0eH
178 0001 0080 E MOV RH,A
178 0002 0F9D MOV A,09dH
178 0003 2000 E CALL __DELAYY3
178 0004 L43:
178 0004 0003 RET
178 0005 _Delay5Ms ENDP
; 183: {
183 0000 @Delay400Ms .SECTION 'CODE'
183 0000 PUBLIC _Delay400Ms
文件:LCD.c 盛群编译器版本 2.86 页次12
183 0000 _Delay400Ms PROC
文件:LCD.C 盛群编译器版本 2.86 页次11
; 185: for(i=0;i<20;i++)
185 0000 1F00 R CLR CR12
185 0001 L45:
; 187: _delay(60000);
187 0001 0F3A MOV A,03aH
187 0002 0080 E MOV RH,A
187 0003 0F79 MOV A,079H
187 0004 2000 E CALL __DELAYY3
187 0005 L46:
; 185: for(i=0;i<20;i++)
185 0005 1480 R INC CR12
185 0006 0F80 MOV A,80h
185 0007 0400 R XOR A,CR12
185 0008 0A94 SUB A,094h
185 0009 380A SNZ [0ah].0
185 000A 2800 R JMP L45
185 000B L44:
185 000B 0003 RET
; 184: int i;
184 0000 00 LOCAL CR12 DB ? ; i
184 000C _Delay400Ms ENDP
; 39: void main(void)
39 0000 STARTSEC .SECTION 'CODE'
39 0000 STARTUP:
39 0000 0003 RET
39 0001 EXTERN RH:BYTE
39 0001 EXTERN T2:BYTE
39 0001 EXTERN __DELAYY0:NEAR
39 0001 EXTERN __DELAYY1:NEAR
39 0001 EXTERN __DELAYY2:NEAR
39 0001 EXTERN __DELAYY3:NEAR
39 0001 EXTERN __DELAYY4:NEAR
39 0001 EXTERN __DELAYY5:NEAR
39 0000 @CODE .SECTION AT 0 'CODE'
39 0000 2800 R JMP begin
39 0001 @DUMMY PROC
39 0001 2000 R CALL _main
39 0002 @DUMMY ENDP
0 Errors
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -