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