📄 lcd.lis
字号:
00DC .dbline 134
00DC ; EN_1;
00DC 979A sbi 0x12,7
00DE .dbline 135
00DE ; delay500ns;
00DE 0000 nop
00E0 .dbline 135
00E0 0000 nop
00E2 .dbline 135
00E2 0000 nop
00E4 .dbline 135
00E4 0000 nop
00E6 .dbline 136
00E6 ; DataIn;
00E6 2224 clr R2
00E8 27BA out 0x17,R2
00EA .dbline 137
00EA ; bf = DataLcdIn;
00EA 06B3 in R16,0x16
00EC .dbline 138
00EC ; EN_0;
00EC 9798 cbi 0x12,7
00EE .dbline 139
00EE ; delay125ns;
00EE 0000 nop
00F0 .dbline 140
00F0 ; RS_1;
00F0 949A sbi 0x12,4
00F2 .dbline 141
00F2 ; RW_0;
00F2 9598 cbi 0x12,5
00F4 .dbline 143
00F4 ;
00F4 ; return bf;
00F4 .dbline -2
00F4 L8:
00F4 .dbline 0 ; func end
00F4 0895 ret
00F6 .dbsym r bf 16 c
00F6 .dbend
00F6 .dbfunc e LCDReady _LCDReady fV
00F6 ; bf -> R20
.even
00F6 _LCDReady::
00F6 0E940000 xcall push_gset1
00FA .dbline -1
00FA .dbline 146
00FA ; }
00FA ; void LCDReady(void)
00FA ; {
00FA L10:
00FA .dbline 149
00FA ; unsigned char bf;
00FA ; do
00FA ; {bf = BFRead();
00FA .dbline 149
00FA ECDF xcall _BFRead
00FC 402F mov R20,R16
00FE .dbline 151
00FE ; //PORTA = bf; //just for debug
00FE ; }
00FE L11:
00FE .dbline 152
00FE ; while((bf&0x80)==0x80);
00FE 242E mov R2,R20
0100 3324 clr R3
0102 27FC sbrc R2,7
0104 FACF rjmp L10
0106 .dbline 153
0106 ; DataOut;
0106 8FEF ldi R24,255
0108 87BB out 0x17,R24
010A .dbline -2
010A L9:
010A 0E940000 xcall pop_gset1
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbsym r bf 20 c
0110 .dbend
0110 .dbfunc e CharWrite _CharWrite fV
0110 ; data -> R20
.even
0110 _CharWrite::
0110 0E940000 xcall push_gset1
0114 402F mov R20,R16
0116 .dbline -1
0116 .dbline 156
0116 ; }
0116 ; void CharWrite(unsigned char data)
0116 ; {
0116 .dbline 157
0116 ; LCDReady();
0116 EFDF xcall _LCDReady
0118 .dbline 158
0118 ; RS_1;
0118 949A sbi 0x12,4
011A .dbline 159
011A ; RW_0;
011A 9598 cbi 0x12,5
011C .dbline 160
011C ; DataLcd = data; //
011C 48BB out 0x18,R20
011E .dbline 161
011E ; delay250ns;
011E 0000 nop
0120 .dbline 161
0120 0000 nop
0122 .dbline 162
0122 ; EN_1;
0122 979A sbi 0x12,7
0124 .dbline 163
0124 ; delay500ns;
0124 0000 nop
0126 .dbline 163
0126 0000 nop
0128 .dbline 163
0128 0000 nop
012A .dbline 163
012A 0000 nop
012C .dbline 164
012C ; EN_0;
012C 9798 cbi 0x12,7
012E .dbline 165
012E ; delay125ns;
012E 0000 nop
0130 .dbline 166
0130 ; RS_0;
0130 9498 cbi 0x12,4
0132 .dbline 167
0132 ; RW_1;
0132 959A sbi 0x12,5
0134 .dbline -2
0134 L13:
0134 0E940000 xcall pop_gset1
0138 .dbline 0 ; func end
0138 0895 ret
013A .dbsym r data 20 c
013A .dbend
013A .dbfunc e LcdInit _LcdInit fV
.even
013A _LcdInit::
013A .dbline -1
013A .dbline 170
013A ; }
013A ; void LcdInit(void)
013A ; {
013A .dbline 171
013A ; LCDReady();
013A DDDF xcall _LCDReady
013C .dbline 172
013C ; FunctionSet();
013C A5DF xcall _FunctionSet
013E .dbline 173
013E ; LCDReady();
013E DBDF xcall _LCDReady
0140 .dbline 174
0140 ; DdramSet(0);
0140 0027 clr R16
0142 B6DF xcall _DdramSet
0144 .dbline 175
0144 ; LCDReady();
0144 D8DF xcall _LCDReady
0146 .dbline 176
0146 ; VisionSet();
0146 8FDF xcall _VisionSet
0148 .dbline 177
0148 ; LCDReady();
0148 D6DF xcall _LCDReady
014A .dbline 178
014A ; InputSet();
014A 7DDF xcall _InputSet
014C .dbline 179
014C ; LCDReady();
014C D4DF xcall _LCDReady
014E .dbline 180
014E ; ClearLcd();
014E 58DF xcall _ClearLcd
0150 .dbline 181
0150 ; LCDReady();
0150 D2DF xcall _LCDReady
0152 .dbline 182
0152 ; home();
0152 69DF xcall _home
0154 .dbline 183
0154 ; delay_us(10);
0154 0AE0 ldi R16,10
0156 10E0 ldi R17,0
0158 0E940000 xcall _delay_us
015C .dbline -2
015C L14:
015C .dbline 0 ; func end
015C 0895 ret
015E .dbend
015E .dbfunc e CharsWrite _CharsWrite fV
015E ; addr -> R22
015E ; s -> R20,R21
015E ; addry -> R12
015E ; addrx -> R10
.even
015E _CharsWrite::
015E 0E940000 xcall push_gset4
0162 C22E mov R12,R18
0164 A02E mov R10,R16
0166 4885 ldd R20,y+8
0168 5985 ldd R21,y+9
016A .dbline -1
016A .dbline 186
016A ; }
016A ; void CharsWrite(unsigned char addrx,unsigned char addry,unsigned char *s)
016A ; {
016A .dbline 188
016A ; unsigned char addr;
016A ; if (addry==1)
016A 8C2D mov R24,R12
016C 8130 cpi R24,1
016E 11F4 brne L16
0170 .dbline 189
0170 ; {
0170 .dbline 190
0170 ; addr = addrx;
0170 6A2D mov R22,R10
0172 .dbline 191
0172 ; }
0172 07C0 xjmp L17
0174 L16:
0174 .dbline 192
0174 ; else if (addry==2)
0174 8C2D mov R24,R12
0176 8230 cpi R24,2
0178 19F4 brne L18
017A .dbline 193
017A ; {
017A .dbline 194
017A ; addr = (addrx+0x40);
017A 6A2D mov R22,R10
017C 605C subi R22,192 ; addi 64
017E .dbline 195
017E ; }
017E 01C0 xjmp L19
0180 L18:
0180 .dbline 197
0180 ; else
0180 ; {
0180 .dbline 198
0180 ; addr = 0;
0180 6627 clr R22
0182 .dbline 199
0182 ; }
0182 L19:
0182 L17:
0182 .dbline 200
0182 ; DdramSet(0); //初始化ddram地址
0182 0027 clr R16
0184 95DF xcall _DdramSet
0186 .dbline 201
0186 ; LCDReady();
0186 B7DF xcall _LCDReady
0188 .dbline 202
0188 ; DdramSet(addr); //设定ddram地址
0188 062F mov R16,R22
018A 92DF xcall _DdramSet
018C .dbline 203
018C ; delay_us(80);
018C 00E5 ldi R16,80
018E 10E0 ldi R17,0
0190 0E940000 xcall _delay_us
0194 09C0 xjmp L21
0196 L20:
0196 .dbline 205
0196 .dbline 206
0196 FA01 movw R30,R20
0198 0081 ldd R16,z+0
019A BADF xcall _CharWrite
019C .dbline 207
019C 4F5F subi R20,255 ; offset = 1
019E 5F4F sbci R21,255
01A0 .dbline 208
01A0 00E5 ldi R16,80
01A2 10E0 ldi R17,0
01A4 0E940000 xcall _delay_us
01A8 .dbline 209
01A8 L21:
01A8 .dbline 204
01A8 ; while(*s)
01A8 FA01 movw R30,R20
01AA 2080 ldd R2,z+0
01AC 2220 tst R2
01AE 99F7 brne L20
01B0 .dbline -2
01B0 L15:
01B0 0E940000 xcall pop_gset4
01B4 .dbline 0 ; func end
01B4 0895 ret
01B6 .dbsym r addr 22 c
01B6 .dbsym r s 20 pc
01B6 .dbsym r addry 12 c
01B6 .dbsym r addrx 10 c
01B6 .dbend
01B6 .dbfunc e DataWrite _DataWrite fV
01B6 ; addr -> R22
01B6 ; s -> R20,R21
01B6 ; addry -> R12
01B6 ; addrx -> R10
.even
01B6 _DataWrite::
01B6 0E940000 xcall push_gset4
01BA C22E mov R12,R18
01BC A02E mov R10,R16
01BE 4885 ldd R20,y+8
01C0 5985 ldd R21,y+9
01C2 .dbline -1
01C2 .dbline 212
01C2 ; {
01C2 ; CharWrite(*s);
01C2 ; s++;
01C2 ; delay_us(80); //等待写入操作完成
01C2 ; }
01C2 ; }
01C2 ; void DataWrite(unsigned char addrx,unsigned char addry,unsigned char *s)
01C2 ; {
01C2 .dbline 214
01C2 ; unsigned char addr;
01C2 ; if (addry==1)
01C2 8C2D mov R24,R12
01C4 8130 cpi R24,1
01C6 11F4 brne L24
01C8 .dbline 215
01C8 ; {
01C8 .dbline 216
01C8 ; addr = addrx;
01C8 6A2D mov R22,R10
01CA .dbline 217
01CA ; }
01CA 07C0 xjmp L25
01CC L24:
01CC .dbline 218
01CC ; else if (addry==2)
01CC 8C2D mov R24,R12
01CE 8230 cpi R24,2
01D0 19F4 brne L26
01D2 .dbline 219
01D2 ; {
01D2 .dbline 220
01D2 ; addr = (addrx+0x40);
01D2 6A2D mov R22,R10
01D4 605C subi R22,192 ; addi 64
01D6 .dbline 221
01D6 ; }
01D6 01C0 xjmp L27
01D8 L26:
01D8 .dbline 223
01D8 ; else
01D8 ; {
01D8 .dbline 224
01D8 ; addr = 0;
01D8 6627 clr R22
01DA .dbline 225
01DA ; }
01DA L27:
01DA L25:
01DA .dbline 226
01DA ; DdramSet(0); //初始化ddram地址
01DA 0027 clr R16
01DC 69DF xcall _DdramSet
01DE .dbline 227
01DE ; LCDReady();
01DE 8BDF xcall _LCDReady
01E0 .dbline 228
01E0 ; DdramSet(addr); //设定ddram地址
01E0 062F mov R16,R22
01E2 66DF xcall _DdramSet
01E4 .dbline 229
01E4 ; delay_us(80);
01E4 00E5 ldi R16,80
01E6 10E0 ldi R17,0
01E8 0E940000 xcall _delay_us
01EC 0AC0 xjmp L29
01EE L28:
01EE .dbline 231
01EE .dbline 232
01EE FA01 movw R30,R20
01F0 0081 ldd R16,z+0
01F2 005D subi R16,208 ; addi 48
01F4 8DDF xcall _CharWrite
01F6 .dbline 233
01F6 4F5F subi R20,255 ; offset = 1
01F8 5F4F sbci R21,255
01FA .dbline 234
01FA 00E5 ldi R16,80
01FC 10E0 ldi R17,0
01FE 0E940000 xcall _delay_us
0202 .dbline 235
0202 L29:
0202 .dbline 230
0202 ; while(*s!=0XFF)
0202 FA01 movw R30,R20
0204 8081 ldd R24,z+0
0206 8F3F cpi R24,255
0208 91F7 brne L28
020A .dbline -2
020A L23:
020A 0E940000 xcall pop_gset4
020E .dbline 0 ; func end
020E 0895 ret
0210 .dbsym r addr 22 c
0210 .dbsym r s 20 pc
0210 .dbsym r addry 12 c
0210 .dbsym r addrx 10 c
0210 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -