📄 lcd-m8.lst
字号:
i --> R20
j --> R22
ASD --> Y+4
y --> R18
x --> R16
02DC D221 RCALL push_gset2
(0214) }
(0215)
(0216)
(0217)
(0218)
(0219)
(0220)
(0221) uchar disen(uchar x,uchar y,uchar ASD)
(0222) {
(0223) uchar i,j;
(0224) ASD=ASD-0x20;
02DD 818C LDD R24,Y+4
02DE 5280 SUBI R24,0x20
02DF 838C STD Y+4,R24
(0225) for(i=0;i<2;i++)
02E0 2744 CLR R20
02E1 C006 RJMP 0x02E8
(0226) for(j=0;j<8;j++)
02E2 2766 CLR R22
02E3 C001 RJMP 0x02E5
02E4 9563 INC R22
02E5 3068 CPI R22,0x8
02E6 F3E8 BCS 0x02E4
02E7 9543 INC R20
02E8 3042 CPI R20,2
02E9 F3C0 BCS 0x02E2
(0227) {
(0228) // w8(x+j,y+i,ASCII[(unit)ASD*2+i][j]);
(0229) }
(0230) return x+8;
02EA 5F08 SUBI R16,0xF8
02EB D204 RCALL pop_gset2
02EC 9508 RET
_disen_row:
n --> R20
k --> R22
ASD --> R10
y --> R12
x --> R14
02ED D20A RCALL push_gset5
02EE 2EC2 MOV R12,R18
02EF 2EE0 MOV R14,R16
02F0 9721 SBIW R28,1
02F1 84AB LDD R10,Y+11
02F2 84BC LDD R11,Y+12
(0231) }
(0232)
(0233) uchar disen_row(uchar x,uchar y,uchar *ASD) //显示ASCLL字符串
(0234) {
(0235) uchar k=0,n;
02F3 2766 CLR R22
02F4 C00E RJMP 0x0303
(0236) while(*(ASD+k)!=0x00)
(0237) {
(0238) n=disen(x+8*k,y,ASD[k]);
02F5 2FE6 MOV R30,R22
02F6 27FF CLR R31
02F7 0DEA ADD R30,R10
02F8 1DFB ADC R31,R11
02F9 8020 LDD R2,Z+0
02FA 8228 STD Y+0,R2
02FB 2D2C MOV R18,R12
02FC E088 LDI R24,0x8
02FD 9F86 MUL R24,R22
02FE 2D0E MOV R16,R14
02FF 0D00 ADD R16,R0
0300 DFDB RCALL _disen
0301 2F40 MOV R20,R16
(0239) k++;
0302 9563 INC R22
0303 2FE6 MOV R30,R22
0304 27FF CLR R31
0305 0DEA ADD R30,R10
0306 1DFB ADC R31,R11
0307 8020 LDD R2,Z+0
0308 2022 TST R2
0309 F759 BNE 0x02F5
(0240) }
(0241) return n;
030A 2F04 MOV R16,R20
030B 9621 ADIW R28,1
030C D1E9 RCALL pop_gset5
030D 9508 RET
_disnum:
i --> R20
j --> R22
ASD --> Y+4
y --> R18
x --> R16
030E D1EF RCALL push_gset2
(0242) }
(0243)
(0244) uchar disnum(uchar x,uchar y,uchar ASD)
(0245) {
(0246) uchar i,j;
(0247) ASD=ASD+0x10;
030F 818C LDD R24,Y+4
0310 5F80 SUBI R24,0xF0
0311 838C STD Y+4,R24
(0248) for(i=0;i<2;i++)
0312 2744 CLR R20
0313 C006 RJMP 0x031A
(0249) for(j=0;j<8;j++)
0314 2766 CLR R22
0315 C001 RJMP 0x0317
0316 9563 INC R22
0317 3068 CPI R22,0x8
0318 F3E8 BCS 0x0316
0319 9543 INC R20
031A 3042 CPI R20,2
031B F3C0 BCS 0x0314
(0250) {
(0251) // w8(x+j,y+i,ASCII[ASD*2+i][j]);
(0252) }
(0253) return x+8;
031C 5F08 SUBI R16,0xF8
031D D1D2 RCALL pop_gset2
031E 9508 RET
_dis5:
ent --> R20
n --> R22
lock --> R10
num --> Y+1
i --> R12
dat --> R14
y --> Y+18
x --> Y+16
031F D197 RCALL push_arg4
0320 D1D7 RCALL push_gset5
0321 9726 SBIW R28,6
0322 88EC LDD R14,Y+20
0323 88FD LDD R15,Y+21
(0254) }
(0255)
(0256)
(0257) uchar dis5(uchar x,uchar y,unit dat)
(0258) {
(0259) uchar num[5]={10};
0324 EB81 LDI R24,0xB1
0325 E091 LDI R25,1
0326 01FE MOVW R30,R28
0327 9631 ADIW R30,1
0328 E005 LDI R16,5
0329 E010 LDI R17,0
032A 93FA ST R31,-Y
032B 93EA ST R30,-Y
032C 939A ST R25,-Y
032D 938A ST R24,-Y
032E D1EE RCALL asgncblk
(0260) uchar i,n=0,lock=0,ent;
032F 2766 CLR R22
0330 24AA CLR R10
(0261) for(i=0;i<5;i++)
0331 24CC CLR R12
0332 C011 RJMP 0x0344
(0262) {
(0263) num[i]=dat%10;
0333 E02A LDI R18,0xA
0334 E030 LDI R19,0
0335 0187 MOVW R16,R14
0336 D185 RCALL mod16u
0337 01CE MOVW R24,R28
0338 9601 ADIW R24,1
0339 2DEC MOV R30,R12
033A 27FF CLR R31
033B 0FE8 ADD R30,R24
033C 1FF9 ADC R31,R25
033D 8300 STD Z+0,R16
(0264) dat/=10;
033E E02A LDI R18,0xA
033F E030 LDI R19,0
0340 0187 MOVW R16,R14
0341 D17C RCALL div16u
0342 0178 MOVW R14,R16
0343 94C3 INC R12
0344 2D8C MOV R24,R12
0345 3085 CPI R24,5
0346 F360 BCS 0x0333
(0265) }
(0266) for(i=5;i>1;i--)
0347 E085 LDI R24,5
0348 2EC8 MOV R12,R24
0349 C026 RJMP 0x0370
(0267) {
(0268) if((num[i-1]>0&&num[i-1]<10)||(lock==1))
034A 01CE MOVW R24,R28
034B 2DEC MOV R30,R12
034C 27FF CLR R31
034D 0FE8 ADD R30,R24
034E 1FF9 ADC R31,R25
034F 8020 LDD R2,Z+0
0350 2433 CLR R3
0351 1432 CP R3,R2
0352 F440 BCC 0x035B
0353 01CE MOVW R24,R28
0354 2DEC MOV R30,R12
0355 27FF CLR R31
0356 0FE8 ADD R30,R24
0357 1FF9 ADC R31,R25
0358 8180 LDD R24,Z+0
0359 308A CPI R24,0xA
035A F018 BCS 0x035E
035B 2D8A MOV R24,R10
035C 3081 CPI R24,1
035D F489 BNE 0x036F
(0269) {
(0270) lock=1;
035E 24AA CLR R10
035F 94A3 INC R10
(0271) ent=disnum(x+n*8,y,num[i-1]);
0360 01CE MOVW R24,R28
0361 2DEC MOV R30,R12
0362 27FF CLR R31
0363 0FE8 ADD R30,R24
0364 1FF9 ADC R31,R25
0365 8020 LDD R2,Z+0
0366 8228 STD Y+0,R2
0367 892A LDD R18,Y+18
0368 E088 LDI R24,0x8
0369 9F86 MUL R24,R22
036A 8908 LDD R16,Y+16
036B 0D00 ADD R16,R0
036C DFA1 RCALL _disnum
036D 2F40 MOV R20,R16
(0272) n++;
036E 9563 INC R22
036F 94CA DEC R12
0370 E081 LDI R24,1
0371 158C CP R24,R12
0372 F2B8 BCS 0x034A
(0273) }
(0274) }
(0275) ent=disnum(x+n*8,y,num[0]);
0373 8029 LDD R2,Y+1
0374 8228 STD Y+0,R2
0375 892A LDD R18,Y+18
0376 E088 LDI R24,0x8
0377 9F86 MUL R24,R22
0378 8908 LDD R16,Y+16
0379 0D00 ADD R16,R0
037A DF93 RCALL _disnum
037B 2F40 MOV R20,R16
(0276) return ent;
037C 9626 ADIW R28,6
037D D178 RCALL pop_gset5
037E 9624 ADIW R28,4
037F 9508 RET
_dis_hz:
t --> Y+1
i --> R20
hz --> R22
y --> R10
x --> R12
0380 D179 RCALL push_gset4
0381 2EA2 MOV R10,R18
0382 2EC0 MOV R12,R16
0383 97A1 SBIW R28,0x21
0384 A569 LDD R22,Y+41
0385 A57A LDD R23,Y+42
(0277) }
(0278)
(0279)
(0280) uchar dis_hz(uchar x,uchar y,const uchar *hz)
(0281) {
(0282) uchar i;
(0283) uchar t[32];
(0284) for(i=0;i<32;i++)
0386 2744 CLR R20
0387 C00D RJMP 0x0395
(0285) t[i]=hz[i];
0388 2FE4 MOV R30,R20
0389 27FF CLR R31
038A 0FE6 ADD R30,R22
038B 1FF7 ADC R31,R23
038C 91E4 LPM R30,0(Z)
038D 01CE MOVW R24,R28
038E 9601 ADIW R24,1
038F 2FA4 MOV R26,R20
0390 27BB CLR R27
0391 0FA8 ADD R26,R24
0392 1FB9 ADC R27,R25
0393 93EC ST R30,0(X)
0394 9543 INC R20
0395 3240 CPI R20,0x20
0396 F388 BCS 0x0388
(0286) for(i=0;i<16;i++)
0397 2744 CLR R20
0398 C00D RJMP 0x03A6
(0287) w8(i+x,y,t[i]);
0399 01CE MOVW R24,R28
039A 9601 ADIW R24,1
039B 2FE4 MOV R30,R20
039C 27FF CLR R31
039D 0FE8 ADD R30,R24
039E 1FF9 ADC R31,R25
039F 8020 LDD R2,Z+0
03A0 8228 STD Y+0,R2
03A1 2D2A MOV R18,R10
03A2 2F04 MOV R16,R20
03A3 0D0C ADD R16,R12
03A4 DDE9 RCALL _w8
03A5 9543 INC R20
03A6 3140 CPI R20,0x10
03A7 F388 BCS 0x0399
(0288) for(i=0;i<16;i++)
03A8 2744 CLR R20
03A9 C00E RJMP 0x03B8
(0289) w8(i+x,y+1,t[i+16]);
03AA 01CE MOVW R24,R28
03AB 9641 ADIW R24,0x11
03AC 2FE4 MOV R30,R20
03AD 27FF CLR R31
03AE 0FE8 ADD R30,R24
03AF 1FF9 ADC R31,R25
03B0 8020 LDD R2,Z+0
03B1 8228 STD Y+0,R2
03B2 2D2A MOV R18,R10
03B3 5F2F SUBI R18,0xFF
03B4 2F04 MOV R16,R20
03B5 0D0C ADD R16,R12
03B6 DDD7 RCALL _w8
03B7 9543 INC R20
03B8 3140 CPI R20,0x10
03B9 F380 BCS 0x03AA
(0290) return x+16;
03BA 2D0C MOV R16,R12
03BB 5F00 SUBI R16,0xF0
03BC 96A1 ADIW R28,0x21
03BD D136 RCALL pop_gset4
03BE 9508 RET
_dis_hz_row:
j --> Y+3
n --> R20
i --> R22
hz --> R10
row --> R12
x --> R14
03BF D138 RCALL push_gset5
03C0 2EC2 MOV R12,R18
03C1 2EE0 MOV R14,R16
03C2 9722 SBIW R28,2
03C3 84AC LDD R10,Y+12
03C4 84BD LDD R11,Y+13
(0291) }
(0292)
(0293) //*显示一行汉字,从y开始显示
(0294) uchar dis_hz_row(uchar x,uchar row,const uchar **hz)
(0295) {
(0296) uchar i,j,n=x;
03C5 2D4E MOV R20,R14
(0297) for(i=0;hz[i]!=NULL;i++)
03C6 2766 CLR R22
03C7 C011 RJMP 0x03D9
(0298) {
(0299) dis_hz(i*16+x,row,hz[i]);
03C8 E082 LDI R24,2
03C9 9F86 MUL R24,R22
03CA 01F0 MOVW R30,R0
03CB 0DEA ADD R30,R10
03CC 1DFB ADC R31,R11
03CD 8020 LDD R2,Z+0
03CE 8031 LDD R3,Z+1
03CF 8239 STD Y+1,R3
03D0 8228 STD Y+0,R2
03D1 2D2C MOV R18,R12
03D2 E180 LDI R24,0x10
03D3 9F86 MUL R24,R22
03D4 2D00 MOV R16,R0
03D5 0D0E ADD R16,R14
03D6 DFA9 RCALL _dis_hz
(0300) n+=16;
03D7 5F40 SUBI R20,0xF0
03D8 9563 INC R22
03D9 E082 LDI R24,2
03DA 9F86 MUL R24,R22
03DB 01F0 MOVW R30,R0
03DC 0DEA ADD R30,R10
03DD 1DFB ADC R31,R11
03DE 8020 LDD R2,Z+0
03DF 8031 LDD R3,Z+1
03E0 2022 TST R2
03E1 F731 BNE 0x03C8
03E2 2033 TST R3
03E3 F721 BNE 0x03C8
(0301) }
(0302) return n;
03E4 2F04 MOV R16,R20
03E5 9622 ADIW R28,2
03E6 D10F RCALL pop_gset5
03E7 9508 RET
_DRAW_DOT:
y_date --> R20
y --> R20
x --> R22
03E8 D115 RCALL push_gset2
03E9 2F42 MOV R20,R18
03EA 2F60 MOV R22,R16
03EB 9721 SBIW R28,1
(0303) }
(0304)
(0305)
(0306)
(0307) //*画点函数
(0308) void DRAW_DOT(uchar x,uchar y) //*128*64*
(0309) {
(0310) uchar y_date;
(0311) LCD_Y=y/8;y_date=y%8;y_date=0x01<<y_date;
03EC 2E24 MOV R2,R20
03ED 9426 LSR R2
03EE 9426 LSR R2
03EF 9426 LSR R2
03F0 92200116 STS LCD_Y,R2
03F2 E018 LDI R17,0x8
03F3 2F04 MOV R16,R20
03F4 D0E3 RCALL mod8u
03F5 2F40 MOV R20,R16
03F6 E001 LDI R16,1
03F7 2F14 MOV R17,R20
03F8 D11E RCALL lsl8
03F9 2F40 MOV R20,R16
(0312) LCD_X=x;
03FA 93600117 STS LCD_X,R22
(0313) w8(LCD_X,LCD_Y,y_date);
03FC 8348 STD Y+0,R20
03FD 91200116 LDS R18,LCD_Y
03FF 2F06 MOV R16,R22
0400 DD8D RCALL _w8
0401 9621 ADIW R28,1
0402 D0ED RCALL pop_gset2
0403 9508 RET
_read_x:
c --> R20
line --> R22
row --> R20
0404 D0F9 RCALL push_gset2
0405 2F62 MOV R22,R18
0406 2F40 MOV R20,R16
(0314) }
(0315)
(0316)
(0317) uchar read_x(uchar row, uchar line)//*读制定行,列的数据
(0318) {
(0319) uchar c;
(0320) sety(line);
0407 2F06 MOV R16,R22
0408 DD6D RCALL _sety
(0321) setx(row);
0409 2F04 MOV R16,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -