⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_dis.lst

📁 使用单片机8051开发2.4寸tft lcd。
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -