📄 lcd_dis.lst
字号:
226 2 e_y = Offset_x;
227 2 }
228 1 Offset_x = e_x-s_x;
229 1 Offset_y = e_y-s_y;
230 1 Write_Dot_LCD/*Writ_Dot*/(s_x,s_y,BMP_Color);
231 1 if(Offset_x<0)
232 1 {
233 2 Offset_x = s_x-e_x;
234 2 // Err_d = s_x;
235 2 // s_x = e_x;
236 2 // e_x = Err_d;
237 2 Err_d = -1;
238 2 }
239 1 if(Offset_x==0)
240 1 {
C51 COMPILER V8.12 LCD_DIS 06/13/2008 15:12:11 PAGE 5
241 2 while(s_y<e_y)
242 2 {
243 3 s_y++;
244 3 if(s_y>Dis_Y_MAX) return;
245 3 Write_Dot_LCD(s_x,s_y,BMP_Color);
246 3 }
247 2 return;
248 2 }
249 1 else if(Offset_y==0)
250 1 {
251 2 while(s_x!=e_x)
252 2 {
253 3 s_x+=Err_d;
254 3 if(s_x>Dis_X_MAX) return;
255 3 Write_Dot_LCD(s_x,s_y,BMP_Color);
256 3 }
257 2 return;
258 2 }
259 1 if(Offset_x>Offset_y)
260 1 {
261 2 Offset_k += Offset_y;
262 2 while(s_x!=e_x)
263 2 {
264 3 if(Offset_k>0)
265 3 {
266 4 s_y+=1;
267 4 Offset_k += (Offset_y-Offset_x);
268 4 }
269 3 else Offset_k += Offset_y;
270 3 s_x+=Err_d;
271 3 if(s_x>LCD_X_MAX||s_y>LCD_Y_MAX) break;
272 3 Write_Dot_LCD/*Writ_Dot*/(s_x,s_y,BMP_Color);
273 3 }
274 2 }
275 1 else
276 1 {
277 2 Offset_k += Offset_x;
278 2 while(s_y!=e_y)
279 2 {
280 3 if(Offset_k>0)
281 3 {
282 4 s_x+=Err_d;
283 4 Offset_k += (Offset_x-Offset_y);
284 4 }
285 3 else Offset_k += Offset_x;
286 3 s_y+=1;
287 3 if(s_x>LCD_X_MAX||s_y>LCD_Y_MAX) break;
288 3 Write_Dot_LCD/*Writ_Dot*/(s_x,s_y,BMP_Color);
289 3 }
290 2 }
291 1 }
292 #if LCD_DIS_CIRCLE==1
293 //========================================================================
294 // 函数: void W_Red_Dot(unsigned char x,unsigned char y,char a,char b,unsigned char mode)
295 // 描述: 绘制圆的各个像限中的点和线
296 // 参数:
297 // 返回: 无
298 // 备注: 该函数对用户不可见,使用前景色
299 // 版本:
300 // 2006/10/15 First version
301 //========================================================================
302 void W_Red_Dot(DOTBYTE x,DOTBYTE y,DISWORD a,DISWORD b,BYTE mode)
C51 COMPILER V8.12 LCD_DIS 06/13/2008 15:12:11 PAGE 6
303 {
304 1 if(mode > 0)
305 1 {
306 2 Line(x+a,y+b,x-a,y+b);
307 2 Line(x+a,y-b,x-a,y-b);
308 2 }
309 1 else
310 1 {
311 2 PutPixel(x+a,y+b);
312 2 PutPixel(x-a,y+b);
313 2 PutPixel(x+a,y-b);
314 2 PutPixel(x-a,y-b);
315 2 }
316 1 }
317 //========================================================================
318 // 函数: void W_Red_Err(int *a,int *b,int *r)
319 // 描述: 画圆误差计算
320 // 参数:
321 // 返回: 无
322 // 备注: 该函数对用户不可见
323 // 版本:
324 // 2006/10/16 First version
325 //========================================================================
326 void W_Red_Err(DISWORD *a,DISWORD *b,DOTBYTE *r)
327 {
328 1 DISWORD R_Error;
329 1 WORD uiTemp;
330 1 R_Error = (*a+1)*(*a+1);
331 1 uiTemp = (*b)*(*b);
332 1 R_Error += uiTemp;
333 1 uiTemp = (*r)*(*r);
334 1 R_Error -= uiTemp;
335 1 if(R_Error>=0)
336 1 {
337 2 R_Error = R_Error-*b;
338 2 if(R_Error>=0) *b = *b-1;
339 2 }
340 1 *a = *a+1;
341 1 }
342 //========================================================================
343 // 函数: void Circle(unsigned char x,unsigned char y,unsigned char r,unsigned char mode)
344 // 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
345 // 参数:
346 // 返回: 无
347 // 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
348 // 版本:
349 // 2006/10/16 First version
350 //========================================================================
351 void Circle(DOTBYTE x,DOTBYTE y,DOTBYTE r,BYTE mode)
352 {
353 1 DISWORD arx1=0,ary1,arx2,ary2=0;
354 1 // Pos_Switch(&x,&y); //坐标变换
355 1 // x += 4;
356 1 ary1=r;
357 1 arx2=r;
358 1 while(1)
359 1 {
360 2 W_Red_Dot(x,y,arx1,ary1,mode);
361 2 W_Red_Err(&arx1,&ary1,&r);
362 2 if(arx1 == arx2)
363 2 {
364 3 W_Red_Dot(x,y,arx1,ary1,mode);
C51 COMPILER V8.12 LCD_DIS 06/13/2008 15:12:11 PAGE 7
365 3 break;
366 3 }
367 2 W_Red_Dot(x,y,arx2,ary2,mode);
368 2 W_Red_Err(&ary2,&arx2,&r);
369 2 if(arx1 == arx2)
370 2 {
371 3 W_Red_Dot(x,y,arx2,ary2,mode);
372 3 break;
373 3 }
374 2 }
375 1 }
376 #endif
377 //========================================================================
378 // 函数: void Rectangle(DOTBYTE left, DOTBYTE top, DOTBYTE right,
379 // DOTBYTE bottom, BYTE Mode)
380 // 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
381 // 参数: left - 矩形的左上角横坐标,范围0到118
382 // top - 矩形的左上角纵坐标,范围0到50
383 // right - 矩形的右下角横坐标,范围1到119
384 // bottom - 矩形的右下角纵坐标,范围1到51
385 // Mode - 绘制模式,可以是下列数值之一:
386 // 0: 矩形框(空心矩形)
387 // 1: 矩形面(实心矩形)
388 // 返回: 无
389 // 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
390 // 版本:
391 // 2005/05/21 First version
392 //========================================================================
393 void Rectangle(DOTBYTE left, DOTBYTE top, DOTBYTE right, DOTBYTE bottom, BYTE Mode)
394 {
395 1 DOTBYTE uiTemp;
396 1
397 1 if(Mode==0)
398 1 {
399 2 Line(left,top,left,bottom);
400 2 Line(left,top,right,top);
401 2 Line(right,bottom,left+1,bottom);
402 2 Line(right,bottom,right,top+1);
403 2 }
404 1 else
405 1 {
406 2 // Pos_Switch(&left,&top); // 坐标变换
407 2 // Pos_Switch(&right,&bottom); //坐标变换
408 2 if(left>right)
409 2 {
410 3 uiTemp = left;
411 3 left = right;
412 3 right = uiTemp;
413 3 }
414 2 if(top>bottom)
415 2 {
416 3 uiTemp = top;
417 3 top = bottom;
418 3 bottom = uiTemp;
419 3 }
420 2 for(uiTemp=top;uiTemp<=bottom;uiTemp++)
421 2 {
422 3 Line(left,uiTemp,right,uiTemp);
423 3 }
424 2 }
425 1 }
426 //========================================================================
C51 COMPILER V8.12 LCD_DIS 06/13/2008 15:12:11 PAGE 8
427 // 函数: void ClrScreen(BYTE Mode)
428 // 描述: 清屏函数,执行全屏幕清除或填充前景色
429 // 参数: Mode 0:全屏除屏
430 // 1:全屏填充前景色
431 // 返回: 无
432 // 备注:
433 // 版本:
434 // 2007/01/11 First version
435 //========================================================================
436 void ClrScreen(BYTE Mode)
437 {
438 1 if(Mode==0)
439 1 LCD_Fill(LCD_INITIAL_COLOR);
440 1 else
441 1 LCD_Fill(BMP_Color);
442 1 }
443
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1296 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 61
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -