📄 gui.lis
字号:
00EA L16:
00EA .dbline 107
00EA ; if(y0>y1) // 若y0>y1,则y0与y1交换
00EA 6C15 cp R22,R12
00EC 80F4 brsh L18
00EE .dbline 108
00EE ; {
00EE .dbline 109
00EE ; i = y0;
00EE 2C2C mov R2,R12
00F0 3324 clr R3
00F2 4424 clr R4
00F4 5524 clr R5
00F6 FE01 movw R30,R28
00F8 2382 std z+3,R2
00FA 3482 std z+4,R3
00FC 4582 std z+5,R4
00FE 5682 std z+6,R5
0100 .dbline 110
0100 ; y0 = y1;
0100 C62E mov R12,R22
0102 .dbline 111
0102 ; y1 = i;
0102 FE01 movw R30,R28
0104 2380 ldd R2,z+3
0106 3480 ldd R3,z+4
0108 4580 ldd R4,z+5
010A 5680 ldd R5,z+6
010C 622D mov R22,R2
010E .dbline 112
010E ; }
010E L18:
010E .dbline 115
010E ;
010E ; /* 判断是否只是直线 */
010E ; if(y0==y1)
010E C616 cp R12,R22
0110 39F4 brne L20
0112 .dbline 116
0112 ; {
0112 .dbline 117
0112 ; GUI_HLine(x0, y0, x1, color);
0112 4A83 std y+2,R20
0114 B982 std y+1,R11
0116 A882 std y+0,R10
0118 2C2D mov R18,R12
011A 8701 movw R16,R14
011C 71DF xcall _GUI_HLine
011E .dbline 118
011E ; return;
011E 12C0 xjmp L15
0120 L20:
0120 .dbline 120
0120 ; }
0120 ; if(x0==x1)
0120 EA14 cp R14,R10
0122 FB04 cpc R15,R11
0124 69F4 brne L25
0126 .dbline 121
0126 ; {
0126 .dbline 122
0126 ; GUI_RLine(x0, y0, y1, color);
0126 4A83 std y+2,R20
0128 6883 std y+0,R22
012A 2C2D mov R18,R12
012C 8701 movw R16,R14
012E 86DF xcall _GUI_RLine
0130 .dbline 123
0130 ; return;
0130 09C0 xjmp L15
0132 L24:
0132 .dbline 127
0132 .dbline 128
0132 4A83 std y+2,R20
0134 B982 std y+1,R11
0136 A882 std y+0,R10
0138 2C2D mov R18,R12
013A 8701 movw R16,R14
013C 61DF xcall _GUI_HLine
013E .dbline 129
013E C394 inc R12
0140 .dbline 130
0140 L25:
0140 .dbline 126
0140 ; }
0140 ;
0140 ; while(y0<=y1)
0140 6C15 cp R22,R12
0142 B8F7 brsh L24
0144 .dbline -2
0144 L15:
0144 2796 adiw R28,7
0146 0E940000 xcall pop_gset5
014A .dbline 0 ; func end
014A 0895 ret
014C .dbsym l i 3 l
014C .dbsym r color 20 c
014C .dbsym r y1 22 c
014C .dbsym r x1 10 i
014C .dbsym r y0 12 c
014C .dbsym r x0 14 i
014C .dbend
014C .dbfunc e GUI_Square _GUI_Square fV
014C ; color -> y+21
014C ; with -> y+17
014C ; y0 -> y+13
014C ; x0 -> y+9
.even
014C _GUI_Square::
014C 0E940000 xcall push_arg4
0150 0E940000 xcall push_gset2
0154 2597 sbiw R28,5
0156 .dbline -1
0156 .dbline 144
0156 ; {
0156 ; GUI_HLine(x0, y0, x1, color); // 当前画水平线
0156 ; y0++; // 下一行
0156 ; }
0156 ; }
0156 ;
0156 ; /****************************************************************************
0156 ; * 名称:GUI_Square()
0156 ; * 功能:画正方形。
0156 ; * 入口参数:x0 正方形左上角的x坐标值
0156 ; * y0 正方形左上角的y坐标值
0156 ; * with 正方形的边长
0156 ; * color 显示颜色
0156 ; * 出口参数:无
0156 ; * 说明:操作失败原因是指定地址超出有效范围。
0156 ; ****************************************************************************/
0156 ; void GUI_Square(uint32 x0, uint32 y0, uint32 with, TCOLOR color)
0156 ; {
0156 .dbline 145
0156 ; if(with==0)
0156 40E0 ldi R20,0
0158 50E0 ldi R21,0
015A 60E0 ldi R22,0
015C 70E0 ldi R23,0
015E FE01 movw R30,R28
0160 2188 ldd R2,z+17
0162 3288 ldd R3,z+18
0164 4388 ldd R4,z+19
0166 5488 ldd R5,z+20
0168 2416 cp R2,R20
016A 3506 cpc R3,R21
016C 4606 cpc R4,R22
016E 5706 cpc R5,R23
0170 09F4 brne L28
0172 .dbline 146
0172 ; return;
0172 55C0 xjmp L27
0174 L28:
0174 .dbline 147
0174 ; if( (x0+with) > GUI_LCM_XMAX )
0174 FE01 movw R30,R28
0176 2188 ldd R2,z+17
0178 3288 ldd R3,z+18
017A 4388 ldd R4,z+19
017C 5488 ldd R5,z+20
017E FE01 movw R30,R28
0180 6184 ldd R6,z+9
0182 7284 ldd R7,z+10
0184 8384 ldd R8,z+11
0186 9484 ldd R9,z+12
0188 620C add R6,R2
018A 731C adc R7,R3
018C 841C adc R8,R4
018E 951C adc R9,R5
0190 40E8 ldi R20,128
0192 50E0 ldi R21,0
0194 60E0 ldi R22,0
0196 70E0 ldi R23,0
0198 4615 cp R20,R6
019A 5705 cpc R21,R7
019C 6805 cpc R22,R8
019E 7905 cpc R23,R9
01A0 08F4 brsh L30
01A2 .dbline 148
01A2 ; return;
01A2 3DC0 xjmp L27
01A4 L30:
01A4 .dbline 149
01A4 ; if( (y0+with) > GUI_LCM_YMAX )
01A4 FE01 movw R30,R28
01A6 2188 ldd R2,z+17
01A8 3288 ldd R3,z+18
01AA 4388 ldd R4,z+19
01AC 5488 ldd R5,z+20
01AE FE01 movw R30,R28
01B0 6584 ldd R6,z+13
01B2 7684 ldd R7,z+14
01B4 8784 ldd R8,z+15
01B6 9088 ldd R9,z+16
01B8 620C add R6,R2
01BA 731C adc R7,R3
01BC 841C adc R8,R4
01BE 951C adc R9,R5
01C0 40E4 ldi R20,64
01C2 50E0 ldi R21,0
01C4 60E0 ldi R22,0
01C6 70E0 ldi R23,0
01C8 4615 cp R20,R6
01CA 5705 cpc R21,R7
01CC 6805 cpc R22,R8
01CE 7905 cpc R23,R9
01D0 08F4 brsh L32
01D2 .dbline 150
01D2 ; return;
01D2 25C0 xjmp L27
01D4 L32:
01D4 .dbline 151
01D4 ; GUI_Rectangle(x0, y0, x0+with, y0+with, color);
01D4 0D88 ldd R0,y+21
01D6 0C82 std y+4,R0
01D8 FE01 movw R30,R28
01DA 2188 ldd R2,z+17
01DC 3288 ldd R3,z+18
01DE 4388 ldd R4,z+19
01E0 5488 ldd R5,z+20
01E2 FE01 movw R30,R28
01E4 6584 ldd R6,z+13
01E6 7684 ldd R7,z+14
01E8 8784 ldd R8,z+15
01EA 9088 ldd R9,z+16
01EC 620C add R6,R2
01EE 731C adc R7,R3
01F0 841C adc R8,R4
01F2 951C adc R9,R5
01F4 6A82 std y+2,R6
01F6 FE01 movw R30,R28
01F8 2188 ldd R2,z+17
01FA 3288 ldd R3,z+18
01FC FE01 movw R30,R28
01FE 4184 ldd R4,z+9
0200 5284 ldd R5,z+10
0202 420C add R4,R2
0204 531C adc R5,R3
0206 5982 std y+1,R5
0208 4882 std y+0,R4
020A FE01 movw R30,R28
020C 2584 ldd R2,z+13
020E 3684 ldd R3,z+14
0210 4784 ldd R4,z+15
0212 5088 ldd R5,z+16
0214 222D mov R18,R2
0216 FE01 movw R30,R28
0218 0185 ldd R16,z+9
021A 1285 ldd R17,z+10
021C 27DF xcall _GUI_Rectangle
021E .dbline -2
021E L27:
021E 2596 adiw R28,5
0220 0E940000 xcall pop_gset2
0224 2496 adiw R28,4
0226 .dbline 0 ; func end
0226 0895 ret
0228 .dbsym l color 21 c
0228 .dbsym l with 17 l
0228 .dbsym l y0 13 l
0228 .dbsym l x0 9 l
0228 .dbend
0228 .dbfunc e GUI_Line _GUI_Line fV
0228 ; dy -> y+19
0228 ; dx -> y+15
0228 ; dy_x2 -> y+11
0228 ; dx_x2 -> y+7
0228 ; dy_sym -> R10
0228 ; dx_sym -> R12
0228 ; di -> y+3
0228 ; color -> R14
0228 ; y1 -> y+45
0228 ; x1 -> y+41
0228 ; y0 -> y+37
0228 ; x0 -> y+33
.even
0228 _GUI_Line::
0228 0E940000 xcall push_arg4
022C 0E940000 xcall push_gset5
0230 6797 sbiw R28,23
0232 E9A8 ldd R14,y+49
0234 .dbline -1
0234 .dbline 168
0234 ; }
0234 ;
0234 ;
0234 ;
0234 ; /****************************************************************************
0234 ; * 名称:GUI_Line()
0234 ; * 功能:画任意两点之间的直线。
0234 ; * 入口参数:x0 直线起点的x坐标值
0234 ; * y0 直线起点的y坐标值
0234 ; * x1 直线终点的x坐标值
0234 ; * y1 直线终点的y坐标值
0234 ; * color 显示颜色(对于黑白色LCM,为0时灭,为1时显示)
0234 ; * 出口参数:无
0234 ; * 说明:操作失败原因是指定地址超出有效范围。
0234 ; ****************************************************************************/
0234 ; void GUI_Line(uint32 x0, uint32 y0, uint32 x1, uint32 y1, TCOLOR color)
0234 ; {
0234 .dbline 177
0234 ; int32 dx; // 直线x轴差值变量
0234 ; int32 dy; // 直线y轴差值变量
0234 ; int8 dx_sym; // x轴增长方向,为-1时减值方向,为1时增值方向
0234 ; int8 dy_sym; // y轴增长方向,为-1时减值方向,为1时增值方向
0234 ; int32 dx_x2; // dx*2值变量,用于加快运算速度
0234 ; int32 dy_x2; // dy*2值变量,用于加快运算速度
0234 ; int32 di; // 决策变量
0234 ;
0234 ; dx = x1-x0; // 求取两点之间的差值
0234 FE01 movw R30,R28
0236 21A0 ldd R2,z+33
0238 32A0 ldd R3,z+34
023A 43A0 ldd R4,z+35
023C 54A0 ldd R5,z+36
023E FE01 movw R30,R28
0240 61A4 ldd R6,z+41
0242 72A4 ldd R7,z+42
0244 83A4 ldd R8,z+43
0246 94A4 ldd R9,z+44
0248 6218 sub R6,R2
024A 7308 sbc R7,R3
024C 8408 sbc R8,R4
024E 9508 sbc R9,R5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -