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

📄 lcd_dis.lst

📁 MzL728-240128液晶模块采用T6963C控制芯片的KeilC51的源程序代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -