📄 graphic.lis
字号:
03E2 ; y = radius;
03E2 AF84 ldd R10,y+15
03E4 BB24 clr R11
03E6 .dbline 214
03E6 ; tSwitch = 3 - 2 * radius;
03E6 82E0 ldi R24,2
03E8 0A2C mov R0,R10
03EA 809D mul R24,R0
03EC 43E0 ldi R20,3
03EE 50E0 ldi R21,0
03F0 4019 sub R20,R0
03F2 5109 sbc R21,R1
03F4 7FC0 xjmp L83
03F6 L82:
03F6 .dbline 217
03F6 ;
03F6 ; while (x <= y)
03F6 ; { lcd_dot(xCenter + x, yCenter + y, mode);
03F6 .dbline 217
03F6 E882 std y+0,R14
03F8 2D85 ldd R18,y+13
03FA 3327 clr R19
03FC 2A0D add R18,R10
03FE 3B1D adc R19,R11
0400 0B85 ldd R16,y+11
0402 1127 clr R17
0404 0C0D add R16,R12
0406 1D1D adc R17,R13
0408 58DE xcall _lcd_dot
040A .dbline 218
040A ; lcd_dot(xCenter + x, yCenter - y, mode);
040A E882 std y+0,R14
040C 2D85 ldd R18,y+13
040E 3327 clr R19
0410 2A19 sub R18,R10
0412 3B09 sbc R19,R11
0414 0B85 ldd R16,y+11
0416 1127 clr R17
0418 0C0D add R16,R12
041A 1D1D adc R17,R13
041C 4EDE xcall _lcd_dot
041E .dbline 220
041E ;
041E ; lcd_dot(xCenter - x, yCenter + y, mode);
041E E882 std y+0,R14
0420 2D85 ldd R18,y+13
0422 3327 clr R19
0424 2A0D add R18,R10
0426 3B1D adc R19,R11
0428 0B85 ldd R16,y+11
042A 1127 clr R17
042C 0C19 sub R16,R12
042E 1D09 sbc R17,R13
0430 44DE xcall _lcd_dot
0432 .dbline 221
0432 ; lcd_dot(xCenter - x, yCenter - y, mode);
0432 E882 std y+0,R14
0434 2D85 ldd R18,y+13
0436 3327 clr R19
0438 2A19 sub R18,R10
043A 3B09 sbc R19,R11
043C 0B85 ldd R16,y+11
043E 1127 clr R17
0440 0C19 sub R16,R12
0442 1D09 sbc R17,R13
0444 3ADE xcall _lcd_dot
0446 .dbline 223
0446 ;
0446 ; lcd_dot(yCenter + y - d, yCenter + x, mode);
0446 E882 std y+0,R14
0448 2D85 ldd R18,y+13
044A 3327 clr R19
044C 2C0D add R18,R12
044E 3D1D adc R19,R13
0450 0D85 ldd R16,y+13
0452 1127 clr R17
0454 0A0D add R16,R10
0456 1B1D adc R17,R11
0458 262E mov R2,R22
045A 3324 clr R3
045C 0219 sub R16,R2
045E 1309 sbc R17,R3
0460 2CDE xcall _lcd_dot
0462 .dbline 224
0462 ; lcd_dot(yCenter + y - d, yCenter - x, mode);
0462 E882 std y+0,R14
0464 2D85 ldd R18,y+13
0466 3327 clr R19
0468 2C19 sub R18,R12
046A 3D09 sbc R19,R13
046C 0D85 ldd R16,y+13
046E 1127 clr R17
0470 0A0D add R16,R10
0472 1B1D adc R17,R11
0474 262E mov R2,R22
0476 3324 clr R3
0478 0219 sub R16,R2
047A 1309 sbc R17,R3
047C 1EDE xcall _lcd_dot
047E .dbline 226
047E ;
047E ; lcd_dot(yCenter - y - d, yCenter + x, mode);
047E E882 std y+0,R14
0480 2D85 ldd R18,y+13
0482 3327 clr R19
0484 2C0D add R18,R12
0486 3D1D adc R19,R13
0488 0D85 ldd R16,y+13
048A 1127 clr R17
048C 0A19 sub R16,R10
048E 1B09 sbc R17,R11
0490 262E mov R2,R22
0492 3324 clr R3
0494 0219 sub R16,R2
0496 1309 sbc R17,R3
0498 10DE xcall _lcd_dot
049A .dbline 227
049A ; lcd_dot(yCenter - y - d, yCenter - x, mode);
049A E882 std y+0,R14
049C 2D85 ldd R18,y+13
049E 3327 clr R19
04A0 2C19 sub R18,R12
04A2 3D09 sbc R19,R13
04A4 0D85 ldd R16,y+13
04A6 1127 clr R17
04A8 0A19 sub R16,R10
04AA 1B09 sbc R17,R11
04AC 262E mov R2,R22
04AE 3324 clr R3
04B0 0219 sub R16,R2
04B2 1309 sbc R17,R3
04B4 02DE xcall _lcd_dot
04B6 .dbline 229
04B6 ;
04B6 ; if (tSwitch<0)
04B6 4030 cpi R20,0
04B8 E0E0 ldi R30,0
04BA 5E07 cpc R21,R30
04BC 54F4 brge L85
04BE .dbline 230
04BE ; tSwitch += (4 * x + 6);
04BE 04E0 ldi R16,4
04C0 10E0 ldi R17,0
04C2 9601 movw R18,R12
04C4 0E940000 xcall empy16s
04C8 C801 movw R24,R16
04CA 0696 adiw R24,6
04CC 480F add R20,R24
04CE 591F adc R21,R25
04D0 0EC0 xjmp L86
04D2 L85:
04D2 .dbline 232
04D2 ; else
04D2 ; { tSwitch += (4 * (x - y) + 10);
04D2 .dbline 232
04D2 9601 movw R18,R12
04D4 2A19 sub R18,R10
04D6 3B09 sbc R19,R11
04D8 04E0 ldi R16,4
04DA 10E0 ldi R17,0
04DC 0E940000 xcall empy16s
04E0 C801 movw R24,R16
04E2 0A96 adiw R24,10
04E4 480F add R20,R24
04E6 591F adc R21,R25
04E8 .dbline 233
04E8 ; y--;
04E8 C501 movw R24,R10
04EA 0197 sbiw R24,1
04EC 5C01 movw R10,R24
04EE .dbline 234
04EE ; }
04EE L86:
04EE .dbline 235
04EE C601 movw R24,R12
04F0 0196 adiw R24,1
04F2 6C01 movw R12,R24
04F4 .dbline 236
04F4 L83:
04F4 .dbline 216
04F4 AC14 cp R10,R12
04F6 BD04 cpc R11,R13
04F8 0CF0 brlt X5
04FA 7DCF xjmp L82
04FC X5:
04FC .dbline -2
04FC L81:
04FC 2196 adiw R28,1
04FE 0E940000 xcall pop_gset5
0502 2496 adiw R28,4
0504 .dbline 0 ; func end
0504 0895 ret
0506 .dbsym r tSwitch 20 I
0506 .dbsym r d 22 c
0506 .dbsym r y 10 I
0506 .dbsym r x 12 I
0506 .dbsym r mode 14 c
0506 .dbsym l radius 15 c
0506 .dbsym l yCenter 13 c
0506 .dbsym l xCenter 11 c
0506 .dbend
0506 .dbfunc e lcd_rect _lcd_rect fV
0506 ; mode -> R14
0506 ; height -> R12
0506 ; width -> R22
0506 ; y -> R20
0506 ; x -> R10
.even
0506 _lcd_rect::
0506 0E940000 xcall push_gset5
050A 422F mov R20,R18
050C A02E mov R10,R16
050E 2597 sbiw R28,5
0510 6F85 ldd R22,y+15
0512 C988 ldd R12,y+17
0514 EB88 ldd R14,y+19
0516 .dbline -1
0516 .dbline 241
0516 ; x++;
0516 ; }
0516 ; }
0516 ;
0516 ;
0516 ; void lcd_rect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t mode)
0516 ; { width--;
0516 .dbline 241
0516 6A95 dec R22
0518 .dbline 242
0518 ; height--;
0518 CA94 dec R12
051A .dbline 243
051A ; lcd_line(x, y, x+width, y, mode); // top
051A EC82 std y+4,R14
051C 4A83 std y+2,R20
051E 2A2C mov R2,R10
0520 260E add R2,R22
0522 2882 std y+0,R2
0524 242F mov R18,R20
0526 0A2D mov R16,R10
0528 0CDE xcall _lcd_line
052A .dbline 244
052A ; lcd_line(x, y, x, y+height, mode); // left
052A EC82 std y+4,R14
052C 242E mov R2,R20
052E 2C0C add R2,R12
0530 2A82 std y+2,R2
0532 A882 std y+0,R10
0534 242F mov R18,R20
0536 0A2D mov R16,R10
0538 04DE xcall _lcd_line
053A .dbline 245
053A ; lcd_line(x, y+height, x+width, y+height, mode); // bottom
053A EC82 std y+4,R14
053C 242E mov R2,R20
053E 2C0C add R2,R12
0540 2A82 std y+2,R2
0542 4A2C mov R4,R10
0544 460E add R4,R22
0546 4882 std y+0,R4
0548 222D mov R18,R2
054A 0A2D mov R16,R10
054C FADD xcall _lcd_line
054E .dbline 246
054E ; lcd_line(x+width, y, x+width, y+height, mode); // right
054E EC82 std y+4,R14
0550 242E mov R2,R20
0552 2C0C add R2,R12
0554 2A82 std y+2,R2
0556 2A2C mov R2,R10
0558 260E add R2,R22
055A 2882 std y+0,R2
055C 242F mov R18,R20
055E 022D mov R16,R2
0560 F0DD xcall _lcd_line
0562 .dbline -2
0562 L87:
0562 2596 adiw R28,5
0564 0E940000 xcall pop_gset5
0568 .dbline 0 ; func end
0568 0895 ret
056A .dbsym r mode 14 c
056A .dbsym r height 12 c
056A .dbsym r width 22 c
056A .dbsym r y 20 c
056A .dbsym r x 10 c
056A .dbend
056A .dbfunc e lcd_box _lcd_box fV
056A ; i -> R20
056A ; mode -> R22
056A ; height -> R10
056A ; width -> R12
056A ; y -> R14
056A ; x -> y+15
.even
056A _lcd_box::
056A 0E940000 xcall push_arg4
056E 0E940000 xcall push_gset5
0572 E22E mov R14,R18
0574 2597 sbiw R28,5
0576 CB88 ldd R12,y+19
0578 AD88 ldd R10,y+21
057A 6F89 ldd R22,y+23
057C .dbline -1
057C .dbline 250
057C ; }
057C ;
057C ; void lcd_box( uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t mode)
057C ; { uint8_t i;
057C .dbline 251
057C ; if (!width) return;
057C CC20 tst R12
057E 09F4 brne L89
0580 .dbline 251
0580 10C0 xjmp L88
0582 L89:
0582 .dbline 253
0582 ;
0582 ; width--;
0582 CA94 dec R12
0584 .dbline 255
0584 ;
0584 ; for (i=y;i<y+height;i++)
0584 4E2D mov R20,R14
0586 09C0 xjmp L94
0588 L91:
0588 .dbline 256
0588 6C83 std y+4,R22
058A 4A83 std y+2,R20
058C 2F84 ldd R2,y+15
058E 2C0C add R2,R12
0590 2882 std y+0,R2
0592 242F mov R18,R20
0594 0F85 ldd R16,y+15
0596 D5DD xcall _lcd_line
0598 L92:
0598 .dbline 255
0598 4395 inc R20
059A L94:
059A .dbline 255
059A 2E2C mov R2,R14
059C 2A0C add R2,R10
059E 4215 cp R20,R2
05A0 98F3 brlo L91
05A2 .dbline -2
05A2 L88:
05A2 2596 adiw R28,5
05A4 0E940000 xcall pop_gset5
05A8 2496 adiw R28,4
05AA .dbline 0 ; func end
05AA 0895 ret
05AC .dbsym r i 20 c
05AC .dbsym r mode 22 c
05AC .dbsym r height 10 c
05AC .dbsym r width 12 c
05AC .dbsym r y 14 c
05AC .dbsym l x 15 c
05AC .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -