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

📄 demo.lst

📁 液晶控制芯片SED1335的控制程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 430          {
 431   1              uint idata i;
 432   1              
 433   1              for(i=x1;i<=x2;i++)
 434   1                      draw_dot(i,y);
 435   1      }
 436          
 437          // 函数功能: 画垂直线
 438          // 横坐标: 固定为 x
 439          // y1: 起始纵坐标; y2: 终点纵坐标
 440          void draw_vertical(uchar y1,uchar y2,int x)
 441          {
 442   1              uchar idata i;
 443   1              
 444   1              for(i=y1;i<=y2;i++)
 445   1                      draw_dot(x,i);
 446   1      }
 447          
 448          // 函数功能:画任意斜率的直线
 449          // 起点坐标: x1:(0~319),y1:(0~239)
 450          // 终点坐标: x2:(0~319),y2:(0~239)
 451          void draw_bias(int x1,uchar y1,int x2,uchar y2)
 452          {
 453   1              uint idata i;
 454   1              int  idata err=0;
 455   1              int  idata delta_x,delta_y;
 456   1              
 457   1              if(y2<y1)       // 此步骤使起点纵坐标小于等于终点纵坐标
 458   1              {       err=x1;
 459   2                      x1=x2;
 460   2                      x2=err;
 461   2                      
 462   2                      i=y1;
 463   2                      y1=y2;
 464   2                      y2=(uchar)i;
 465   2              }
 466   1              
 467   1              delta_x=x2-x1;
 468   1              delta_y=(int)(y2-y1);
 469   1              
 470   1              if(delta_x>=0)
 471   1              {       if(delta_y<=delta_x)    // 斜率 K:0~1
 472   2                      {       for(i=x1;i<x2;i++)
 473   3                              {       draw_dot(x1,y1);
 474   4                                      x1++;
 475   4                                      if(err<0)
 476   4                                              err+=delta_y;
 477   4                                      else
 478   4                                      {       y1++;
 479   5                                              err=err+delta_y-delta_x;
 480   5                                      }
 481   4                              }
 482   3                      }
 483   2                      else                            // 斜率 K>1
 484   2                      {       for(i=y1;i<y2;i++)
 485   3                              {       draw_dot(x1,y1);
 486   4                                      y1++;
 487   4                                      if(err<0)
 488   4                                      {       x1++;
 489   5                                              err=err+delta_y-delta_x;
C51 COMPILER V7.07   DEMO                                                                  01/12/2007 17:28:05 PAGE 9   

 490   5                                      }
 491   4                                      else
 492   4                                              err-=delta_x;
 493   4                              }
 494   3                      }
 495   2              }
 496   1              else if(delta_x<0)
 497   1              {       delta_x=0-delta_x;
 498   2                      
 499   2                      if(delta_y<=delta_x)    // 斜率 K: -1~0
 500   2                      {       for(i=x1;i>x2;i--)
 501   3                              {       draw_dot(x1,y1);
 502   4                                      x1--;
 503   4                                      if(err<0)
 504   4                                              err+=delta_y;
 505   4                                      else
 506   4                                      {       y1++;
 507   5                                              err=err+delta_y-delta_x;
 508   5                                      }
 509   4                              }
 510   3                      }
 511   2                      else                    // 斜率 K < -1
 512   2                      {       for(i=y1;i<y2;i++)
 513   3                              {       draw_dot(x1,y1);
 514   4                                      y1++;
 515   4                                      if(err<0)
 516   4                                      {       x1--;
 517   5                                              err=err+delta_y-delta_x;
 518   5                                      }
 519   4                                      else
 520   4                                              err-=delta_x;
 521   4                              }
 522   3                      }               
 523   2              }
 524   1      }
 525          
 526          
 527          /*void draw_line(int startx,uchar starty,int endx,uchar endy)
 528          {
 529                  register char t,distance;
 530                  int xerr=0,yerr=0,delta_x,
 531                  char delta_y;
 532                  char incx,incy;
 533          
 534          //  compute the distance in both directions
 535                  delta_x=endx-startx;
 536                  delta_y=endy-starty;
 537          
 538          // compute  the direction of the increment ,
 539          // an increment of "0" means either a vertical or horizontal lines 
 540          
 541                  if(delta_x>0) 
 542                          incx=1;
 543                  else if( delta_x==0 ) 
 544                          incx=0;
 545                  else incx=-1;
 546          
 547          
 548                  if(delta_y>0) 
 549                          incy=1;
 550                  else if( delta_y==0 ) 
 551                          incy=0;
C51 COMPILER V7.07   DEMO                                                                  01/12/2007 17:28:05 PAGE 10  

 552                  else incy=-1;
 553          
 554          //  determine which distance is greater
 555                  delta_x = cabs( delta_x );      // 取绝对值
 556                  delta_y = cabs( delta_y );
 557          
 558                  if( delta_x > delta_y ) 
 559                          distance=delta_x;
 560                  else distance=delta_y;
 561          
 562          //draw the line 
 563                  for( t=0;t <= distance+1; t++ ) 
 564                  {
 565                          draw_dot(startx,starty);
 566                  xerr += delta_x;
 567                          yerr += delta_y;
 568                          
 569                          if( xerr > distance ) 
 570                          {
 571                                  xerr-=distance;
 572                          startx+=incx;
 573                          }
 574                          if( yerr > distance ) 
 575                          {
 576                                  yerr-=distance;
 577                          starty+=incy;
 578                          }
 579                  }
 580          }
 581          */
 582          
 583          
 584          // 函数功能:画圆
 585          // 圆心坐标: x0,y0
 586          // 半径:         radius
 587          // 说明:为了不使画圆速度太慢,没有对坐标位置是否超出屏幕范围做判断
 588          //              所以在调用时,应该保证圆周上点的坐标不会超出显示屏幕,否则可能得到错误的显示
 589          void draw_circle(int x0,uchar y0,uchar radius)
 590          {
 591   1              long  idata delta1,delta2;
 592   1              int   idata x1,x2,tempx;
 593   1              uchar idata y1,y2,tempy;
 594   1              
 595   1              x1=0;
 596   1              y1=radius;
 597   1              x2=(int)radius;
 598   1              y2=0;
 599   1              
 600   1              draw_dot(x1+x0,y1+y0);
 601   1              draw_dot(x2+x0,y2+y0);
 602   1              draw_dot(x1+x0,y0-y1);
 603   1              draw_dot(x0-x2,y2+y0);
 604   1              
 605   1              while(1)
 606   1              {
 607   2                      delta1=(x1+1)*(x1+1)+(y1+radius)*(y1-radius)-y1;
 608   2                      x1++;
 609   2                      if(delta1>0)
 610   2                              y1--;
 611   2                      draw_dot(x1+x0,y1+y0);  // 画第 1 象限 45°~90°  圆弧
 612   2                      tempx=x0-x1;
 613   2                      tempy=y0-y1;
C51 COMPILER V7.07   DEMO                                                                  01/12/2007 17:28:05 PAGE 11  

 614   2                      draw_dot(tempx,y1+y0);  // 镜像画第 2 象限 90°~135°  圆弧
 615   2                      draw_dot(tempx,tempy);  // 镜像画第 3 象限 225°~270° 圆弧
 616   2                      draw_dot(x1+x0,tempy);  // 镜像画第 4 象限 270°~315° 圆弧
 617   2                      if(y1==y2)
 618   2                              break;
 619   2      
 620   2                      delta2=(y2+1)*(y2+1)+(x2+radius)*(x2-radius)-x2;
 621   2                      y2++;
 622   2                      if(delta2>0)
 623   2                              x2--;
 624   2                      draw_dot(x2+x0,y2+y0);  // 画第 1 象限 0°~45°  圆弧
 625   2                      tempx=x0-x2;
 626   2                      tempy=y0-y2;
 627   2                      draw_dot(tempx,y2+y0);  // 镜像画第 2 象限 135°~180° 圆弧
 628   2                      draw_dot(tempx,tempy);  // 镜像画第 3 象限 180°~225° 圆弧
 629   2                      draw_dot(x2+x0,tempy);  // 镜像画第 4 象限 315°~360° 圆弧
 630   2                      if(y1==y2)
 631   2                              break;
 632   2              }
 633   1      }
 634          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2274    ----
   CONSTANT SIZE    =    546    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16      22
   IDATA SIZE       =   ----      53
   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 + -