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

📄 lcd_dis.lst

📁 由普通单片机驱动控制显示的 3.5 英寸 TFT 液 晶模块——MzT35C1 模块;并为其配备了完整的驱动函数库
💻 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              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.16   LCD_DIS                                                               12/22/2008 00:11:05 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                  Writ_Dot/*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                  Writ_Dot/*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>Dis_X_MAX||s_y>Dis_Y_MAX) break;
 272   3                              Writ_Dot/*Write_Dot_LCD*/(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>Dis_X_MAX||s_y>Dis_Y_MAX) break;
 288   3                              Writ_Dot/*Write_Dot_LCD*/(s_x,s_y,BMP_Color);
 289   3                      }
 290   2              }    
 291   1      }
 292          #if LCD_DIS_CIRCLE==1
              //========================================================================
              // 函数: void W_Red_Dot(unsigned char x,unsigned char y,char a,char b,unsigned char mode)
              // 描述: 绘制圆的各个像限中的点和线
              // 参数: 
              // 返回: 无
              // 备注: 该函数对用户不可见,使用前景色
              // 版本:
              //      2006/10/15      First version
              //========================================================================
              void W_Red_Dot(DOTBYTE x,DOTBYTE y,DISWORD a,DISWORD b,BYTE mode)
C51 COMPILER V8.16   LCD_DIS                                                               12/22/2008 00:11:05 PAGE 6   

              {
                  if(mode > 0)
                  {
                     Line(x+a,y+b,x-a,y+b);
                     Line(x+a,y-b,x-a,y-b);
                  }
                  else
                  {
                     PutPixel(x+a,y+b);
                     PutPixel(x-a,y+b);
                     PutPixel(x+a,y-b);
                     PutPixel(x-a,y-b);
                  }
              }
              //========================================================================
              // 函数: void W_Red_Err(int *a,int *b,int *r)
              // 描述: 画圆误差计算
              // 参数: 
              // 返回: 无
              // 备注: 该函数对用户不可见
              // 版本:
              //      2006/10/16      First version
              //========================================================================
              void W_Red_Err(DISWORD *a,DISWORD *b,DOTBYTE *r)
              {
                      DISWORD R_Error;
                      WORD uiTemp;
                      R_Error = (*a+1)*(*a+1);
                      uiTemp = (*b)*(*b);
                      R_Error += uiTemp;
                      uiTemp = (*r)*(*r);
                      R_Error -= uiTemp;
                      if(R_Error>=0)
                      {
                              R_Error = R_Error-*b;
                              if(R_Error>=0) *b = *b-1;
                      }
                      *a = *a+1;
              }
              //========================================================================
              // 函数: void Circle(unsigned char x,unsigned char y,unsigned char r,unsigned char mode)
              // 描述: 以x,y为圆心R为半径画一个圆(mode = 0) or 圆面(mode = 1)
              // 参数: 
              // 返回: 无
              // 备注: 画圆函数执行较慢,如果MCU有看门狗,请作好清狗的操作
              // 版本:
              //      2006/10/16      First version
              //========================================================================
              void Circle(DOTBYTE x,DOTBYTE y,DOTBYTE r,BYTE mode)
              {
                      DISWORD arx1=0,ary1,arx2,ary2=0;
              //      Pos_Switch(&x,&y);                                              //坐标变换
              //      x += 4;
                      ary1=r;
                      arx2=r;
                      while(1)
                      {
                      W_Red_Dot(x,y,arx1,ary1,mode);
                      W_Red_Err(&arx1,&ary1,&r);
                              if(arx1 == arx2)
                              {
                                      W_Red_Dot(x,y,arx1,ary1,mode);
C51 COMPILER V8.16   LCD_DIS                                                               12/22/2008 00:11:05 PAGE 7   

                                      break; 
                              }
                              W_Red_Dot(x,y,arx2,ary2,mode);
                              W_Red_Err(&ary2,&arx2,&r);
                              if(arx1 == arx2) 
                              {
                                      W_Red_Dot(x,y,arx2,ary2,mode);
                                      break;
                              }
                      }
              }       
              #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,bottom);
 402   2                      Line(right,bottom,right,top);
 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.16   LCD_DIS                                                               12/22/2008 00:11:05 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        =   1701    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =     16      47
   DATA SIZE        =   ----    ----
   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 + -