📄 gui12864.lis
字号:
017A 2882 std y+0,R2
017C 2B81 ldd R18,y+3
017E 3327 clr R19
0180 0A81 ldd R16,y+2
0182 1127 clr R17
0184 0E940000 xcall _LcdDisplayDot
0188 .dbline 118
0188 ; if(p >= 0) /* 根据P来判断画哪一点 */
0188 C501 movw R24,R10
018A 8030 cpi R24,0
018C E0E0 ldi R30,0
018E 9E07 cpc R25,R30
0190 7CF0 brlt L32
0192 X12:
0192 .dbline 119
0192 ; {
0192 .dbline 120
0192 ; y = y + signy;
0192 0B80 ldd R0,y+3
0194 0E0C add R0,R14
0196 0B82 std y+3,R0
0198 .dbline 121
0198 ; x = x + signx;
0198 0A80 ldd R0,y+2
019A 0C0C add R0,R12
019C 0A82 std y+2,R0
019E .dbline 122
019E ; p = p + 2*(dx - dy);
019E 2C80 ldd R2,y+4
01A0 3D80 ldd R3,y+5
01A2 261A sub R2,R22
01A4 370A sbc R3,R23
01A6 220C lsl R2
01A8 331C rol R3
01AA A20C add R10,R2
01AC B31C adc R11,R3
01AE .dbline 123
01AE ; }
01AE 09C0 xjmp L33
01B0 L32:
01B0 .dbline 125
01B0 ; else
01B0 ; {
01B0 .dbline 126
01B0 ; y = y + signy;
01B0 0B80 ldd R0,y+3
01B2 0E0C add R0,R14
01B4 0B82 std y+3,R0
01B6 .dbline 127
01B6 ; x = x;
01B6 .dbline 128
01B6 ; p = p + 2*dx;
01B6 2C80 ldd R2,y+4
01B8 3D80 ldd R3,y+5
01BA 220C lsl R2
01BC 331C rol R3
01BE A20C add R10,R2
01C0 B31C adc R11,R3
01C2 .dbline 129
01C2 ; }
01C2 L33:
01C2 .dbline 130
01C2 ; }
01C2 L29:
01C2 .dbline 115
01C2 4395 inc R20
01C4 L31:
01C4 .dbline 115
01C4 242E mov R2,R20
01C6 3324 clr R3
01C8 2616 cp R2,R22
01CA 3706 cpc R3,R23
01CC 9CF2 brlt L28
01CE X13:
01CE .dbline 131
01CE ; }
01CE L21:
01CE .dbline 132
01CE ; LcdDisplayDot(x2,y2,color); /* 画最后一个点 */
01CE 288C ldd R2,y+24
01D0 3324 clr R3
01D2 3982 std y+1,R3
01D4 2882 std y+0,R2
01D6 2E89 ldd R18,y+22
01D8 3327 clr R19
01DA 0C89 ldd R16,y+20
01DC 1127 clr R17
01DE 0E940000 xcall _LcdDisplayDot
01E2 .dbline -2
01E2 L1:
01E2 .dbline 0 ; func end
01E2 2696 adiw R28,6
01E4 0E940000 xcall pop_xgsetF0FC
01E8 2496 adiw R28,4
01EA 0895 ret
01EC .dbsym r signy 14 c
01EC .dbsym r signx 12 c
01EC .dbsym r dy 22 I
01EC .dbsym l dx 4 I
01EC .dbsym r temp 20 c
01EC .dbsym l y 3 c
01EC .dbsym l x 2 c
01EC .dbsym r p 10 I
01EC .dbsym l color 24 c
01EC .dbsym l y2 22 c
01EC .dbsym l x2 20 c
01EC .dbsym r y1 10 c
01EC .dbsym l x1 16 c
01EC .dbend
01EC .dbfunc e GuiDrawCircle _GuiDrawCircle fV
01EC ; draw_x7 -> y+28
01EC ; draw_x6 -> y+26
01EC ; draw_y3 -> y+24
01EC ; draw_y1 -> y+22
01EC ; draw_x5 -> y+20
01EC ; draw_x4 -> y+18
01EC ; draw_y2 -> y+16
01EC ; draw_y0 -> y+14
01EC ; di -> R14,R15
01EC ; yy -> R22,R23
01EC ; draw_y7 -> R12,R13
01EC ; draw_y6 -> y+12
01EC ; draw_x3 -> y+10
01EC ; draw_x1 -> y+8
01EC ; draw_y5 -> R10,R11
01EC ; draw_y4 -> y+6
01EC ; draw_x2 -> y+4
01EC ; draw_x0 -> y+2
01EC ; xx -> R20,R21
01EC ; color -> y+42
01EC ; r -> R22
01EC ; y0 -> R10
01EC ; x0 -> R12
.even
01EC _GuiDrawCircle::
01EC 0E940000 xcall push_xgsetF0FC
01F0 A22E mov R10,R18
01F2 C02E mov R12,R16
01F4 6E97 sbiw R28,30
01F6 68A5 ldd R22,y+40
01F8 .dbline -1
01F8 .dbline 141
01F8 ; }
01F8 ;
01F8 ; /*****************************************
01F8 ; * FUNCTION NAME: GuiDrawCircle
01F8 ; * DESCRIPTION: Draw Circle
01F8 ; * Based On "Breshenham Circle"
01F8 ; /*****************************************/
01F8 ; void GuiDrawCircle(unsigned char x0, unsigned char y0, unsigned char r, unsigned char color)
01F8 ; {
01F8 .dbline 153
01F8 ; int draw_x0, draw_y0; /* 绘制图点坐标变量 */
01F8 ; int draw_x1, draw_y1;
01F8 ; int draw_x2, draw_y2;
01F8 ; int draw_x3, draw_y3;
01F8 ; int draw_x4, draw_y4;
01F8 ; int draw_x5, draw_y5;
01F8 ; int draw_x6, draw_y6;
01F8 ; int draw_x7, draw_y7;
01F8 ; int xx, yy; /* 画圆控制变量 */
01F8 ; int di; /* 决策变量 */
01F8 ; /* 参数过滤 */
01F8 ; if(r==0)
01F8 6623 tst R22
01FA 09F4 brne L35
01FC X14:
01FC .dbline 154
01FC ; return;
01FC 2FC1 xjmp L34
01FE L35:
01FE .dbline 156
01FE ; /* 计算出8个特殊点(0、45、90、135、180、225、270度),进行显示 */
01FE ; draw_x0 = draw_x1 = x0;
01FE 2C2C mov R2,R12
0200 3324 clr R3
0202 3986 std y+9,R3
0204 2886 std y+8,R2
0206 3324 clr R3
0208 3B82 std y+3,R3
020A 2A82 std y+2,R2
020C .dbline 157
020C ; draw_y0 = draw_y1 = y0 + r;
020C 262E mov R2,R22
020E 3324 clr R3
0210 4A2C mov R4,R10
0212 5524 clr R5
0214 420C add R4,R2
0216 531C adc R5,R3
0218 5F8A std y+23,R5
021A 4E8A std y+22,R4
021C 5F86 std y+15,R5
021E 4E86 std y+14,R4
0220 .dbline 158
0220 ; LcdDisplayDot(draw_x0, draw_y0, color); // 90度
0220 2AA4 ldd R2,y+42
0222 3324 clr R3
0224 3982 std y+1,R3
0226 2882 std y+0,R2
0228 9201 movw R18,R4
022A 0A81 ldd R16,y+2
022C 1B81 ldd R17,y+3
022E 0E940000 xcall _LcdDisplayDot
0232 .dbline 159
0232 ; draw_x2 = draw_x3 = x0;
0232 2C2C mov R2,R12
0234 3324 clr R3
0236 3B86 std y+11,R3
0238 2A86 std y+10,R2
023A 3324 clr R3
023C 3D82 std y+5,R3
023E 2C82 std y+4,R2
0240 .dbline 160
0240 ; draw_y2 = draw_y3 = y0 - r;
0240 262E mov R2,R22
0242 3324 clr R3
0244 4A2C mov R4,R10
0246 5524 clr R5
0248 4218 sub R4,R2
024A 5308 sbc R5,R3
024C 598E std y+25,R5
024E 488E std y+24,R4
0250 598A std y+17,R5
0252 488A std y+16,R4
0254 .dbline 161
0254 ; LcdDisplayDot(draw_x2, draw_y2, color); // 270度
0254 2AA4 ldd R2,y+42
0256 3324 clr R3
0258 3982 std y+1,R3
025A 2882 std y+0,R2
025C 9201 movw R18,R4
025E 0C81 ldd R16,y+4
0260 1D81 ldd R17,y+5
0262 0E940000 xcall _LcdDisplayDot
0266 .dbline 162
0266 ; draw_x4 = draw_x6 = x0 + r;
0266 262E mov R2,R22
0268 3324 clr R3
026A EC2C mov R14,R12
026C FF24 clr R15
026E E20C add R14,R2
0270 F31C adc R15,R3
0272 FB8E std y+27,R15
0274 EA8E std y+26,R14
0276 FB8A std y+19,R15
0278 EA8A std y+18,R14
027A .dbline 163
027A ; draw_y4 = draw_y6 = y0;
027A 2A2C mov R2,R10
027C 3324 clr R3
027E 3D86 std y+13,R3
0280 2C86 std y+12,R2
0282 3324 clr R3
0284 3F82 std y+7,R3
0286 2E82 std y+6,R2
0288 .dbline 164
0288 ; LcdDisplayDot(draw_x4, draw_y4, color); // 0度
0288 2AA4 ldd R2,y+42
028A 3324 clr R3
028C 3982 std y+1,R3
028E 2882 std y+0,R2
0290 2E81 ldd R18,y+6
0292 3F81 ldd R19,y+7
0294 0A89 ldd R16,y+18
0296 1B89 ldd R17,y+19
0298 0E940000 xcall _LcdDisplayDot
029C .dbline 165
029C ; draw_x5 = draw_x7 = x0 - r;
029C 262E mov R2,R22
029E 3324 clr R3
02A0 4C2C mov R4,R12
02A2 5524 clr R5
02A4 4218 sub R4,R2
02A6 5308 sbc R5,R3
02A8 6201 movw R12,R4
02AA DD8E std y+29,R13
02AC CC8E std y+28,R12
02AE DD8A std y+21,R13
02B0 CC8A std y+20,R12
02B2 .dbline 166
02B2 ; draw_y5 = draw_y7 = y0;
02B2 CA2C mov R12,R10
02B4 DD24 clr R13
02B6 BB24 clr R11
02B8 .dbline 167
02B8 ; LcdDisplayDot(draw_x5, draw_y5, color); // 180度
02B8 2AA4 ldd R2,y+42
02BA 3324 clr R3
02BC 3982 std y+1,R3
02BE 2882 std y+0,R2
02C0 9501 movw R18,R10
02C2 8201 movw R16,R4
02C4 0E940000 xcall _LcdDisplayDot
02C8 .dbline 168
02C8 ; if(r==1)
02C8 6130 cpi R22,1
02CA 09F4 brne L37
02CC X15:
02CC .dbline 169
02CC ; return; // 若半径为1,则已圆画完
02CC C7C0 xjmp L34
02CE L37:
02CE .dbline 172
02CE ;
02CE ; /* 使用Bresenham法进行画圆 */
02CE ; di = 3 - 2*r; // 初始化决策变量
02CE 262E mov R2,R22
02D0 3324 clr R3
02D2 220C lsl R2
02D4 331C rol R3
02D6 83E0 ldi R24,3
02D8 90E0 ldi R25,0
02DA 7C01 movw R14,R24
02DC E218 sub R14,R2
02DE F308 sbc R15,R3
02E0 .dbline 173
02E0 ; xx = 0;
02E0 4427 clr R20
02E2 5527 clr R21
02E4 .dbline 174
02E4 ; yy = r;
02E4 7727 clr R23
02E6 B6C0 xjmp L40
02E8 L39:
02E8 .dbline 176
02E8 ; while(xx<yy)
02E8 ; {
02E8 .dbline 177
02E8 ; if(di<0)
02E8 C701 movw R24,R14
02EA 8030 cpi R24,0
02EC E0E0 ldi R30,0
02EE 9E07 cpc R25,R30
02F0 4CF4 brge L42
02F2 X16:
02F2 .dbline 178
02F2 ; {
02F2 .dbline 179
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -