📄 gui_basic.s
字号:
.dbline 586
; { /* 设置填充线条起始点fill_x0 */
.dbline 587
; fill_x0 = draw_x1;
movw R22,R24
.dbline 589
; /* 设置填充线条起始点fill_y0 */
; fill_y0 = draw_y1;
ldd R12,y+17
ldd R13,y+18
.dbline 590
; if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
ldi R24,128
ldi R25,0
cp R24,R12
cpc R25,R13
brge L164
.dbline 590
movw R12,R24
L164:
.dbline 591
; if(fill_y0<0) fill_y0 = 0;
movw R24,R12
cpi R24,0
ldi R30,0
cpc R25,R30
brge L166
.dbline 591
clr R12
clr R13
L166:
.dbline 593
; /* 设置填充线条结束点fill_x1 */
; fill_x1 = x0*2 - draw_x1;
ldi R16,2
ldi R17,0
ldd R18,y+47
ldd R19,y+48
xcall empy16s
movw R14,R16
ldd R0,y+35
ldd R1,y+36
sub R14,R0
sbc R15,R1
.dbline 594
; if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
ldi R24,240
ldi R25,0
cp R24,R14
cpc R25,R15
brge L168
.dbline 594
movw R14,R24
L168:
.dbline 595
; 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 596
; }
L162:
.dbline 599
;
;
; if( (draw_x2<=GUI_LCM_XMAX)&&(draw_y2<=GUI_LCM_YMAX) )
ldi R24,240
ldi R25,0
ldd R2,y+13
ldd R3,y+14
cp R24,R2
cpc R25,R3
brlt L170
ldi R24,128
ldd R2,y+27
ldd R3,y+28
cp R24,R2
cpc R25,R3
brlt L170
.dbline 600
; { GUI_Point(draw_x2, draw_y2, color);
.dbline 600
ldd R0,y+53
std y+0,R0
movw R18,R2
ldd R16,y+13
ldd R17,y+14
xcall _GUI_Point
.dbline 601
; }
L170:
.dbline 603
;
; if( (draw_x3>=0)&&(draw_y3<=GUI_LCM_YMAX) )
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L172
ldi R24,128
ldi R25,0
ldd R2,y+19
ldd R3,y+20
cp R24,R2
cpc R25,R3
brlt L172
.dbline 604
; { GUI_Point(draw_x3, draw_y3, color);
.dbline 604
ldd R0,y+53
std y+0,R0
movw R18,R2
movw R16,R10
xcall _GUI_Point
.dbline 605
; }
L172:
.dbline 608
;
; /* 第四点垂直线填充(上半圆的点) */
; if(draw_x3>=0)
movw R24,R10
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L174
.dbline 609
; { /* 设置填充线条起始点fill_x0 */
.dbline 610
; fill_x0 = draw_x3;
movw R22,R24
.dbline 612
; /* 设置填充线条起始点fill_y0 */
; fill_y0 = draw_y3;
ldd R12,y+19
ldd R13,y+20
.dbline 613
; if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
ldi R24,128
ldi R25,0
cp R24,R12
cpc R25,R13
brge L176
.dbline 613
movw R12,R24
L176:
.dbline 614
; if(fill_y0<0) fill_y0 = 0;
movw R24,R12
cpi R24,0
ldi R30,0
cpc R25,R30
brge L178
.dbline 614
clr R12
clr R13
L178:
.dbline 616
; /* 设置填充线条结束点fill_x1 */
; fill_x1 = x0*2 - draw_x3;
ldi R16,2
ldi R17,0
ldd R18,y+47
ldd R19,y+48
xcall empy16s
movw R14,R16
sub R14,R10
sbc R15,R11
.dbline 617
; if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
ldi R24,240
ldi R25,0
cp R24,R14
cpc R25,R15
brge L180
.dbline 617
movw R14,R24
L180:
.dbline 618
; 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 619
; }
L174:
.dbline 622
;
;
; if( (draw_x4<=GUI_LCM_XMAX)&&(draw_y4>=0) )
ldi R24,240
ldi R25,0
ldd R2,y+23
ldd R3,y+24
cp R24,R2
cpc R25,R3
brlt L182
ldd R24,y+15
ldd R25,y+16
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L182
.dbline 623
; { GUI_Point(draw_x4, draw_y4, color);
.dbline 623
ldd R0,y+53
std y+0,R0
movw R18,R24
movw R16,R2
xcall _GUI_Point
.dbline 624
; }
L182:
.dbline 625
; if( (draw_x5>=0)&&(draw_y5>=0) )
cpi R20,0
ldi R30,0
cpc R21,R30
brlt L184
ldd R24,y+5
ldd R25,y+6
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L184
.dbline 626
; { GUI_Point(draw_x5, draw_y5, color);
.dbline 626
ldd R0,y+53
std y+0,R0
movw R18,R24
movw R16,R20
xcall _GUI_Point
.dbline 627
; }
L184:
.dbline 630
;
; /* 第六点垂直线填充(上半圆的点) */
; if(draw_x5>=0)
cpi R20,0
ldi R30,0
cpc R21,R30
brlt L186
.dbline 631
; { /* 设置填充线条起始点fill_x0 */
.dbline 632
; fill_x0 = draw_x5;
movw R22,R20
.dbline 634
; /* 设置填充线条起始点fill_y0 */
; fill_y0 = draw_y5;
ldd R12,y+5
ldd R13,y+6
.dbline 635
; if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
ldi R24,128
ldi R25,0
cp R24,R12
cpc R25,R13
brge L188
.dbline 635
movw R12,R24
L188:
.dbline 636
; if(fill_y0<0) fill_y0 = 0;
movw R24,R12
cpi R24,0
ldi R30,0
cpc R25,R30
brge L190
.dbline 636
clr R12
clr R13
L190:
.dbline 638
; /* 设置填充线条结束点fill_x1 */
; fill_x1 = x0*2 - draw_x5;
ldi R16,2
ldi R17,0
ldd R18,y+47
ldd R19,y+48
xcall empy16s
movw R14,R16
sub R14,R20
sbc R15,R21
.dbline 639
; if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
ldi R24,240
ldi R25,0
cp R24,R14
cpc R25,R15
brge L192
.dbline 639
movw R14,R24
L192:
.dbline 640
; 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 641
; }
L186:
.dbline 644
;
;
; if( (draw_x6<=GUI_LCM_XMAX)&&(draw_y6<=GUI_LCM_YMAX) )
ldi R24,240
ldi R25,0
ldd R2,y+29
ldd R3,y+30
cp R24,R2
cpc R25,R3
brlt L194
ldi R24,128
ldd R2,y+21
ldd R3,y+22
cp R24,R2
cpc R25,R3
brlt L194
.dbline 645
; { GUI_Point(draw_x6, draw_y6, color);
.dbline 645
ldd R0,y+53
std y+0,R0
movw R18,R2
ldd R16,y+29
ldd R17,y+30
xcall _GUI_Point
.dbline 646
; }
L194:
.dbline 648
;
; if( (draw_x7>=0)&&(draw_y7<=GUI_LCM_YMAX) )
ldd R24,y+3
ldd R25,y+4
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L196
ldi R24,128
ldi R25,0
ldd R2,y+7
ldd R3,y+8
cp R24,R2
cpc R25,R3
brlt L196
.dbline 649
; { GUI_Point(draw_x7, draw_y7, color);
.dbline 649
ldd R0,y+53
std y+0,R0
movw R18,R2
ldd R16,y+3
ldd R17,y+4
xcall _GUI_Point
.dbline 650
; }
L196:
.dbline 653
;
; /* 第八点垂直线填充(上半圆的点) */
; if(draw_x7>=0)
ldd R24,y+3
ldd R25,y+4
cpi R24,0
ldi R30,0
cpc R25,R30
brlt L198
.dbline 654
; { /* 设置填充线条起始点fill_x0 */
.dbline 655
; fill_x0 = draw_x7;
movw R22,R24
.dbline 657
; /* 设置填充线条起始点fill_y0 */
; fill_y0 = draw_y7;
ldd R12,y+7
ldd R13,y+8
.dbline 658
; if(fill_y0>GUI_LCM_YMAX) fill_y0 = GUI_LCM_YMAX;
ldi R24,128
ldi R25,0
cp R24,R12
cpc R25,R13
brge L200
.dbline 658
movw R12,R24
L200:
.dbline 659
; if(fill_y0<0) fill_y0 = 0;
movw R24,R12
cpi R24,0
ldi R30,0
cpc R25,R30
brge L202
.dbline 659
clr R12
clr R13
L202:
.dbline 661
; /* 设置填充线条结束点fill_x1 */
; fill_x1 = x0*2 - draw_x7;
ldi R16,2
ldi R17,0
ldd R18,y+47
ldd R19,y+48
xcall empy16s
movw R14,R16
ldd R2,y+3
ldd R3,y+4
sub R14,R2
sbc R15,R3
.dbline 662
; if(fill_x1>GUI_LCM_XMAX) fill_x1 = GUI_LCM_XMAX;
ldi R24,240
ldi R25,0
cp R24,R14
cpc R25,R15
brge L204
.dbline 662
movw R14,R24
L204:
.dbline 663
; 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 664
; }
L198:
.dbline 666
L154:
.dbline 547
ldd R2,y+31
ldd R3,y+32
ldd R4,y+9
ldd R5,y+10
cp R4,R2
cpc R5,R3
brge X10
xjmp L153
X10:
.dbline -2
L138:
adiw R28,37
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l di 33 I
.dbsym l yy 31 I
.dbsym l draw_x6 29 I
.dbsym l draw_y2 27 I
.dbsym l draw_y0 25 I
.dbsym l draw_x4 23 I
.dbsym l draw_y6 21 I
.dbsym l draw_y3 19 I
.dbsym l draw_y1 17 I
.dbsym l draw_y4 15 I
.dbsym l draw_x2 13 I
.dbsym l draw_x0 11 I
.dbsym l xx 9 I
.dbsym l draw_y7 7 I
.dbsym l draw_y5 5 I
.dbsym l draw_x7 3 I
.dbsym r draw_x5 20 I
.dbsym r fill_x0 22 I
.dbsym r draw_x3 10 I
.dbsym l draw_x1 35 I
.dbsym r fill_x1 14 I
.dbsym r fill_y0 12 I
.dbsym l color 53 c
.dbsym l r 51 i
.dbsym l y0 49 i
.dbsym l x0 47 i
.dbend
.dbfunc e GUI_Ellipse _GUI_Ellipse fV
; center_x -> y+27
; radius_x -> y+25
; center_y -> y+23
; radius_y -> y+21
; radius_yy2 -> y+19
; radius_xx -> y+17
; radius_xx2 -> y+15
; radius_yy -> y+13
; draw_y3 -> y+11
; draw_x3 -> y+9
; draw_y1 -> y+7
; draw_x1 -> y+5
; draw_y2 -> y+3
; draw_x2 -> y+1
; draw_y0 -> R20,R21
; draw_x0 -> R22,R23
; di -> R10,R11
; xx -> R12,R13
; yy -> R14,R15
; color -> y+43
; y1 -> R22,R23
; y0 -> R20,R21
; x1 -> R12,R13
; x0 -> R10,R11
.even
_GUI_Ellipse::
xcall push_gset5
movw R12,R18
movw R10,R16
sbiw R28,29
ldd R20,y+39
ldd R21,y+40
ldd R22,y+41
ldd R23,y+42
.dbline -1
.dbline 687
;
; }
; }
; #endif
;
;
;
;
; #if GUI_EllipseX_EN==1
; /****************************************************************************
; * 名称:GUI_Ellipse()
; * 功能:画正椭圆。给定椭圆的四个点的参数,最左、最右点的x轴坐标值为x0、x1,最上、最下点
; * 的y轴坐标为y0、y1。
; * 入口参数: x0 最左点的x坐标值
; * x1 最右点的x坐标值
; * y0 最上点的y坐标值
; * y1 最下点的y坐标值
; * color 显示颜色
; * 出口参数:无
; * 说明:操作失败原因是指定地址超出有效范围。
; ****************************************************************************/
; void GUI_Ellipse(uint32 x0, uint32 x1, uint32 y0, uint32 y1, TCOLOR color)
; { int32 draw_x0, draw_y0; // 刽图点坐标变量
.dbline 700
cp R10,R12
cpc R11,R13
breq L209
cp R20,R22
cpc R21,R23
brne L207
L209:
.dbline 700
; int32 draw_x1, draw_y1;
; int32 draw_x2, draw_y2;
; int32 draw_x3, draw_y3;
; int32 xx, yy; // 画图控制变量
;
; int32 center_x, center_y; // 椭圆中心点坐标变量
; int32 radius_x, radius_y; // 椭圆的半径,x轴半径和y轴半径
; int32 radius_xx, radius_yy; // 半径乘平方值
; int32 radius_xx2, radius_yy2; // 半径乘平方值的两倍
; int32 di; // 定义决策变量
;
; /* 参数过滤 */
; if( (x0==x1) || (y0==y1) ) return;
xjmp L206
L207:
.dbline 703
;
; /* 计算出椭圆中心点坐标 */
; center_x = (x0 + x1) >> 1;
movw R2,R10
add R2,R12
adc R3,R13
lsr R3
ror R2
std y+28,R3
std y+27,R2
.dbline 704
; center_y = (y0 + y1) >> 1;
movw R2,R20
add R2,R22
adc R3,R23
lsr R3
ror R2
std y+24,R3
std y+23,R2
.dbline 707
;
; /* 计算出椭圆的半径,x轴半径和y轴半径 */
; if(x0 > x1)
cp R12,R10
cpc R13,R11
brsh L210
.dbline 708
; { radius_x = (x0 - x1) >> 1;
.dbline 708
movw R2,R10
sub R2,R12
sbc R3,R13
lsr R3
ror R2
std y+26,R3
std y+25,R2
.dbline 709
; }
xjmp L211
L210:
.dbline 711
; else
; { radius_x = (x1 - x0) >> 1;
.dbline 711
movw R2,R12
sub R2,R10
sbc R3,R11
lsr R3
ror R2
std y+26,R3
std y+25,R2
.dbline 712
; }
L211:
.dbline 713
; if(y0 > y1)
cp R22,R20
cpc R23,R21
brsh L212
.dbline 714
; { radius_y = (y0 - y1) >> 1;
.dbline 714
movw R2,R20
sub R2,R22
sbc R3,R23
lsr R3
ror R2
std y+22,R3
std y+21,R2
.dbline 715
; }
xjmp L213
L212:
.dbline 717
; else
; { radius_y = (y1 - y0) >> 1;
.dbline 717
movw R2,R22
sub R2,R20
sbc R3,R21
lsr R3
ror R2
std y+22,R3
std y+21,R2
.dbline 718
; }
L213:
.dbline 721
;
; /* 计算半径平方值 */
; radius_xx = radius_x * radius_x;
ldd R18,y+25
ldd R19,y+26
movw R16,R18
xcall empy16s
std y+18,R17
std y+17,R16
.dbline 722
; radius_yy = radius_y * radius_y;
ldd R18,y+21
ldd R19,y+22
movw R16,R18
xcall empy16s
std y+14,R17
std y+13,R16
.dbline 725
;
; /* 计算半径平方值乘2值 */
; radius_xx2 = radius_xx<<1;
ldd R2,y+17
ldd R3,y+18
lsl R2
rol R3
std y+16,R3
std y+15,R2
.dbline 726
; radius_yy2 = radius_yy<<1;
ldd R2,y+13
ldd R3,y+14
lsl R2
rol R3
std y+20,R3
std y+19,R2
.dbline 729
;
; /* 初始化画图变量 */
; xx = 0;
clr R12
clr R13
.dbline 730
; yy = radius_y;
ldd R14,y+21
ldd R15,y+22
.dbline 732
;
; di = radius_yy2 + radius_xx - radius_xx2*radius_y ; // 初始化决策变量
movw R18,R14
ldd R16,y+15
ldd R17,y+16
xcall empy16s
ldd R2,y+17
ldd R3,y+18
ldd R10,y+19
ldd R11,y+20
add R10,R2
adc R11,R3
sub R10,R16
sbc R11,R17
.dbline 735
;
; /* 计算出椭圆y轴上的两个端点坐标,作为作图起点 */
; draw_x0 = draw_x1 = draw_x2 = draw_x3 = center_x;
ldd R2,y+27
ldd R3,y+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -