📄 gui.lis
字号:
0250 FE01 movw R30,R28
0252 6786 std z+15,R6
0254 708A std z+16,R7
0256 818A std z+17,R8
0258 928A std z+18,R9
025A .dbline 178
025A ; dy = y1-y0;
025A FE01 movw R30,R28
025C 25A0 ldd R2,z+37
025E 36A0 ldd R3,z+38
0260 47A0 ldd R4,z+39
0262 50A4 ldd R5,z+40
0264 FE01 movw R30,R28
0266 65A4 ldd R6,z+45
0268 76A4 ldd R7,z+46
026A 87A4 ldd R8,z+47
026C 90A8 ldd R9,z+48
026E 6218 sub R6,R2
0270 7308 sbc R7,R3
0272 8408 sbc R8,R4
0274 9508 sbc R9,R5
0276 FE01 movw R30,R28
0278 638A std z+19,R6
027A 748A std z+20,R7
027C 858A std z+21,R8
027E 968A std z+22,R9
0280 .dbline 181
0280 ;
0280 ; /* 判断增长方向,或是否为水平线、垂直线、点 */
0280 ; if(dx>0) // 判断x轴方向
0280 40E0 ldi R20,0
0282 50E0 ldi R21,0
0284 60E0 ldi R22,0
0286 70E0 ldi R23,0
0288 FE01 movw R30,R28
028A 2784 ldd R2,z+15
028C 3088 ldd R3,z+16
028E 4188 ldd R4,z+17
0290 5288 ldd R5,z+18
0292 4215 cp R20,R2
0294 5305 cpc R21,R3
0296 6405 cpc R22,R4
0298 7505 cpc R23,R5
029A 1CF4 brge L35
029C .dbline 182
029C ; {
029C .dbline 183
029C ; dx_sym = 1; // dx>0,设置dx_sym=1
029C CC24 clr R12
029E C394 inc R12
02A0 .dbline 184
02A0 ; }
02A0 23C0 xjmp L36
02A2 L35:
02A2 .dbline 186
02A2 ; else
02A2 ; {
02A2 .dbline 187
02A2 ; if(dx<0)
02A2 40E0 ldi R20,0
02A4 50E0 ldi R21,0
02A6 60E0 ldi R22,0
02A8 70E0 ldi R23,0
02AA FE01 movw R30,R28
02AC 2784 ldd R2,z+15
02AE 3088 ldd R3,z+16
02B0 4188 ldd R4,z+17
02B2 5288 ldd R5,z+18
02B4 2416 cp R2,R20
02B6 3506 cpc R3,R21
02B8 4606 cpc R4,R22
02BA 5706 cpc R5,R23
02BC 1CF4 brge L37
02BE .dbline 188
02BE ; {
02BE .dbline 189
02BE ; dx_sym = -1; // dx<0,设置dx_sym=-1
02BE 8FEF ldi R24,255
02C0 C82E mov R12,R24
02C2 .dbline 190
02C2 ; }
02C2 12C0 xjmp L38
02C4 L37:
02C4 .dbline 192
02C4 ; else
02C4 ; { // dx==0,画垂直线,或一点
02C4 .dbline 193
02C4 ; GUI_RLine(x0, y0, y1, color);
02C4 EA82 std y+2,R14
02C6 FE01 movw R30,R28
02C8 25A4 ldd R2,z+45
02CA 36A4 ldd R3,z+46
02CC 47A4 ldd R4,z+47
02CE 50A8 ldd R5,z+48
02D0 2882 std y+0,R2
02D2 FE01 movw R30,R28
02D4 25A0 ldd R2,z+37
02D6 36A0 ldd R3,z+38
02D8 47A0 ldd R4,z+39
02DA 50A4 ldd R5,z+40
02DC 222D mov R18,R2
02DE FE01 movw R30,R28
02E0 01A1 ldd R16,z+33
02E2 12A1 ldd R17,z+34
02E4 ABDE xcall _GUI_RLine
02E6 .dbline 194
02E6 ; return;
02E6 F8C1 xjmp L34
02E8 L38:
02E8 .dbline 196
02E8 ; }
02E8 ; }
02E8 L36:
02E8 .dbline 198
02E8 ;
02E8 ; if(dy>0) // 判断y轴方向
02E8 40E0 ldi R20,0
02EA 50E0 ldi R21,0
02EC 60E0 ldi R22,0
02EE 70E0 ldi R23,0
02F0 FE01 movw R30,R28
02F2 2388 ldd R2,z+19
02F4 3488 ldd R3,z+20
02F6 4588 ldd R4,z+21
02F8 5688 ldd R5,z+22
02FA 4215 cp R20,R2
02FC 5305 cpc R21,R3
02FE 6405 cpc R22,R4
0300 7505 cpc R23,R5
0302 1CF4 brge L39
0304 .dbline 199
0304 ; {
0304 .dbline 200
0304 ; dy_sym = 1; // dy>0,设置dy_sym=1
0304 AA24 clr R10
0306 A394 inc R10
0308 .dbline 201
0308 ; }
0308 22C0 xjmp L40
030A L39:
030A .dbline 203
030A ; else
030A ; {
030A .dbline 204
030A ; if(dy<0)
030A 40E0 ldi R20,0
030C 50E0 ldi R21,0
030E 60E0 ldi R22,0
0310 70E0 ldi R23,0
0312 FE01 movw R30,R28
0314 2388 ldd R2,z+19
0316 3488 ldd R3,z+20
0318 4588 ldd R4,z+21
031A 5688 ldd R5,z+22
031C 2416 cp R2,R20
031E 3506 cpc R3,R21
0320 4606 cpc R4,R22
0322 5706 cpc R5,R23
0324 1CF4 brge L41
0326 .dbline 205
0326 ; {
0326 .dbline 206
0326 ; dy_sym = -1; // dy<0,设置dy_sym=-1
0326 8FEF ldi R24,255
0328 A82E mov R10,R24
032A .dbline 207
032A ; }
032A 11C0 xjmp L42
032C L41:
032C .dbline 209
032C ; else
032C ; { // dy==0,画水平线,或一点
032C .dbline 210
032C ; GUI_HLine(x0, y0, x1, color);
032C EA82 std y+2,R14
032E FE01 movw R30,R28
0330 21A4 ldd R2,z+41
0332 32A4 ldd R3,z+42
0334 3982 std y+1,R3
0336 2882 std y+0,R2
0338 FE01 movw R30,R28
033A 25A0 ldd R2,z+37
033C 36A0 ldd R3,z+38
033E 47A0 ldd R4,z+39
0340 50A4 ldd R5,z+40
0342 222D mov R18,R2
0344 FE01 movw R30,R28
0346 01A1 ldd R16,z+33
0348 12A1 ldd R17,z+34
034A 5ADE xcall _GUI_HLine
034C .dbline 211
034C ; return;
034C C5C1 xjmp L34
034E L42:
034E .dbline 213
034E ; }
034E ; }
034E L40:
034E .dbline 216
034E ;
034E ; /* 将dx、dy取绝对值 */
034E ; dx = dx_sym * dx;
034E FE01 movw R30,R28
0350 2784 ldd R2,z+15
0352 3088 ldd R3,z+16
0354 4188 ldd R4,z+17
0356 5288 ldd R5,z+18
0358 6C2C mov R6,R12
035A 7724 clr R7
035C 67FC sbrc R6,7
035E 7094 com R7
0360 8824 clr R8
0362 77FC sbrc R7,7
0364 8094 com R8
0366 9924 clr R9
0368 87FC sbrc R8,7
036A 9094 com R9
036C 5A92 st -y,R5
036E 4A92 st -y,R4
0370 3A92 st -y,R3
0372 2A92 st -y,R2
0374 8301 movw R16,R6
0376 9401 movw R18,R8
0378 0E940000 xcall empy32s
037C FE01 movw R30,R28
037E 0787 std z+15,R16
0380 108B std z+16,R17
0382 218B std z+17,R18
0384 328B std z+18,R19
0386 .dbline 217
0386 ; dy = dy_sym * dy;
0386 FE01 movw R30,R28
0388 2388 ldd R2,z+19
038A 3488 ldd R3,z+20
038C 4588 ldd R4,z+21
038E 5688 ldd R5,z+22
0390 6A2C mov R6,R10
0392 7724 clr R7
0394 67FC sbrc R6,7
0396 7094 com R7
0398 8824 clr R8
039A 77FC sbrc R7,7
039C 8094 com R8
039E 9924 clr R9
03A0 87FC sbrc R8,7
03A2 9094 com R9
03A4 5A92 st -y,R5
03A6 4A92 st -y,R4
03A8 3A92 st -y,R3
03AA 2A92 st -y,R2
03AC 8301 movw R16,R6
03AE 9401 movw R18,R8
03B0 0E940000 xcall empy32s
03B4 FE01 movw R30,R28
03B6 038B std z+19,R16
03B8 148B std z+20,R17
03BA 258B std z+21,R18
03BC 368B std z+22,R19
03BE .dbline 220
03BE ;
03BE ; /* 计算2倍的dx及dy值 */
03BE ; dx_x2 = dx*2;
03BE FE01 movw R30,R28
03C0 2784 ldd R2,z+15
03C2 3088 ldd R3,z+16
03C4 4188 ldd R4,z+17
03C6 5288 ldd R5,z+18
03C8 42E0 ldi R20,2
03CA 50E0 ldi R21,0
03CC 60E0 ldi R22,0
03CE 70E0 ldi R23,0
03D0 5A92 st -y,R5
03D2 4A92 st -y,R4
03D4 3A92 st -y,R3
03D6 2A92 st -y,R2
03D8 8A01 movw R16,R20
03DA 9B01 movw R18,R22
03DC 0E940000 xcall empy32s
03E0 FE01 movw R30,R28
03E2 0783 std z+7,R16
03E4 1087 std z+8,R17
03E6 2187 std z+9,R18
03E8 3287 std z+10,R19
03EA .dbline 221
03EA ; dy_x2 = dy*2;
03EA FE01 movw R30,R28
03EC 2388 ldd R2,z+19
03EE 3488 ldd R3,z+20
03F0 4588 ldd R4,z+21
03F2 5688 ldd R5,z+22
03F4 42E0 ldi R20,2
03F6 50E0 ldi R21,0
03F8 60E0 ldi R22,0
03FA 70E0 ldi R23,0
03FC 5A92 st -y,R5
03FE 4A92 st -y,R4
0400 3A92 st -y,R3
0402 2A92 st -y,R2
0404 8A01 movw R16,R20
0406 9B01 movw R18,R22
0408 0E940000 xcall empy32s
040C FE01 movw R30,R28
040E 0387 std z+11,R16
0410 1487 std z+12,R17
0412 2587 std z+13,R18
0414 3687 std z+14,R19
0416 .dbline 224
0416 ;
0416 ; /* 使用Bresenham法进行画直线 */
0416 ; if(dx>=dy) // 对于dx>=dy,则使用x轴为基准
0416 FE01 movw R30,R28
0418 2388 ldd R2,z+19
041A 3488 ldd R3,z+20
041C 4588 ldd R4,z+21
041E 5688 ldd R5,z+22
0420 FE01 movw R30,R28
0422 6784 ldd R6,z+15
0424 7088 ldd R7,z+16
0426 8188 ldd R8,z+17
0428 9288 ldd R9,z+18
042A 6214 cp R6,R2
042C 7304 cpc R7,R3
042E 8404 cpc R8,R4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -