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