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

📄 lcd_dis.lst

📁 本代码实现的是12864图形LCD模块
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -