📄 gui_basic.txt
字号:
;;;137 { if(dy<0)
;;;138 { dy_sym = -1; // dy<0,设置dy_sym=-1
;;;139 }
;;;140 else
;;;141 { // dy==0,画水平线,或一点
;;;142 GUI_HLine(x0, y0, x1, color);
;;;143 return;
;;;144 }
;;;145 }
;;;146
;;;147 /* 将dx、dy取绝对值 */
;;;148 dx = dx_sym * dx;
;;;149 dy = dy_sym * dy;
;;;150
;;;151 /* 计算2倍的dx及dy值 */
;;;152 dx_x2 = dx*2;
;;;153 dy_x2 = dy*2;
;;;154
;;;155 /* 使用Bresenham法进行画直线 */
;;;156 if(dx>=dy) // 对于dx>=dy,则使用x轴为基准
;;;157 { di = dy_x2 - dx;
;;;158 while(x0!=x1)
;;;159 { GUI_Point(x0, y0, color);
;;;160 x0 += dx_sym;
;;;161 if(di<0)
;;;162 { di += dy_x2; // 计算出下一步的决策值
;;;163 }
;;;164 else
;;;165 { di += dy_x2 - dx_x2;
;;;166 y0 += dy_sym;
;;;167 }
;;;168 }
;;;169 GUI_Point(x0, y0, color); // 显示最后一点
;;;170 }
;;;171 else // 对于dx<dy,则使用y轴为基准
;;;172 { di = dx_x2 - dy;
;;;173 while(y0!=y1)
;;;174 { GUI_Point(x0, y0, color);
;;;175 y0 += dy_sym;
;;;176 if(di<0)
;;;177 { di += dx_x2;
;;;178 }
;;;179 else
;;;180 { di += dx_x2 - dy_x2;
;;;181 x0 += dx_sym;
;;;182 }
;;;183 }
;;;184 GUI_Point(x0, y0, color); // 显示最后一点
;;;185 }
;;;186
;;;187 }
|L1.460|
0001cc e8bd4ffe POP {r1-r11,lr}
0001d0 e12fff1e BX lr
|L1.468|
0001d4 e3590000 CMP r9,#0 ;133
0001d8 da000001 BLE |L1.484| ;133
0001dc e3a0b001 MOV r11,#1 ;134
0001e0 ea000009 B |L1.524| ;134
|L1.484|
0001e4 e3590000 CMP r9,#0 ;137
0001e8 aa000001 BGE |L1.500| ;137
0001ec e3e0b000 MVN r11,#0 ;138
0001f0 ea000005 B |L1.524| ;138
|L1.500|
0001f4 e20620ff AND r2,r6,#0xff ;142
0001f8 e20510ff AND r1,r5,#0xff ;142
0001fc e20400ff AND r0,r4,#0xff ;142
000200 e59d3030 LDR r3,[sp,#0x30] ;142
000204 ebfffffe BL GUI_HLine ;142
000208 eaffffef B |L1.460| ;143
|L1.524|
00020c e008089a MUL r8,r10,r8 ;148
000210 e009099b MUL r9,r11,r9 ;149
000214 e1a00088 LSL r0,r8,#1 ;152
000218 e58d0008 STR r0,[sp,#8] ;152
00021c e1a00089 LSL r0,r9,#1 ;153
000220 e58d0004 STR r0,[sp,#4] ;153
000224 e1580009 CMP r8,r9 ;156
000228 ba00001c BLT |L1.672| ;156
00022c e59d0004 LDR r0,[sp,#4] ;157
000230 e0400008 SUB r0,r0,r8 ;157
000234 e58d0000 STR r0,[sp,#0] ;157
000238 ea000011 B |L1.644| ;158
|L1.572|
00023c e20510ff AND r1,r5,#0xff ;159
000240 e20400ff AND r0,r4,#0xff ;159
000244 e59d2030 LDR r2,[sp,#0x30] ;159
000248 ebfffffe BL GUI_Point ;159
00024c e084400a ADD r4,r4,r10 ;160
000250 e59d0000 LDR r0,[sp,#0] ;161
000254 e3500000 CMP r0,#0 ;161
000258 aa000003 BGE |L1.620| ;161
00025c e89d0003 LDM sp,{r0,r1} ;162
000260 e0800001 ADD r0,r0,r1 ;162
000264 e58d0000 STR r0,[sp,#0] ;162
000268 ea000005 B |L1.644| ;162
|L1.620|
00026c e99d0003 LDMIB sp,{r0,r1} ;165
000270 e0401001 SUB r1,r0,r1 ;165
000274 e59d0000 LDR r0,[sp,#0] ;165
000278 e0800001 ADD r0,r0,r1 ;165
00027c e58d0000 STR r0,[sp,#0] ;165
000280 e085500b ADD r5,r5,r11 ;166
|L1.644|
000284 e1540006 CMP r4,r6 ;158
000288 1affffeb BNE |L1.572| ;158
00028c e20510ff AND r1,r5,#0xff ;169
000290 e20400ff AND r0,r4,#0xff ;169
000294 e59d2030 LDR r2,[sp,#0x30] ;169
000298 ebfffffe BL GUI_Point ;169
00029c ea00001d B |L1.792| ;169
|L1.672|
0002a0 e59d0008 LDR r0,[sp,#8] ;172
0002a4 e0400009 SUB r0,r0,r9 ;172
0002a8 e58d0000 STR r0,[sp,#0] ;172
0002ac ea000013 B |L1.768| ;173
|L1.688|
0002b0 e20510ff AND r1,r5,#0xff ;174
0002b4 e20400ff AND r0,r4,#0xff ;174
0002b8 e59d2030 LDR r2,[sp,#0x30] ;174
0002bc ebfffffe BL GUI_Point ;174
0002c0 e085500b ADD r5,r5,r11 ;175
0002c4 e59d0000 LDR r0,[sp,#0] ;176
0002c8 e3500000 CMP r0,#0 ;176
0002cc aa000004 BGE |L1.740| ;176
0002d0 e59d0000 LDR r0,[sp,#0] ;177
0002d4 e59d1008 LDR r1,[sp,#8] ;177
0002d8 e0800001 ADD r0,r0,r1 ;177
0002dc e58d0000 STR r0,[sp,#0] ;177
0002e0 ea000006 B |L1.768| ;177
|L1.740|
0002e4 e59d0008 LDR r0,[sp,#8] ;180
0002e8 e59d1004 LDR r1,[sp,#4] ;180
0002ec e0401001 SUB r1,r0,r1 ;180
0002f0 e59d0000 LDR r0,[sp,#0] ;180
0002f4 e0800001 ADD r0,r0,r1 ;180
0002f8 e58d0000 STR r0,[sp,#0] ;180
0002fc e084400a ADD r4,r4,r10 ;181
|L1.768|
000300 e1550007 CMP r5,r7 ;173
000304 1affffe9 BNE |L1.688| ;173
000308 e20510ff AND r1,r5,#0xff ;184
00030c e20400ff AND r0,r4,#0xff ;184
000310 e59d2030 LDR r2,[sp,#0x30] ;184
000314 ebfffffe BL GUI_Point ;184
|L1.792|
000318 eaffffab B |L1.460|
ENDP
GUI_LineS PROC
;;;343 void GUI_LineS(uint32 const *points, uint8 no, TCOLOR color)
;;;344 { uint32 x0, y0;
00031c e92d4ff8 PUSH {r3-r11,lr}
000320 e1a04000 MOV r4,r0
000324 e1a05001 MOV r5,r1
000328 e1a06002 MOV r6,r2
;;;345 uint32 x1, y1;
;;;346 uint8 i;
;;;347
;;;348 /* 入口参数过滤 */
;;;349 if(0==no) return;
00032c e3550000 CMP r5,#0
000330 1a000001 BNE |L1.828|
;;;350 if(1==no) // 单点
;;;351 { x0 = *points++;
;;;352 y0 = *points;
;;;353 GUI_Point(x0, y0, color);
;;;354 }
;;;355
;;;356 /* 画多条线条 */
;;;357 x0 = *points++; // 取出第一点坐标值,作为原起点坐标值
;;;358 y0 = *points++;
;;;359 for(i=1; i<no; i++)
;;;360 { x1 = *points++; // 取出下一点坐标值
;;;361 y1 = *points++;
;;;362 GUI_Line(x0, y0, x1, y1, color);
;;;363 x0 = x1; // 更新原起点坐标
;;;364 y0 = y1;
;;;365 }
;;;366 }
|L1.820|
000334 e8bd4ff8 POP {r3-r11,lr}
000338 e12fff1e BX lr
|L1.828|
00033c e3550001 CMP r5,#1 ;350
000340 1a000005 BNE |L1.860| ;350
000344 e4947004 LDR r7,[r4],#4 ;351
000348 e5948000 LDR r8,[r4,#0] ;352
00034c e20810ff AND r1,r8,#0xff ;353
000350 e20700ff AND r0,r7,#0xff ;353
000354 e1a02006 MOV r2,r6 ;353
000358 ebfffffe BL GUI_Point ;353
|L1.860|
00035c e4947004 LDR r7,[r4],#4 ;357
000360 e4948004 LDR r8,[r4],#4 ;358
000364 e3a0b001 MOV r11,#1 ;359
000368 ea00000b B |L1.924| ;359
|L1.876|
00036c e4949004 LDR r9,[r4],#4 ;360
000370 e494a004 LDR r10,[r4],#4 ;361
000374 e1a0300a MOV r3,r10 ;362
000378 e1a02009 MOV r2,r9 ;362
00037c e1a01008 MOV r1,r8 ;362
000380 e1a00007 MOV r0,r7 ;362
000384 e58d6000 STR r6,[sp,#0] ;362
000388 ebfffffe BL GUI_Line ;362
00038c e1a07009 MOV r7,r9 ;363
000390 e1a0800a MOV r8,r10 ;364
000394 e28b0001 ADD r0,r11,#1 ;359
000398 e200b0ff AND r11,r0,#0xff ;359
|L1.924|
00039c e15b0005 CMP r11,r5 ;359
0003a0 bafffff1 BLT |L1.876| ;359
0003a4 eaffffe2 B |L1.820|
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -