📄 gui_basic.lis
字号:
058C 020C add R0,R2
058E 131C adc R1,R3
0590 1A8E std y+26,R1
0592 098E std y+25,R0
0594 .dbline 297
0594 ; }
0594 L83:
0594 .dbline 298
0594 L78:
0594 .dbline 283
0594 0F88 ldd R0,y+23
0596 188C ldd R1,y+24
0598 0B8D ldd R16,y+27
059A 1C8D ldd R17,y+28
059C 0016 cp R0,R16
059E 1106 cpc R1,R17
05A0 09F0 breq X5
05A2 B5CF xjmp L77
05A4 X5:
05A4 .dbline 299
05A4 ; }
05A4 ; draw_a = y0-wx;
05A4 498D ldd R20,y+25
05A6 5A8D ldd R21,y+26
05A8 4619 sub R20,R6
05AA 5709 sbc R21,R7
05AC .dbline 300
05AC ; if(draw_a<0) draw_a = 0;
05AC 4030 cpi R20,0
05AE E0E0 ldi R30,0
05B0 5E07 cpc R21,R30
05B2 14F4 brge L84
05B4 .dbline 300
05B4 4427 clr R20
05B6 5527 clr R21
05B8 L84:
05B8 .dbline 301
05B8 ; draw_b = y0+wy;
05B8 2B80 ldd R2,y+3
05BA 3C80 ldd R3,y+4
05BC A98C ldd R10,y+25
05BE BA8C ldd R11,y+26
05C0 A20C add R10,R2
05C2 B31C adc R11,R3
05C4 .dbline 302
05C4 ; GUI_RLine(x0, draw_a, draw_b, color);
05C4 09A0 ldd R0,y+33
05C6 0A82 std y+2,R0
05C8 B982 std y+1,R11
05CA A882 std y+0,R10
05CC 9A01 movw R18,R20
05CE 0F89 ldd R16,y+23
05D0 188D ldd R17,y+24
05D2 6F92 push R6
05D4 7F92 push R7
05D6 0E940000 xcall _GUI_RLine
05DA 7F90 pop R7
05DC 6F90 pop R6
05DE .dbline 303
05DE ; }
05DE 6BC0 xjmp L76
05E0 L75:
05E0 .dbline 305
05E0 ; else // 对于dx<dy,则使用y轴为基准
05E0 ; { di = dx_x2 - dy;
05E0 .dbline 305
05E0 2B84 ldd R2,y+11
05E2 3C84 ldd R3,y+12
05E4 CD80 ldd R12,y+5
05E6 DE80 ldd R13,y+6
05E8 C218 sub R12,R2
05EA D308 sbc R13,R3
05EC 43C0 xjmp L87
05EE L86:
05EE .dbline 307
05EE ; while(y0!=y1)
05EE ; { /* y轴向增长,则宽度在x方向,即画水平线 */
05EE .dbline 308
05EE ; draw_a = x0-wx;
05EE 4F89 ldd R20,y+23
05F0 588D ldd R21,y+24
05F2 4619 sub R20,R6
05F4 5709 sbc R21,R7
05F6 .dbline 309
05F6 ; if(draw_a<0) draw_a = 0;
05F6 4030 cpi R20,0
05F8 E0E0 ldi R30,0
05FA 5E07 cpc R21,R30
05FC 14F4 brge L89
05FE .dbline 309
05FE 4427 clr R20
0600 5527 clr R21
0602 L89:
0602 .dbline 310
0602 ; draw_b = x0+wy;
0602 2B80 ldd R2,y+3
0604 3C80 ldd R3,y+4
0606 AF88 ldd R10,y+23
0608 B88C ldd R11,y+24
060A A20C add R10,R2
060C B31C adc R11,R3
060E .dbline 311
060E ; GUI_HLine(draw_a, y0, draw_b, color);
060E 09A0 ldd R0,y+33
0610 0A82 std y+2,R0
0612 B982 std y+1,R11
0614 A882 std y+0,R10
0616 298D ldd R18,y+25
0618 3A8D ldd R19,y+26
061A 8A01 movw R16,R20
061C 6F92 push R6
061E 7F92 push R7
0620 0E940000 xcall _GUI_HLine
0624 7F90 pop R7
0626 6F90 pop R6
0628 .dbline 313
0628 ;
0628 ; y0 += dy_sym;
0628 2E2C mov R2,R14
062A 3324 clr R3
062C 27FC sbrc R2,7
062E 3094 com R3
0630 098C ldd R0,y+25
0632 1A8C ldd R1,y+26
0634 020C add R0,R2
0636 131C adc R1,R3
0638 1A8E std y+26,R1
063A 098E std y+25,R0
063C .dbline 314
063C ; if(di<0)
063C C601 movw R24,R12
063E 8030 cpi R24,0
0640 E0E0 ldi R30,0
0642 9E07 cpc R25,R30
0644 2CF4 brge L91
0646 .dbline 315
0646 ; { di += dx_x2;
0646 .dbline 315
0646 2D80 ldd R2,y+5
0648 3E80 ldd R3,y+6
064A C20C add R12,R2
064C D31C adc R13,R3
064E .dbline 316
064E ; }
064E 12C0 xjmp L92
0650 L91:
0650 .dbline 318
0650 ; else
0650 ; { di += dx_x2 - dy_x2;
0650 .dbline 318
0650 2F80 ldd R2,y+7
0652 3884 ldd R3,y+8
0654 4D80 ldd R4,y+5
0656 5E80 ldd R5,y+6
0658 4218 sub R4,R2
065A 5308 sbc R5,R3
065C C40C add R12,R4
065E D51C adc R13,R5
0660 .dbline 319
0660 ; x0 += dx_sym;
0660 262E mov R2,R22
0662 3324 clr R3
0664 27FC sbrc R2,7
0666 3094 com R3
0668 0F88 ldd R0,y+23
066A 188C ldd R1,y+24
066C 020C add R0,R2
066E 131C adc R1,R3
0670 188E std y+24,R1
0672 0F8A std y+23,R0
0674 .dbline 320
0674 ; }
0674 L92:
0674 .dbline 321
0674 L87:
0674 .dbline 306
0674 098C ldd R0,y+25
0676 1A8C ldd R1,y+26
0678 0D8D ldd R16,y+29
067A 1E8D ldd R17,y+30
067C 0016 cp R0,R16
067E 1106 cpc R1,R17
0680 09F0 breq X6
0682 B5CF xjmp L86
0684 X6:
0684 .dbline 322
0684 ; }
0684 ; draw_a = x0-wx;
0684 4F89 ldd R20,y+23
0686 588D ldd R21,y+24
0688 4619 sub R20,R6
068A 5709 sbc R21,R7
068C .dbline 323
068C ; if(draw_a<0) draw_a = 0;
068C 4030 cpi R20,0
068E E0E0 ldi R30,0
0690 5E07 cpc R21,R30
0692 14F4 brge L93
0694 .dbline 323
0694 4427 clr R20
0696 5527 clr R21
0698 L93:
0698 .dbline 324
0698 2B80 ldd R2,y+3
069A 3C80 ldd R3,y+4
069C AF88 ldd R10,y+23
069E B88C ldd R11,y+24
06A0 A20C add R10,R2
06A2 B31C adc R11,R3
06A4 .dbline 325
06A4 09A0 ldd R0,y+33
06A6 0A82 std y+2,R0
06A8 B982 std y+1,R11
06AA A882 std y+0,R10
06AC 298D ldd R18,y+25
06AE 3A8D ldd R19,y+26
06B0 8A01 movw R16,R20
06B2 0E940000 xcall _GUI_HLine
06B6 .dbline 326
06B6 L76:
06B6 .dbline -2
06B6 L48:
06B6 2D96 adiw R28,13
06B8 0E940000 xcall pop_gset5
06BC 2496 adiw R28,4
06BE .dbline 0 ; func end
06BE 0895 ret
06C0 .dbsym l dy 11 I
06C0 .dbsym l dx 9 I
06C0 .dbsym l dy_x2 7 I
06C0 .dbsym l dx_x2 5 I
06C0 .dbsym r dy_sym 14 C
06C0 .dbsym r dx_sym 22 C
06C0 .dbsym l wy 3 I
06C0 .dbsym r di 12 I
06C0 .dbsym r draw_b 10 I
06C0 .dbsym r wx 6 I
06C0 .dbsym r draw_a 20 I
06C0 .dbsym l color 33 c
06C0 .dbsym r with 20 c
06C0 .dbsym l y1 29 i
06C0 .dbsym l x1 27 i
06C0 .dbsym l y0 25 i
06C0 .dbsym l x0 23 i
06C0 .dbend
06C0 .dbfunc e GUI_LineS _GUI_LineS fV
06C0 ; i -> R20
06C0 ; y0 -> R22,R23
06C0 ; x0 -> R10,R11
06C0 ; y1 -> R12,R13
06C0 ; x1 -> R14,R15
06C0 ; color -> y+17
06C0 ; no -> y+15
06C0 ; points -> R4,R5
.even
06C0 _GUI_LineS::
06C0 3A93 st -y,r19
06C2 2A93 st -y,r18
06C4 0E940000 xcall push_gset5
06C8 2801 movw R4,R16
06CA 2597 sbiw R28,5
06CC .dbline -1
06CC .dbline 343
06CC ; draw_b = x0+wy;
06CC ; GUI_HLine(draw_a, y0, draw_b, color);
06CC ; }
06CC ;
06CC ; }
06CC ; #endif
06CC ;
06CC ;
06CC ;
06CC ; /****************************************************************************
06CC ; * 名称:GUI_LineS()
06CC ; * 功能:多个点之间的连续连线。从第一点连到第二点,再连到第三点...
06CC ; * 入口参数: points 多个点坐标数据的指针,数据排列为(x0,y0)、(x1,y1)、(x2,y2)...
06CC ; * no 点数目,至少要大于1
06CC ; * color 显示颜色
06CC ; * 出口参数:无
06CC ; * 说明:操作失败原因是指定地址超出有效范围。
06CC ; ****************************************************************************/
06CC ; void GUI_LineS(uint32 const *points, uint8 no, TCOLOR color)
06CC ; { uint32 x0, y0;
06CC .dbline 348
06CC ; uint32 x1, y1;
06CC ; uint8 i;
06CC ;
06CC ; /* 入口参数过滤 */
06CC ; if(0==no) return;
06CC 0F84 ldd R0,y+15
06CE 0020 tst R0
06D0 09F4 brne L96
06D2 .dbline 348
06D2 42C0 xjmp L95
06D4 L96:
06D4 .dbline 349
06D4 ; if(1==no) // 单点
06D4 8F85 ldd R24,y+15
06D6 8130 cpi R24,1
06D8 99F4 brne L98
06DA .dbline 350
06DA ; { x0 = *points++;
06DA .dbline 350
06DA 1201 movw R2,R4
06DC C101 movw R24,R2
06DE 0296 adiw R24,2
06E0 F101 movw R30,R2
06E2 A590 lpm R10,Z+
06E4 B490 lpm R11,Z
06E6 .dbline 351
06E6 ; y0 = *points;
06E6 FC01 movw R30,R24
06E8 6591 lpm R22,Z+
06EA 7491 lpm R23,Z
06EC .dbline 352
06EC ; GUI_Point(x0, y0, color);
06EC 0988 ldd R0,y+17
06EE 0882 std y+0,R0
06F0 9B01 movw R18,R22
06F2 8501 movw R16,R10
06F4 8F93 push R24
06F6 9F93 push R25
06F8 0E940000 xcall _GUI_Point
06FC 5F90 pop R5
06FE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -