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

📄 drawing_line.lst

📁 电机的自动控制程序
💻 LST
字号:
C51 COMPILER V7.50   DRAWING_LINE                                                          03/31/2008 16:29:42 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DRAWING_LINE
OBJECT MODULE PLACED IN drawing_line.OBJ
COMPILER INVOKED BY: E:\p-g\keil\C51\BIN\C51.EXE drawing_line.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          #include"reg51.h"
   4          #include<at0.h>
   5          #include<math.h>
   6          #define Graphic_Clear 0x01   //檫除点
   7          #define Graphic_Not 0x02     //反相点
   8          #define Graphic_Draw 0x03        //画点
   9          
  10          uchar j=0,i=0;
  11          uchar r=32;
  12          /***********************在LCD上任意坐标画点********************************/
  13          
  14          void DrawPoint(uchar X,uchar Y,uchar Type) 
  15          {                                                                       //X,Y化点的坐标Type画点的类型:反相点,檫除点,画点
  16   1                                                          
  17   1         uchar DX = (Y >> 3);               //计算出属于哪个字节 
  18   1         uchar BX = Y - (DX << 3);           //计算出属于字节哪一位 
  19   1         uchar TempData = 0; 
  20   1          
  21   1          
  22   1         if (X > 63) 
  23   1         { 
  24   2          chip_select=2;
  25   2            X -= 64; 
  26   2         } 
  27   1         else 
  28   1         { 
  29   2            chip_select=1; 
  30   2         } 
  31   1      
  32   1         SetPage(DX);             //设行地址
  33   1         SetColumn(X);                        //设列地址
  34   1          
  35   1         TempData = ReadData();   //读出所画点所在字节的内容
  36   1          
  37   1         switch (Type)            //对该字节进行相应操作
  38   1         { 
  39   2             case Graphic_Clear:
  40   2                                                      TempData &= ~(1<< BX); 
  41   2                                                      break; 
  42   2            case Graphic_Not:
  43   2                                                      TempData ^= (1<< BX); 
  44   2                                                      break; 
  45   2            case Graphic_Draw: 
  46   2                                                      TempData |= ( 1<< BX);  
  47   2                                                              break;
  48   2                default:                              break;
  49   2         } 
  50   1          
  51   1         SetPage(DX);            //设置行地址
  52   1         SetColumn(X);                        //设置列地址
  53   1         WriteData(TempData);         //把修改后的字节送回LCD,达到画点目的
  54   1      } 
  55          
C51 COMPILER V7.50   DRAWING_LINE                                                          03/31/2008 16:29:42 PAGE 2   

  56          /********插值法画任意两点之间直线的函数,函数中只用加减法,程序运行效率很高**********/
  57          
  58          DrawLine(uchar x1,uchar y1,uchar x2,uchar y2)
  59          {                           //x1,y1起点坐标;x2,y2终点坐标;
  60   1          uchar x,y; 
  61   1          uchar d_x,d_y;      
  62   1          char err=0;
  63   1          uchar temp=0;
  64   1      
  65   1          if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
  66   1          d_y=y2-y1;
  67   1          if (d_y==0)
  68   1              {
  69   2              if (x1>x2) {x=x1;x1=x2;x2=x;}
  70   2              for ( x=x1;x<=x2;x++ ) DrawPoint(x,y1,Graphic_Draw);
  71   2              }
  72   1          else
  73   1              {
  74   2          if(x2>=x1){temp=1;d_x=x2-x1;}else d_x=x1-x2;
  75   2          x=x1;y=y1;DrawPoint(x,y,Graphic_Draw);
  76   2          if(temp&&(d_y<=d_x))
  77   2              while(x!=x2)
  78   2                  {if(err<0){x=x+1;err=err+(y2-y);}
  79   3                  else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}
  80   3                  DrawPoint(x,y,Graphic_Draw);
  81   3                  }
  82   2          else if(temp&&(d_y>d_x))
  83   2              while(y!=y2)
  84   2                  {d_x=x2-x;d_y=y2-y; 
  85   3                  if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
  86   3                  else {y=y+1;err=err-d_x;}
  87   3                  DrawPoint(x,y,Graphic_Draw);
  88   3                  }
  89   2          else if(!temp&&(d_y<=d_x))
  90   2              while(x!=x2)
  91   2                  {d_x=x-x2;d_y=y2-y; 
  92   3                  if(err<0){x=x-1;err=err+d_y;}
  93   3                  else {x=x-1;y=y+1;err=err+d_y-d_x;}
  94   3                  DrawPoint(x,y,Graphic_Draw);
  95   3                  }
  96   2          else if(!temp &&(d_y>d_x))
  97   2              while(y!=y2)
  98   2                  {d_x=x-x2;d_y=y2-y; 
  99   3                  if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
 100   3                  else {y=y+1;err=err-d_x;}
 101   3                  DrawPoint(x,y,Graphic_Draw);
 102   3                  }
 103   2              }    
 104   1      }                                  
 105          
 106          
 107          /***********************************************************************/
 108          
 109          void DrawLevel(void)
 110          {
 111   1      
 112   1      for(i=0;i<127;i++){DrawPoint(i,32,Graphic_Draw);}//画水平直线
 113   1      
 114   1      }
 115          
 116          /************************************************************************************/
 117          
C51 COMPILER V7.50   DRAWING_LINE                                                          03/31/2008 16:29:42 PAGE 3   

 118          void DrawSineWave(void)
 119          {
 120   1              uchar xn=0;
 121   1              uchar yn=32;
 122   1              uchar i;
 123   1              uchar xi,yi;
 124   1      for(i=0;i<127;i++)
 125   1              {
 126   2                      xi=i;
 127   2                      yi=(sin(i*0.1)*32)+32;
 128   2      
 129   2                      DrawLine(xn,yn,xi,yi);      //在一系列零散的点上,两点两点之间连线,从而得到一条曲线
 130   2                      
 131   2                      xn=i;
 132   2                      yn=yi;
 133   2                      
 134   2                      }  
 135   1                      }
 136          
 137          
 138          
 139          void main(void)
 140          {
 141   1      
 142   1      while(1)
 143   1      {
 144   2      DrawLine(63,0,63,63);
 145   2      DrawSineWave();
 146   2      }
 147   1      
 148   1      }
 149          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    903    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -