📄 1335.lis
字号:
0556 .dbsym r tx 14 I
0556 .dbsym r fy 12 I
0556 .dbsym r fx 10 I
0556 .dbsym l show 23 c
0556 .dbsym r outer_radius 22 I
0556 .dbsym r inner_radius 12 I
0556 .dbsym r degree 20 I
0556 .dbsym l y 15 I
0556 .dbsym r x 14 I
0556 .dbend
0556 .dbfunc e lcd_circle _lcd_circle fV
0556 ; p -> R12,R13
0556 ; yc -> R22,R23
0556 ; xc -> R20,R21
0556 ; show -> R10
0556 ; radius -> R12,R13
0556 ; y -> y+13
0556 ; x -> y+11
.even
0556 _lcd_circle::
0556 0E940000 xcall push_arg4
055A 0E940000 xcall push_xgsetF0FC
055E 2197 sbiw R28,1
0560 CF84 ldd R12,y+15
0562 D888 ldd R13,y+16
0564 A988 ldd R10,y+17
0566 .dbline -1
0566 .dbline 321
0566 ; }
0566 ;
0566 ;
0566 ; /***********************************************************************
0566 ; Draws a circle with center at x,y with given radius.
0566 ; Set show to 1 to draw pixel, set to 0 to hide pixel.
0566 ; ***********************************************************************/
0566 ; void lcd_circle(int x, int y, int radius, unsigned char show)
0566 ; {
0566 .dbline 322
0566 ; int xc = 0;
0566 4427 clr R20
0568 5527 clr R21
056A .dbline 323
056A ; int yc = radius;
056A B601 movw R22,R12
056C .dbline 324
056C ; int p = 3 - (radius<<1);
056C 1601 movw R2,R12
056E 220C lsl R2
0570 331C rol R3
0572 83E0 ldi R24,3
0574 90E0 ldi R25,0
0576 6C01 movw R12,R24
0578 C218 sub R12,R2
057A D308 sbc R13,R3
057C 71C0 xjmp L61
057E L60:
057E .dbline 326
057E ; while (xc <= yc)
057E ; {
057E .dbline 327
057E ; lcd_pixel(x + xc, y + yc, show);
057E A882 std y+0,R10
0580 2D85 ldd R18,y+13
0582 3E85 ldd R19,y+14
0584 260F add R18,R22
0586 371F adc R19,R23
0588 0B85 ldd R16,y+11
058A 1C85 ldd R17,y+12
058C 040F add R16,R20
058E 151F adc R17,R21
0590 37DE xcall _lcd_pixel
0592 .dbline 328
0592 ; lcd_pixel(x + xc, y - yc, show);
0592 A882 std y+0,R10
0594 2D85 ldd R18,y+13
0596 3E85 ldd R19,y+14
0598 261B sub R18,R22
059A 370B sbc R19,R23
059C 0B85 ldd R16,y+11
059E 1C85 ldd R17,y+12
05A0 040F add R16,R20
05A2 151F adc R17,R21
05A4 2DDE xcall _lcd_pixel
05A6 .dbline 329
05A6 ; lcd_pixel(x - xc, y + yc, show);
05A6 A882 std y+0,R10
05A8 2D85 ldd R18,y+13
05AA 3E85 ldd R19,y+14
05AC 260F add R18,R22
05AE 371F adc R19,R23
05B0 0B85 ldd R16,y+11
05B2 1C85 ldd R17,y+12
05B4 041B sub R16,R20
05B6 150B sbc R17,R21
05B8 23DE xcall _lcd_pixel
05BA .dbline 330
05BA ; lcd_pixel(x - xc, y - yc, show);
05BA A882 std y+0,R10
05BC 2D85 ldd R18,y+13
05BE 3E85 ldd R19,y+14
05C0 261B sub R18,R22
05C2 370B sbc R19,R23
05C4 0B85 ldd R16,y+11
05C6 1C85 ldd R17,y+12
05C8 041B sub R16,R20
05CA 150B sbc R17,R21
05CC 19DE xcall _lcd_pixel
05CE .dbline 331
05CE ; lcd_pixel(x + yc, y + xc, show);
05CE A882 std y+0,R10
05D0 2D85 ldd R18,y+13
05D2 3E85 ldd R19,y+14
05D4 240F add R18,R20
05D6 351F adc R19,R21
05D8 0B85 ldd R16,y+11
05DA 1C85 ldd R17,y+12
05DC 060F add R16,R22
05DE 171F adc R17,R23
05E0 0FDE xcall _lcd_pixel
05E2 .dbline 332
05E2 ; lcd_pixel(x + yc, y - xc, show);
05E2 A882 std y+0,R10
05E4 2D85 ldd R18,y+13
05E6 3E85 ldd R19,y+14
05E8 241B sub R18,R20
05EA 350B sbc R19,R21
05EC 0B85 ldd R16,y+11
05EE 1C85 ldd R17,y+12
05F0 060F add R16,R22
05F2 171F adc R17,R23
05F4 05DE xcall _lcd_pixel
05F6 .dbline 333
05F6 ; lcd_pixel(x - yc, y + xc, show);
05F6 A882 std y+0,R10
05F8 2D85 ldd R18,y+13
05FA 3E85 ldd R19,y+14
05FC 240F add R18,R20
05FE 351F adc R19,R21
0600 0B85 ldd R16,y+11
0602 1C85 ldd R17,y+12
0604 061B sub R16,R22
0606 170B sbc R17,R23
0608 FBDD xcall _lcd_pixel
060A .dbline 334
060A ; lcd_pixel(x - yc, y - xc, show);
060A A882 std y+0,R10
060C 2D85 ldd R18,y+13
060E 3E85 ldd R19,y+14
0610 241B sub R18,R20
0612 350B sbc R19,R21
0614 0B85 ldd R16,y+11
0616 1C85 ldd R17,y+12
0618 061B sub R16,R22
061A 170B sbc R17,R23
061C F1DD xcall _lcd_pixel
061E .dbline 335
061E ; if (p < 0)
061E C601 movw R24,R12
0620 8030 cpi R24,0
0622 E0E0 ldi R30,0
0624 9E07 cpc R25,R30
0626 64F4 brge L63
0628 X12:
0628 .dbline 336
0628 ; p += (xc++ << 2) + 6;
0628 1A01 movw R2,R20
062A 4F5F subi R20,255 ; offset = 1
062C 5F4F sbci R21,255
062E C101 movw R24,R2
0630 880F lsl R24
0632 991F rol R25
0634 880F lsl R24
0636 991F rol R25
0638 0696 adiw R24,6
063A C80E add R12,R24
063C D91E adc R13,R25
063E 10C0 xjmp L64
0640 L63:
0640 .dbline 338
0640 ; else
0640 ; p += ((xc++ - yc--)<<2) + 10;
0640 1A01 movw R2,R20
0642 4F5F subi R20,255 ; offset = 1
0644 5F4F sbci R21,255
0646 7B01 movw R14,R22
0648 6150 subi R22,1
064A 7040 sbci R23,0
064C C101 movw R24,R2
064E 8E19 sub R24,R14
0650 9F09 sbc R25,R15
0652 880F lsl R24
0654 991F rol R25
0656 880F lsl R24
0658 991F rol R25
065A 0A96 adiw R24,10
065C C80E add R12,R24
065E D91E adc R13,R25
0660 L64:
0660 .dbline 339
0660 ; }
0660 L61:
0660 .dbline 325
0660 6417 cp R22,R20
0662 7507 cpc R23,R21
0664 0CF0 brlt X14
0666 8BCF xjmp L60
0668 X14:
0668 X13:
0668 .dbline -2
0668 L59:
0668 .dbline 0 ; func end
0668 2196 adiw R28,1
066A 0E940000 xcall pop_xgsetF0FC
066E 2496 adiw R28,4
0670 0895 ret
0672 .dbsym r p 12 I
0672 .dbsym r yc 22 I
0672 .dbsym r xc 20 I
0672 .dbsym r show 10 c
0672 .dbsym r radius 12 I
0672 .dbsym l y 13 I
0672 .dbsym l x 11 I
0672 .dbend
0672 .dbfunc e lcd_line _lcd_line fV
0672 ; stepy -> R12,R13
0672 ; stepx -> R14,R15
0672 ; dx -> R22,R23
0672 ; dy -> R20,R21
0672 ; fraction -> R10,R11
0672 ; show -> y+19
0672 ; y2 -> y+17
0672 ; x2 -> y+15
0672 ; y1 -> y+13
0672 ; x1 -> y+11
.even
0672 _lcd_line::
0672 0E940000 xcall push_arg4
0676 0E940000 xcall push_xgsetF0FC
067A 2197 sbiw R28,1
067C .dbline -1
067C .dbline 348
067C ; }
067C ;
067C ;
067C ; /***********************************************************************
067C ; Draws a line from x1,y1 go x2,y2. Line can be drawn in any direction.
067C ; Set show to 1 to draw pixel, set to 0 to hide pixel.
067C ; ***********************************************************************/
067C ; void lcd_line(int x1, int y1, int x2, int y2, unsigned char show)
067C ; {
067C .dbline 349
067C ; int dy = y2 - y1;
067C 4989 ldd R20,y+17
067E 5A89 ldd R21,y+18
0680 0D84 ldd R0,y+13
0682 1E84 ldd R1,y+14
0684 4019 sub R20,R0
0686 5109 sbc R21,R1
0688 .dbline 350
0688 ; int dx = x2 - x1;
0688 6F85 ldd R22,y+15
068A 7889 ldd R23,y+16
068C 0B84 ldd R0,y+11
068E 1C84 ldd R1,y+12
0690 6019 sub R22,R0
0692 7109 sbc R23,R1
0694 .dbline 352
0694 ; int stepx, stepy, fraction;
0694 ; if (dy < 0)
0694 4030 cpi R20,0
0696 E0E0 ldi R30,0
0698 5E07 cpc R21,R30
069A 44F4 brge L66
069C X15:
069C .dbline 353
069C ; {
069C .dbline 354
069C ; dy = -dy;
069C 4095 com R20
069E 5095 com R21
06A0 4F5F subi R20,0xFF
06A2 5F4F sbci R21,0xFF
06A4 .dbline 355
06A4 ; stepy = -1;
06A4 8FEF ldi R24,-1
06A6 9FEF ldi R25,-1
06A8 6C01 movw R12,R24
06AA .dbline 356
06AA ; }
06AA 03C0 xjmp L67
06AC L66:
06AC .dbline 358
06AC ; else
06AC ; {
06AC .dbline 359
06AC ; stepy = 1;
06AC 81E0 ldi R24,1
06AE 90E0 ldi R25,0
06B0 6C01 movw R12,R24
06B2 .dbline 360
06B2 ; }
06B2 L67:
06B2 .dbline 361
06B2 ; if (dx < 0)
06B2 6030 cpi R22,0
06B4 E0E0 ldi R30,0
06B6 7E07 cpc R23,R30
06B8 44F4 brge L68
06BA X16:
06BA .dbline 362
06BA ; {
06BA .dbline 363
06BA ; dx = -dx;
06BA 6095 com R22
06BC 7095 com R23
06BE 6F5F subi R22,0xFF
06C0 7F4F sbci R23,0xFF
06C2 .dbline 364
06C2 ; stepx = -1;
06C2 8FEF ldi R24,-1
06C4 9FEF ldi R25,-1
06C6 7C01 movw R14,R24
06C8 .dbline 365
06C8 ; }
06C8 03C0 xjmp L69
06CA L68:
06
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -