📄 lcd_lat.lst
字号:
0388 F408 BCC 0x038A
0389 C02A RJMP 0x03B4
(0142) {
(0143)
(0144) LCD_X=X_Position;
038A 2CAC MOV R10,R12
(0145) LCD_Y=Y;
038B 2EE2 MOV R14,R18
(0146) byte_adr=LCD_Y*16+LCD_X;
038C E180 LDI R24,0x10
038D 9D8E MUL R24,R14
038E 01B0 MOVW R22,R0
038F 2C2A MOV R2,R10
0390 2433 CLR R3
0391 0D62 ADD R22,R2
0392 1D73 ADC R23,R3
(0147)
(0148) if(State==0)
0393 2066 TST R6
0394 F481 BNE 0x03A5
(0149) {
(0150) data_buffer[byte_adr]&=data2[X_Temp];
0395 E080 LDI R24,0
0396 E091 LDI R25,1
0397 011B MOVW R2,R22
0398 0E28 ADD R2,R24
0399 1E39 ADC R3,R25
039A EA88 LDI R24,0xA8
039B E095 LDI R25,5
039C 01FA MOVW R30,R20
039D 0FE8 ADD R30,R24
039E 1FF9 ADC R31,R25
039F 8040 LDD R4,Z+0
03A0 01F1 MOVW R30,R2
03A1 8050 LDD R5,Z+0
03A2 2054 AND R5,R4
03A3 8250 STD Z+0,R5
(0151) }
03A4 C00F RJMP 0x03B4
(0152) else
(0153) {
(0154) data_buffer[byte_adr]|=data[X_Temp];
03A5 E080 LDI R24,0
03A6 E091 LDI R25,1
03A7 011B MOVW R2,R22
03A8 0E28 ADD R2,R24
03A9 1E39 ADC R3,R25
03AA EA80 LDI R24,0xA0
03AB E095 LDI R25,5
03AC 01FA MOVW R30,R20
03AD 0FE8 ADD R30,R24
03AE 1FF9 ADC R31,R25
03AF 8040 LDD R4,Z+0
03B0 01F1 MOVW R30,R2
03B1 8050 LDD R5,Z+0
03B2 2854 OR R5,R4
03B3 8250 STD Z+0,R5
(0155) }
(0156)
(0157) }
03B4 940E05F5 CALL pop_gset5
03B6 9508 RET
_draw_line:
temp --> R20
d_x --> R22
d_y --> R10
err --> R6
y --> R14
x --> R12
y2 --> Y+17
x2 --> Y+15
y1 --> Y+13
x1 --> Y+11
03B7 940E05ED CALL push_arg4
03B9 940E05F8 CALL push_gset5
03BB 9721 SBIW R28,1
(0158) }
(0159)
(0160) void draw_line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2)
(0161) {
(0162) unsigned int x,y;
(0163) unsigned int d_x,d_y; //d_x=x2-x1;d_y=y2-y1;
(0164) int err=0;
03BC 2466 CLR R6
03BD 2477 CLR R7
(0165) unsigned char temp=0;
03BE 2744 CLR R20
(0166) if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
03BF 8809 LDD R0,Y+17
03C0 881A LDD R1,Y+18
03C1 850D LDD R16,Y+13
03C2 851E LDD R17,Y+14
03C3 1600 CP R0,R16
03C4 0611 CPC R1,R17
03C5 F478 BCC 0x03D5
03C6 84CB LDD R12,Y+11
03C7 84DC LDD R13,Y+12
03C8 0178 MOVW R14,R16
03C9 840F LDD R0,Y+15
03CA 8818 LDD R1,Y+16
03CB 861C STD Y+12,R1
03CC 860B STD Y+11,R0
03CD 8809 LDD R0,Y+17
03CE 881A LDD R1,Y+18
03CF 861E STD Y+14,R1
03D0 860D STD Y+13,R0
03D1 8AD8 STD Y+16,R13
03D2 86CF STD Y+15,R12
03D3 8AFA STD Y+18,R15
03D4 8AE9 STD Y+17,R14
(0167) d_y=y2-y1;
03D5 88A9 LDD R10,Y+17
03D6 88BA LDD R11,Y+18
03D7 840D LDD R0,Y+13
03D8 841E LDD R1,Y+14
03D9 18A0 SUB R10,R0
03DA 08B1 SBC R11,R1
(0168) if (d_y==0)
03DB F509 BNE 0x03FD
(0169) {
(0170) if(x1>x2)
03DC 840F LDD R0,Y+15
03DD 8818 LDD R1,Y+16
03DE 850B LDD R16,Y+11
03DF 851C LDD R17,Y+12
03E0 1600 CP R0,R16
03E1 0611 CPC R1,R17
03E2 F428 BCC 0x03E8
(0171) {x=x1;x1=x2;x2=x;}
03E3 0168 MOVW R12,R16
03E4 861C STD Y+12,R1
03E5 860B STD Y+11,R0
03E6 8AD8 STD Y+16,R13
03E7 86CF STD Y+15,R12
(0172) for ( x=x1;x<=x2;x++ ) draw_point(x,y,1);
03E8 84CB LDD R12,Y+11
03E9 84DC LDD R13,Y+12
03EA C00C RJMP 0x03F7
03EB E081 LDI R24,1
03EC 8388 STD Y+0,R24
03ED 2D2E MOV R18,R14
03EE 2D0C MOV R16,R12
03EF 926F PUSH R6
03F0 927F PUSH R7
03F1 DF7E RCALL _draw_point
03F2 907F POP R7
03F3 906F POP R6
03F4 01C6 MOVW R24,R12
03F5 9601 ADIW R24,1
03F6 016C MOVW R12,R24
03F7 840F LDD R0,Y+15
03F8 8818 LDD R1,Y+16
03F9 140C CP R0,R12
03FA 041D CPC R1,R13
03FB F778 BCC 0x03EB
(0173) }
03FC C0FB RJMP 0x04F8
(0174) else
(0175) {
(0176) if(x2>=x1){temp=1;d_x=x2-x1;}
03FD 840F LDD R0,Y+15
03FE 8818 LDD R1,Y+16
03FF 850B LDD R16,Y+11
0400 851C LDD R17,Y+12
0401 1600 CP R0,R16
0402 0611 CPC R1,R17
0403 F030 BCS 0x040A
0404 E041 LDI R20,1
0405 01B0 MOVW R22,R0
0406 0108 MOVW R0,R16
0407 1B60 SUB R22,R16
0408 0B71 SBC R23,R17
0409 C006 RJMP 0x0410
(0177) else d_x=x1-x2;
040A 856B LDD R22,Y+11
040B 857C LDD R23,Y+12
040C 840F LDD R0,Y+15
040D 8818 LDD R1,Y+16
040E 1960 SUB R22,R0
040F 0971 SBC R23,R1
(0178) x=x1;y=y1; draw_point(x,y,1);
0410 84CB LDD R12,Y+11
0411 84DC LDD R13,Y+12
0412 84ED LDD R14,Y+13
0413 84FE LDD R15,Y+14
0414 E081 LDI R24,1
0415 8388 STD Y+0,R24
0416 2D2E MOV R18,R14
0417 2D0C MOV R16,R12
0418 926F PUSH R6
0419 927F PUSH R7
041A DF55 RCALL _draw_point
041B 907F POP R7
041C 906F POP R6
(0179) if(temp&&(d_y<=d_x))
041D 2344 TST R20
041E F409 BNE 0x0420
041F C037 RJMP 0x0457
0420 156A CP R22,R10
0421 057B CPC R23,R11
0422 F408 BCC 0x0424
0423 C033 RJMP 0x0457
0424 C02C RJMP 0x0451
(0180) while(x!=x2)
(0181) {if(err<0){x=x+1;err=err+(y2-y);}
0425 01C3 MOVW R24,R6
0426 3080 CPI R24,0
0427 E0E0 LDI R30,0
0428 079E CPC R25,R30
0429 F454 BGE 0x0434
042A 01C6 MOVW R24,R12
042B 9601 ADIW R24,1
042C 016C MOVW R12,R24
042D 8829 LDD R2,Y+17
042E 883A LDD R3,Y+18
042F 182E SUB R2,R14
0430 083F SBC R3,R15
0431 0C62 ADD R6,R2
0432 1C73 ADC R7,R3
0433 C014 RJMP 0x0448
(0182) else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);
0434 01C6 MOVW R24,R12
0435 9601 ADIW R24,1
0436 016C MOVW R12,R24
0437 01C7 MOVW R24,R14
0438 9601 ADIW R24,1
0439 017C MOVW R14,R24
043A 8829 LDD R2,Y+17
043B 883A LDD R3,Y+18
043C 1A28 SUB R2,R24
043D 0A39 SBC R3,R25
043E 0123 MOVW R4,R6
043F 0C42 ADD R4,R2
0440 1C53 ADC R5,R3
0441 842F LDD R2,Y+15
0442 8838 LDD R3,Y+16
0443 182C SUB R2,R12
0444 083D SBC R3,R13
0445 1842 SUB R4,R2
0446 0853 SBC R5,R3
0447 0132 MOVW R6,R4
(0183) }
(0184) draw_point(x,y,1);
0448 E081 LDI R24,1
0449 8388 STD Y+0,R24
044A 2D2E MOV R18,R14
044B 2D0C MOV R16,R12
044C 926F PUSH R6
044D 927F PUSH R7
044E DF21 RCALL _draw_point
044F 907F POP R7
0450 906F POP R6
0451 840F LDD R0,Y+15
0452 8818 LDD R1,Y+16
0453 14C0 CP R12,R0
0454 04D1 CPC R13,R1
0455 F679 BNE 0x0425
0456 C0A1 RJMP 0x04F8
(0185) }
(0186) else if(temp&&(d_y>d_x))
0457 2344 TST R20
0458 F409 BNE 0x045A
0459 C032 RJMP 0x048C
045A 156A CP R22,R10
045B 057B CPC R23,R11
045C F578 BCC 0x048C
045D C028 RJMP 0x0486
(0187) while(y!=y2)
(0188) {d_x=x2-x;d_y=y2-y;
045E 856F LDD R22,Y+15
045F 8978 LDD R23,Y+16
0460 196C SUB R22,R12
0461 097D SBC R23,R13
0462 88A9 LDD R10,Y+17
0463 88BA LDD R11,Y+18
0464 18AE SUB R10,R14
0465 08BF SBC R11,R15
(0189) if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
0466 01C3 MOVW R24,R6
0467 3080 CPI R24,0
0468 E0E0 LDI R30,0
0469 079E CPC R25,R30
046A F46C BGE 0x0478
046B 01C6 MOVW R24,R12
046C 9601 ADIW R24,1
046D 016C MOVW R12,R24
046E 01C7 MOVW R24,R14
046F 9601 ADIW R24,1
0470 017C MOVW R14,R24
0471 0113 MOVW R2,R6
0472 0C2A ADD R2,R10
0473 1C3B ADC R3,R11
0474 1A26 SUB R2,R22
0475 0A37 SBC R3,R23
0476 0131 MOVW R6,R2
0477 C005 RJMP 0x047D
(0190) else {y=y+1;err=err-d_x;}
0478 01C7 MOVW R24,R14
0479 9601 ADIW R24,1
047A 017C MOVW R14,R24
047B 1A66 SUB R6,R22
047C 0A77 SBC R7,R23
(0191) draw_point(x,y,1);
047D E081 LDI R24,1
047E 8388 STD Y+0,R24
047F 2D2E MOV R18,R14
0480 2D0C MOV R16,R12
0481 926F PUSH R6
0482 927F PUSH R7
0483 DEEC RCALL _draw_point
0484 907F POP R7
0485 906F POP R6
0486 8809 LDD R0,Y+17
0487 881A LDD R1,Y+18
0488 14E0 CP R14,R0
0489 04F1 CPC R15,R1
048A F699 BNE 0x045E
048B C06C RJMP 0x04F8
(0192) }
(0193) else if(!temp&&(d_y<=d_x))
048C 2344 TST R20
048D F009 BEQ 0x048F
048E C034 RJMP 0x04C3
048F 156A CP R22,R10
0490 057B CPC R23,R11
0491 F408 BCC 0x0493
0492 C030 RJMP 0x04C3
0493 C029 RJMP 0x04BD
(0194) while(x!=x2)
(0195) {d_x=x-x2;d_y=y2-y;
0494 01B6 MOVW R22,R12
0495 840F LDD R0,Y+15
0496 8818 LDD R1,Y+16
0497 1960 SUB R22,R0
0498 0971 SBC R23,R1
0499 88A9 LDD R10,Y+17
049A 88BA LDD R11,Y+18
049B 18AE SUB R10,R14
049C 08BF SBC R11,R15
(0196) if(err<0){x=x-1;err=err+d_y;}
049D 01C3 MOVW R24,R6
049E 3080 CPI R24,0
049F E0E0 LDI R30,0
04A0 079E CPC R25,R30
04A1 F434 BGE 0x04A8
04A2 01C6 MOVW R24,R12
04A3 9701 SBIW R24,1
04A4 016C MOVW R12,R24
04A5 0C6A ADD R6,R10
04A6 1C7B ADC R7,R11
04A7 C00C RJMP 0x04B4
(0197) else {x=x-1;y=y+1;err=err+d_y-d_x;}
04A8 01C6 MOVW R24,R12
04A9 9701 SBIW R24,1
04AA 016C MOVW R12,R24
04AB 01C7 MOVW R24,R14
04AC 9601 ADIW R24,1
04AD 017C MOVW R14,R24
04AE 0113 MOVW R2,R6
04AF 0C2A ADD R2,R10
04B0 1C3B ADC R3,R11
04B1 1A26 SUB R2,R22
04B2 0A37 SBC R3,R23
04B3 0131 MOVW R6,R2
(0198) draw_point(x,y,1);
04B4 E081 LDI R24,1
04B5 8388 STD Y+0,R24
04B6 2D2E MOV R18,R14
04B7 2D0C MOV R16,R12
04B8 926F PUSH R6
04B9 927F PUSH R7
04BA DEB5 RCALL _draw_point
04BB 907F POP R7
04BC 906F POP R6
04BD 840F LDD R0,Y+15
04BE 8818 LDD R1,Y+16
04BF 14C0 CP R12,R0
04C0 04D1 CPC R13,R1
04C1 F691 BNE 0x0494
04C2 C035 RJMP 0x04F8
(0199) }
(0200) else if(!temp &&(d_y>d_x))
04C3 2344 TST R20
04C4 F009 BEQ 0x04C6
04C5 C032 RJMP 0x04F8
04C6 156A CP R22,R10
04C7 057B CPC R23,R11
04C8 F578 BCC 0x04F8
04C9 C029 RJMP 0x04F3
(0201) while(y!=y2)
(0202) {d_x=x-x2;d_y=y2-y;
04CA 01B6 MOVW R22,R12
04CB 840F LDD R0,Y+15
04CC 8818 LDD R1,Y+16
04CD 1960 SUB R22,R0
04CE 0971 SBC R23,R1
04CF 88A9 LDD R10,Y+17
04D0 88BA LDD R11,Y+18
04D1 18AE SUB R10,R14
04D2 08BF SBC R11,R15
(0203) if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
04D3 01C3 MOVW R24,R6
04D4 3080 CPI R24,0
04D5 E0E0 LDI R30,0
04D6 079E CPC R25,R30
04D7 F46C BGE 0x04E5
04D8 01C6 MOVW R24,R12
04D9 9701 SBIW R24,1
04DA 016C MOVW R12,R24
04DB 01C7 MOVW R24,R14
04DC 9601 ADIW R24,1
04DD 017C MOVW R14,R24
04DE 0113 MOVW R2,R6
04DF 0C2A ADD R2,R10
04E0 1C3B ADC R3,R11
04E1 1A26 SUB R2,R22
04E2 0A37 SBC R3,R23
04E3 0131 MOVW R6,R2
04E4 C005 RJMP 0x04EA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -