📄 lcd_dis.lst
字号:
220 1 if(Offset_x>Offset_y)
221 1 {
222 2 while(s_x!=e_x)
223 2 {
224 3 if(Offset_k>0)
225 3 {
226 4 s_y+=1;
227 4 Offset_k += (Offset_y-Offset_x);
228 4 }
229 3 else Offset_k += Offset_y;
230 3 s_x+=Err_d;
231 3 if(s_x>LCD_X_MAX||s_y>LCD_Y_MAX) break;
232 3 Writ_Dot(s_x,s_y,BMP_Color);
233 3 }
234 2 }
235 1 else
236 1 {
237 2 while(s_y!=e_y)
238 2 {
239 3 if(Offset_k>0)
240 3 {
241 4 s_x+=Err_d;
C51 COMPILER V8.02 LCD_DIS 06/27/2007 01:39:54 PAGE 5
242 4 Offset_k += (Offset_x-Offset_y);
243 4 }
244 3 else Offset_k += Offset_x;
245 3 s_y+=1;
246 3 if(s_x>=LCD_X_MAX||s_y>=LCD_Y_MAX) break;
247 3 Writ_Dot(s_x,s_y,BMP_Color);
248 3 }
249 2 }
250 1 }
251 /*
252 //========================================================================
253 // 函数: void W_DB_Line(int *p)
254 // 描述: 画一个任意多边形
255 // 参数: p
256 // 返回: 该函数无效
257 // 备注: 使用前景色
258 // 版本:
259 // 2006/10/15 First version
260 //========================================================================
261 void W_DB_Line(int *p)
262 {
263 int Dot_sun,i;
264 Dot_sun = *p++;
265 i = 0;
266 while((i ++) < Dot_sun)
267 {
268 W_line((*p >> 8)&0xff,*(p + 1)&0xff,(*(p + 1)>>8)&0xff,*(p + 1)&0xff);
269 p += 1;
270 }
271 }*/
272
273 //========================================================================
274 // 函数: void W_Red_Dot(int x,int y,int a,int b,int mode)
275 // 描述: 绘制圆的各个像限中的点和线
276 // 参数:
277 // 返回: 无
278 // 备注: 该函数对用户不可见,使用前景色
279 // 版本:
280 // 2006/10/15 First version
281 //========================================================================
282 void Line_f(int s_x,int s_y,int e_x);//,int e_y);
283 void W_Red_Dot(int x,int y,int a,int b,int mode)
284 {
285 1 if(mode > 0)
286 1 {
287 2 Line_f(x+a,y+b,x-a);//,y+b);
288 2 Line_f(x+a,y-b,x-a);//,y-b);
289 2 }
290 1 else
291 1 {
292 2 PutPixel(x+a,y+b);
293 2 PutPixel(x-a,y+b);
294 2 PutPixel(x+a,y-b);
295 2 PutPixel(x-a,y-b);
296 2 }
297 1 }
298 //========================================================================
299 // 函数: void W_Red_Err(int *a,int *b,int *r)
300 // 描述: 画圆误差计算
301 // 参数:
302 // 返回: 无
303 // 备注: 该函数对用户不可见
C51 COMPILER V8.02 LCD_DIS 06/27/2007 01:39:54 PAGE 6
304 // 版本:
305 // 2006/10/16 First version
306 //========================================================================
307 void W_Red_Err(int *a,int *b,int *r)
308 {
309 1 int R_Error;
310 1 unsigned int uiTemp;
311 1 R_Error = (*a+1)*(*a+1);
312 1 uiTemp = (*b)*(*b);
313 1 R_Error += uiTemp;
314 1 uiTemp = (*r)*(*r);
315 1 R_Error -= uiTemp;
316 1 if(R_Error>=0)
317 1 {
318 2 R_Error = R_Error-*b;
319 2 if(R_Error>=0) *b = *b-1;
320 2 }
321 1 *a = *a+1;
322 1 }
323 //========================================================================
324 // 函数: void Circle(int x,int y,int r,int mode)
325 // 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
326 // 参数:
327 // 返回: 无
328 // 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
329 // 版本:
330 // 2006/10/16 First version
331 //========================================================================
332 void Circle(unsigned int x,unsigned int y,int r,int mode)
333 {
334 1 int arx1=0,ary1,arx2,ary2=0;
335 1 Pos_Switch(&x,&y); //坐标变换
336 1 x += 4;
337 1 ary1=r;
338 1 arx2=r;
339 1 while(1)
340 1 {
341 2 W_Red_Dot(x,y,arx1,ary1,mode);
342 2 W_Red_Err(&arx1,&ary1,&r);
343 2 if(arx1 == arx2)
344 2 {
345 3 W_Red_Dot(x,y,arx1,ary1,mode);
346 3 break;
347 3 }
348 2 W_Red_Dot(x,y,arx2,ary2,mode);
349 2 W_Red_Err(&ary2,&arx2,&r);
350 2 if(arx1 == arx2)
351 2 {
352 3 W_Red_Dot(x,y,arx2,ary2,mode);
353 3 break;
354 3 }
355 2 }
356 1 }
357 //========================================================================
358 // 函数: void Rectangle(unsigned left, unsigned top, unsigned right,
359 // unsigned bottom, unsigned Mode)
360 // 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
361 // 参数: left - 矩形的左上角横坐标,范围0到118
362 // top - 矩形的左上角纵坐标,范围0到50
363 // right - 矩形的右下角横坐标,范围1到119
364 // bottom - 矩形的右下角纵坐标,范围1到51
365 // Mode - 绘制模式,可以是下列数值之一:
C51 COMPILER V8.02 LCD_DIS 06/27/2007 01:39:54 PAGE 7
366 // 0: 矩形框(空心矩形)
367 // 1: 矩形面(实心矩形)
368 // 返回: 无
369 // 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
370 // 版本:
371 // 2005/05/21 First version
372 //========================================================================
373 void Rectangle(unsigned left, unsigned top, unsigned right, unsigned bottom, unsigned Mode)
374 {
375 1 unsigned uiTemp;
376 1 Pos_Switch(&left,&top); // 坐标变换
377 1 Pos_Switch(&right,&bottom); //坐标变换
378 1 if(left>right)
379 1 {
380 2 uiTemp = left;
381 2 left = right;
382 2 right = uiTemp;
383 2 }
384 1 if(top>bottom)
385 1 {
386 2 uiTemp = top;
387 2 top = bottom;
388 2 bottom = uiTemp;
389 2 }
390 1 if(Mode==0)
391 1 {
392 2 Line(left,top,left,bottom);
393 2 Line(left,top,right,top);
394 2 Line(right,bottom,left+1,bottom);
395 2 Line(right,bottom,right,top+1);
396 2 }
397 1 else
398 1 {
399 2 for(uiTemp=top;uiTemp<=bottom;uiTemp++)
400 2 {
401 3 Line_f(left,uiTemp,right);//,uiTemp);
402 3 }
403 2 }
404 1 }
405 //========================================================================
406 // 函数: void Writ_Dot(int x,int y,unsigned int Color)
407 // 描述: 填充以x,y为坐标的象素
408 // 参数: x X轴坐标 y Y轴坐标 Color 像素颜色
409 // 返回: 无
410 // 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
411 // 本函数提供可进行坐标变换的接口
412 // 版本:
413 // 2006/10/15 First version
414 //========================================================================
415 void Writ_Dot(int x,int y,unsigned int Color)
416 {
417 1 #if LCD_XY_Switch == 0
418 1 #if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
419 1 Write_Dot_LCD(x,y,Color);
420 1 #endif
421 1 #if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Write_Dot_LCD(LCD_X_MAX - x,y,Color);
#endif
424 1 #if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Write_Dot_LCD(x,LCD_Y_MAX - y,Color);
#endif
427 1 #if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
C51 COMPILER V8.02 LCD_DIS 06/27/2007 01:39:54 PAGE 8
Write_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y,Color);
#endif
430 1 #endif
431 1 #if LCD_XY_Switch == 1
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
Write_Dot_LCD(y,x,Color);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Write_Dot_LCD(y,LCD_Y_MAX - x,Color);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Write_Dot_LCD(LCD_X_MAX - y,x,Color);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
Write_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x,Color);
#endif
#endif
445 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -