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

📄 drawing_line.lst

📁 LCD12864上显示波形.rar
💻 LST
字号:
C51 COMPILER V8.02   DRAWING_LINE                                                          08/10/2009 11:20:59 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DRAWING_LINE
OBJECT MODULE PLACED IN drawing_line.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE drawing_line.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************** LCD12864曲线显示*******************************************/
   2          /*********作者:王胜文。QQ:95201972  email:nunk@163.com 希望与大家交流2007。08。03**********/
   3          
   4          
   5          #include<reg51.h>
   6          #include<drive_functions.h>
   7          #include<math.h>
   8          //#include<get_keys.h>
   9          #define Graphic_Clear 0x01   //檫除点
  10          #define Graphic_Not 0x02     //反相点
  11          #define Graphic_Draw 0x03        //画点
  12          
  13          uchar j=0,i=0;
  14          uchar r=32;
  15          /***********************在LCD上任意坐标画点********************************/
  16          
  17          void DrawPoint(uchar X,uchar Y,uchar Type) 
  18          {                                                                       //X,Y化点的坐标Type画点的类型:反相点,檫除点,画点
  19   1                                                          
  20   1         uchar DX = (Y >> 3);               //计算出属于哪个字节 
  21   1         uchar BX = Y - (DX << 3);           //计算出属于字节哪一位 
  22   1         uchar TempData = 0; 
  23   1          
  24   1          
  25   1         if (X > 63) 
  26   1         { 
  27   2          chip_select=2;
  28   2            X -= 64; 
  29   2         } 
  30   1         else 
  31   1         { 
  32   2            chip_select=1; 
  33   2         } 
  34   1      
  35   1         SetPage(DX);             //设行地址
  36   1         SetColumn(X);                        //设列地址
  37   1          
  38   1         TempData = ReadData();   //读出所画点所在字节的内容
  39   1          
  40   1         switch (Type)            //对该字节进行相应操作
  41   1         { 
  42   2             case Graphic_Clear:
  43   2                                                      TempData &= ~(1<<BX); 
  44   2                                                      break; 
  45   2            case Graphic_Not:
  46   2                                                      TempData ^= (1 << BX); 
  47   2                                                      break; 
  48   2            case Graphic_Draw: 
  49   2                                                      TempData |= (1 << BX);  
  50   2                                                              break;
  51   2                default:                              break;
  52   2         } 
  53   1          
  54   1         SetPage(DX);            //设置行地址
  55   1         SetColumn(X);                        //设置列地址
C51 COMPILER V8.02   DRAWING_LINE                                                          08/10/2009 11:20:59 PAGE 2   

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

 118          
 119          /************************************************************************************/
 120          
 121          void DrawSineWave(void)
 122          {
 123   1              uchar xn=0;
 124   1              uchar yn=32;
 125   1              uchar i;
 126   1              uchar xi,yi;
 127   1      for(i=0;i<127;i++)
 128   1              {
 129   2                      xi=i;
 130   2                      yi=(sin(i*0.1)*32)+32;
 131   2      
 132   2                      DrawLine(xn,yn,xi,yi);      //在一系列零散的点上,两点两点之间连线,从而得到一条曲线
 133   2                      
 134   2                      xn=i;
 135   2                      yn=yi;
 136   2                      
 137   2                      }  
 138   1                      }
 139          
 140          /*************************************************************************************/
 141          
 142          void DrawCircle(uchar x0,uchar y0,uchar r)//x0,y0为圆心坐标,r为圆半径
 143          {
 144   1      uchar xn,yn,xi,yi;
 145   1      unsigned int j;
 146   1      
 147   1      xn=cos(0)*r+x0;
 148   1      yn=sin(0)*r+y0;
 149   1      
 150   1      for(j=0;j<630;j++)
 151   1              {
 152   2                      xi=(cos(j*0.01)*r)+x0;
 153   2                      yi=(sin(j*0.01)*r)+y0;
 154   2      
 155   2                      DrawLine(xn,yn,xi,yi);      //在一系列零散的点上,两点两点之间连线,从而得到一条曲线
 156   2                      
 157   2                      xn=xi;
 158   2                      yn=yi;
 159   2      }
 160   1      
 161   1      }
 162          
 163          /**************************************************************************************************/
 164          
 165          void DrawRetic(uchar x0,uchar y0,uchar x1,uchar y1)//画正方形,x0,y0为左上角坐标,x1,y1为右下角坐标
 166          {
 167   1              uchar i;
 168   1              for(i=0;i<=x1-x0;i++){  DrawPoint(x0+i,y0,Graphic_Draw);  DrawPoint(x0+i,y1,Graphic_Draw);  }
 169   1              for(i=0;i<=y1-y0;i++){  DrawPoint(x0,y0+i,Graphic_Draw);  DrawPoint(x1,y0+i,Graphic_Draw);  }
 170   1              }
 171          
 172          
 173          /**************************************************************************************************/
 174          
 175          void DrawTrigle(uchar x1,uchar y1,uchar x2,uchar y2,uchar x3,uchar y3)//画三角形,三个坐标为三角形顶点
 176          {
 177   1      //      DrawLine(x1,y1,x2,y2);
 178   1      //      DrawLine(x2,y2,x3,y3);
 179   1      //      DrawLine(x1,y1,x3,y3);
C51 COMPILER V8.02   DRAWING_LINE                                                          08/10/2009 11:20:59 PAGE 4   

 180   1              
 181   1      }
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'x1': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'y1': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'x2': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'y2': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'x3': unreferenced local variable
*** WARNING C280 IN LINE 175 OF DRAWING_LINE.C: 'y3': unreferenced local variable
 182          
 183          /******************************** main **********************************************************/
 184          
 185          void main(void)
 186          {
 187   1      
 188   1      ClearLCD();
 189   1      
 190   1      while(1)
 191   1      {
 192   2      
 193   2      ClearLCD();
 194   2      DrawLevel();
 195   2      DrawLine(63,0,63,63);
 196   2      DrawSineWave();
 197   2      
 198   2      //DrawCircle(63,32,r);
 199   2      //r-=4;
 200   2      //}
 201   2      
 202   2      //DrawRetic(10,10,30,30);
 203   2      //DrawTrigle(0,0,80,60,120,0);
 204   2      }
 205   1      
 206   1      }
 207          


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


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

⌨️ 快捷键说明

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