📄 gui_basic.s
字号:
; if( (draw_x3>=0)&&(draw_y3<=GUI_LCM_YMAX) )
ldd R24,y+1
ldd R25,y+2
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L128
ldi R24,128
ldi R25,0
ldd R2,y+17
ldd R3,y+18
cp R24,R2
cpc R25,R3
brlt L128
.dbline 461
; { GUI_Point(draw_x3, draw_y3, color);
.dbline 461
ldd R0,y+41
std y+0,R0
movw R18,R2
ldd R16,y+1
ldd R17,y+2
xcall _GUI_Point
.dbline 462
; }
L128:
.dbline 463
; if( (draw_x4<=GUI_LCM_XMAX)&&(draw_y4>=0) )
ldi R24,240
ldi R25,0
ldd R2,y+11
ldd R3,y+12
cp R24,R2
cpc R25,R3
brlt L130
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L130
.dbline 464
; { GUI_Point(draw_x4, draw_y4, color);
.dbline 464
ldd R0,y+41
std y+0,R0
movw R18,R24
movw R16,R2
xcall _GUI_Point
.dbline 465
; }
L130:
.dbline 466
; if( (draw_x5>=0)&&(draw_y5>=0) )
ldd R24,y+13
ldd R25,y+14
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L132
cpi R22,0
ldi R30,0
cpc R23,R30
brlt L132
.dbline 467
; { GUI_Point(draw_x5, draw_y5, color);
.dbline 467
ldd R0,y+41
std y+0,R0
movw R18,R22
movw R16,R24
xcall _GUI_Point
.dbline 468
; }
L132:
.dbline 469
; if( (draw_x6<=GUI_LCM_XMAX)&&(draw_y6<=GUI_LCM_YMAX) )
ldi R24,240
ldi R25,0
ldd R2,y+19
ldd R3,y+20
cp R24,R2
cpc R25,R3
brlt L134
ldi R24,128
ldd R2,y+3
ldd R3,y+4
cp R24,R2
cpc R25,R3
brlt L134
.dbline 470
; { GUI_Point(draw_x6, draw_y6, color);
.dbline 470
ldd R0,y+41
std y+0,R0
movw R18,R2
ldd R16,y+19
ldd R17,y+20
xcall _GUI_Point
.dbline 471
; }
L134:
.dbline 472
; if( (draw_x7>=0)&&(draw_y7<=GUI_LCM_YMAX) )
ldd R24,y+21
ldd R25,y+22
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L136
ldi R24,128
ldi R25,0
ldd R2,y+5
ldd R3,y+6
cp R24,R2
cpc R25,R3
brlt L136
.dbline 473
; { GUI_Point(draw_x7, draw_y7, color);
.dbline 473
ldd R0,y+41
std y+0,R0
movw R18,R2
ldd R16,y+21
ldd R17,y+22
xcall _GUI_Point
.dbline 474
; }
L136:
.dbline 475
L118:
.dbline 421
ldd R2,y+23
ldd R3,y+24
cp R20,R2
cpc R21,R3
brge X8
xjmp L117
X8:
.dbline -2
L104:
adiw R28,29
xcall pop_gset5
.dbline 0 ; func end
ret
.dbsym l di 25 I
.dbsym l yy 23 I
.dbsym l draw_x7 21 I
.dbsym l draw_x6 19 I
.dbsym l draw_y3 17 I
.dbsym l draw_y1 15 I
.dbsym l draw_x5 13 I
.dbsym l draw_x4 11 I
.dbsym l draw_y2 9 I
.dbsym l draw_y0 7 I
.dbsym l draw_y7 5 I
.dbsym l draw_y6 3 I
.dbsym l draw_x3 1 I
.dbsym l draw_x1 27 I
.dbsym r draw_y5 22 I
.dbsym r draw_y4 10 I
.dbsym r draw_x2 12 I
.dbsym r draw_x0 14 I
.dbsym r xx 20 I
.dbsym l color 41 c
.dbsym l r 39 i
.dbsym r y0 20 i
.dbsym r x0 22 i
.dbend
.dbfunc e GUI_CircleFill _GUI_CircleFill fV
; di -> y+33
; yy -> y+31
; draw_x6 -> y+29
; draw_y2 -> y+27
; draw_y0 -> y+25
; draw_x4 -> y+23
; draw_y6 -> y+21
; draw_y3 -> y+19
; draw_y1 -> y+17
; draw_y4 -> y+15
; draw_x2 -> y+13
; draw_x0 -> y+11
; xx -> y+9
; draw_y7 -> y+7
; draw_y5 -> y+5
; draw_x7 -> y+3
; draw_x5 -> R20,R21
; fill_x0 -> R22,R23
; draw_x3 -> R10,R11
; draw_x1 -> y+35
; fill_x1 -> R14,R15
; fill_y0 -> R12,R13
; color -> y+53
; r -> y+51
; y0 -> y+49
; x0 -> y+47
.even
_GUI_CircleFill::
xcall push_arg4
xcall push_gset5
sbiw R28,37
.dbline -1
.dbline 490
; }
; }
;
;
; /****************************************************************************
; * 名称:GUI_CircleFill()
; * 功能:指定圆心位置及半径,画圆并填充,填充色与边框色一样。
; * 入口参数: x0 圆心的x坐标值
; * y0 圆心的y坐标值
; * r 圆的半径
; * color 填充颜色
; * 出口参数:无
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; void GUI_CircleFill(uint32 x0, uint32 y0, uint32 r, TCOLOR color)
; { int32 draw_x0, draw_y0; // 刽图点坐标变量
.dbline 505
; int32 draw_x1, draw_y1;
; int32 draw_x2, draw_y2;
; int32 draw_x3, draw_y3;
; int32 draw_x4, draw_y4;
; int32 draw_x5, draw_y5;
; int32 draw_x6, draw_y6;
; int32 draw_x7, draw_y7;
; int32 fill_x0, fill_y0; // 填充所需的变量,使用垂直线填充
; int32 fill_x1;
; int32 xx, yy; // 画圆控制变量
;
; int32 di; // 决策变量
;
; /* 参数过滤 */
; if(0==r) return;
ldd R0,y+51
ldd R1,y+52
tst R0
brne L139
tst R1
brne L139
X9:
.dbline 505
xjmp L138
L139:
.dbline 508
;
; /* 计算出4个特殊点(0、90、180、270度),进行显示 */
; draw_x0 = draw_x1 = x0;
ldd R0,y+47
ldd R1,y+48
std y+36,R1
std y+35,R0
ldd R0,y+47
ldd R1,y+48
std y+12,R1
std y+11,R0
.dbline 509
; draw_y0 = draw_y1 = y0 + r;
ldd R2,y+49
ldd R3,y+50
ldd R0,y+51
ldd R1,y+52
add R2,R0
adc R3,R1
std y+18,R3
std y+17,R2
std y+26,R3
std y+25,R2
.dbline 510
; if(draw_y0<GUI_LCM_YMAX)
movw R24,R2
cpi R24,128
ldi R30,0
cpc R25,R30
brge L141
.dbline 511
; { GUI_Point(draw_x0, draw_y0, color); // 90度
.dbline 511
ldd R0,y+53
std y+0,R0
movw R18,R24
ldd R16,y+11
ldd R17,y+12
xcall _GUI_Point
.dbline 512
; }
L141:
.dbline 514
;
; draw_x2 = draw_x3 = x0;
ldd R10,y+47
ldd R11,y+48
movw R0,R10
std y+14,R1
std y+13,R0
.dbline 515
; draw_y2 = draw_y3 = y0 - r;
ldd R2,y+49
ldd R3,y+50
ldd R0,y+51
ldd R1,y+52
sub R2,R0
sbc R3,R1
std y+20,R3
std y+19,R2
std y+28,R3
std y+27,R2
.dbline 516
; if(draw_y2>=0)
movw R24,R2
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L143
.dbline 517
; { GUI_Point(draw_x2, draw_y2, color); // 270度
.dbline 517
ldd R0,y+53
std y+0,R0
movw R18,R24
ldd R16,y+13
ldd R17,y+14
xcall _GUI_Point
.dbline 518
; }
L143:
.dbline 520
;
; draw_x4 = draw_x6 = x0 + r;
ldd R2,y+47
ldd R3,y+48
ldd R0,y+51
ldd R1,y+52
add R2,R0
adc R3,R1
std y+30,R3
std y+29,R2
std y+24,R3
std y+23,R2
.dbline 521
; draw_y4 = draw_y6 = y0;
ldd R0,y+49
ldd R1,y+50
std y+22,R1
std y+21,R0
ldd R0,y+49
ldd R1,y+50
std y+16,R1
std y+15,R0
.dbline 522
; if(draw_x4<GUI_LCM_XMAX)
ldd R24,y+23
ldd R25,y+24
cpi R24,240
ldi R30,0
cpc R25,R30
brge L145
.dbline 523
; { GUI_Point(draw_x4, draw_y4, color); // 0度
.dbline 523
ldd R0,y+53
std y+0,R0
ldd R18,y+15
ldd R19,y+16
movw R16,R24
xcall _GUI_Point
.dbline 524
; fill_x1 = draw_x4;
ldd R14,y+23
ldd R15,y+24
.dbline 525
; }
xjmp L146
L145:
.dbline 527
; else
; { fill_x1 = GUI_LCM_XMAX;
.dbline 527
ldi R24,240
ldi R25,0
movw R14,R24
.dbline 528
; }
L146:
.dbline 529
; fill_y0 = y0; // 设置填充线条起始点fill_x0
ldd R12,y+49
ldd R13,y+50
.dbline 530
; fill_x0 = x0 - r; // 设置填充线条结束点fill_y1
ldd R22,y+47
ldd R23,y+48
ldd R0,y+51
ldd R1,y+52
sub R22,R0
sbc R23,R1
.dbline 531
; if(fill_x0<0) fill_x0 = 0;
cpi R22,0
ldi R30,0
cpc R23,R30
brge L147
.dbline 531
clr R22
clr R23
L147:
.dbline 532
; GUI_HLine(fill_x0, fill_y0, fill_x1, color);
ldd R0,y+53
std y+2,R0
std y+1,R15
std y+0,R14
movw R18,R12
movw R16,R22
xcall _GUI_HLine
.dbline 534
;
; draw_x5 = draw_x7 = x0 - r;
ldd R2,y+47
ldd R3,y+48
ldd R0,y+51
ldd R1,y+52
sub R2,R0
sbc R3,R1
std y+4,R3
std y+3,R2
movw R20,R2
.dbline 535
; draw_y5 = draw_y7 = y0;
ldd R0,y+49
ldd R1,y+50
std y+8,R1
std y+7,R0
ldd R0,y+49
ldd R1,y+50
std y+6,R1
std y+5,R0
.dbline 536
; if(draw_x5>=0)
cpi R20,0
ldi R30,0
cpc R21,R30
brlt L149
.dbline 537
; { GUI_Point(draw_x5, draw_y5, color); // 180度
.dbline 537
ldd R0,y+53
std y+0,R0
ldd R18,y+5
ldd R19,y+6
movw R16,R2
xcall _GUI_Point
.dbline 538
; }
L149:
.dbline 539
; if(1==r) return;
ldd R24,y+51
ldd R25,y+52
cpi R24,1
ldi R30,0
cpc R25,R30
brne L151
.dbline 539
xjmp L138
L151:
.dbline 543
;
;
; /* 使用Bresenham法进行画圆 */
; di = 3 - 2*r; // 初始化决策变量
ldi R16,2
ldi R17,0
ldd R18,y+51
ldd R19,y+52
xcall empy16s
ldi R24,3
ldi R25,0
sub R24,R16
sbc R25,R17
std y+34,R25
std y+33,R24
.dbline 545
;
; xx = 0;
clr R2
clr R3
std y+10,R3
std y+9,R2
.dbline 546
; yy = r;
ldd R0,y+51
ldd R1,y+52
std y+32,R1
std y+31,R0
xjmp L154
L153:
.dbline 548
; while(xx<yy)
; { if(di<0)
.dbline 548
ldd R24,y+33
ldd R25,y+34
cpi R24,0
ldi R30,0
cpc R25,R30
brge L156
.dbline 549
; { di += 4*xx + 6;
.dbline 549
ldd R18,y+9
ldd R19,y+10
ldi R16,4
ldi R17,0
xcall empy16s
movw R24,R16
adiw R24,6
ldd R2,y+33
ldd R3,y+34
add R2,R24
adc R3,R25
std y+34,R3
std y+33,R2
.dbline 550
; }
xjmp L157
L156:
.dbline 552
; else
; { di += 4*(xx - yy) + 10;
.dbline 552
ldd R2,y+31
ldd R3,y+32
ldd R18,y+9
ldd R19,y+10
sub R18,R2
sbc R19,R3
ldi R16,4
ldi R17,0
xcall empy16s
movw R24,R16
adiw R24,10
ldd R2,y+33
ldd R3,y+34
add R2,R24
adc R3,R25
std y+34,R3
std y+33,R2
.dbline 554
;
; yy--;
ldd R24,y+31
ldd R25,y+32
sbiw R24,1
std y+32,R25
std y+31,R24
.dbline 555
; draw_y0--;
ldd R24,y+25
ldd R25,y+26
sbiw R24,1
std y+26,R25
std y+25,R24
.dbline 556
; draw_y1--;
ldd R24,y+17
ldd R25,y+18
sbiw R24,1
std y+18,R25
std y+17,R24
.dbline 557
; draw_y2++;
ldd R24,y+27
ldd R25,y+28
adiw R24,1
std y+28,R25
std y+27,R24
.dbline 558
; draw_y3++;
ldd R24,y+19
ldd R25,y+20
adiw R24,1
std y+20,R25
std y+19,R24
.dbline 559
; draw_x4--;
ldd R24,y+23
ldd R25,y+24
sbiw R24,1
std y+24,R25
std y+23,R24
.dbline 560
; draw_x5++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 561
; draw_x6--;
ldd R24,y+29
ldd R25,y+30
sbiw R24,1
std y+30,R25
std y+29,R24
.dbline 562
; draw_x7++;
ldd R24,y+3
ldd R25,y+4
adiw R24,1
std y+4,R25
std y+3,R24
.dbline 563
; }
L157:
.dbline 565
;
; xx++;
ldd R24,y+9
ldd R25,y+10
adiw R24,1
std y+10,R25
std y+9,R24
.dbline 566
; draw_x0++;
ldd R24,y+11
ldd R25,y+12
adiw R24,1
std y+12,R25
std y+11,R24
.dbline 567
; draw_x1--;
ldd R24,y+35
ldd R25,y+36
sbiw R24,1
std y+36,R25
std y+35,R24
.dbline 568
; draw_x2++;
ldd R24,y+13
ldd R25,y+14
adiw R24,1
std y+14,R25
std y+13,R24
.dbline 569
; draw_x3--;
movw R24,R10
sbiw R24,1
movw R10,R24
.dbline 570
; draw_y4++;
ldd R24,y+15
ldd R25,y+16
adiw R24,1
std y+16,R25
std y+15,R24
.dbline 571
; draw_y5++;
ldd R24,y+5
ldd R25,y+6
adiw R24,1
std y+6,R25
std y+5,R24
.dbline 572
; draw_y6--;
ldd R24,y+21
ldd R25,y+22
sbiw R24,1
std y+22,R25
std y+21,R24
.dbline 573
; draw_y7--;
ldd R24,y+7
ldd R25,y+8
sbiw R24,1
std y+8,R25
std y+7,R24
.dbline 577
;
;
; /* 要判断当前点是否在有效范围内 */
; if( (draw_x0<=GUI_LCM_XMAX)&&(draw_y0>=0) )
ldi R24,240
ldi R25,0
ldd R2,y+11
ldd R3,y+12
cp R24,R2
cpc R25,R3
brlt L158
ldd R24,y+25
ldd R25,y+26
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L158
.dbline 578
; { GUI_Point(draw_x0, draw_y0, color);
.dbline 578
ldd R0,y+53
std y+0,R0
movw R18,R24
movw R16,R2
xcall _GUI_Point
.dbline 579
; }
L158:
.dbline 580
; if( (draw_x1>=0)&&(draw_y1>=0) )
ldd R24,y+35
ldd R25,y+36
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L160
ldd R24,y+17
ldd R25,y+18
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L160
.dbline 581
; { GUI_Point(draw_x1, draw_y1, color);
.dbline 581
ldd R0,y+53
std y+0,R0
movw R18,R24
ldd R16,y+35
ldd R17,y+36
xcall _GUI_Point
.dbline 582
; }
L160:
.dbline 585
;
; /* 第二点水直线填充(下半圆的点) */
; if(draw_x1>=0)
ldd R24,y+35
ldd R25,y+36
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L162
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -