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

📄 drawing_line.lst

📁 单片机AT89C51扩展32KSRAM程序
💻 LST
字号:
C51 COMPILER V7.50   DRAWING_LINE                                                          01/10/2008 18:32:35 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DRAWING_LINE
OBJECT MODULE PLACED IN drawing_line.OBJ
COMPILER INVOKED BY: E:\Program Files\keill\C51\BIN\C51.EXE drawing_line.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          #include"reg51.h"
   4          #include<drive_functions.h>
   5          #include<math.h>
   6          #define Graphic_Clear 0x01   //檫除点
   7          #define Graphic_Not 0x02     //反相点
   8          #define Graphic_Draw 0x03        //画点
   9          uchar j=0,i=0;
  10          uchar r=32;
  11          uchar  xdata  zhengxuan[]= {
  12              0x20, 0x23, 0x26, 0x29, 0x2C, 0x2F, 0x32, 0x34,
  13              0x36, 0x39, 0x3A, 0x3C, 0x3D, 0x3E, 0x3F, 0x3F,
  14              0x3F, 0x3F, 0x3F, 0x3E, 0x3D, 0x3B, 0x39, 0x37,
  15              0x35, 0x33, 0x30, 0x2D, 0x2A, 0x27, 0x24, 0x21,
  16              0x1E, 0x1A, 0x17, 0x14, 0x11, 0x0F, 0x0C, 0x09,
  17              0x07, 0x05, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,
  18              0x00, 0x00, 0x01, 0x02, 0x03, 0x05, 0x07, 0x09,
  19              0x0B, 0x0E, 0x11, 0x14, 0x17, 0x1A, 0x1D, 0x20
  20                   }      ;
  21          /***********************在LCD上任意坐标画点********************************/
  22          
  23          void DrawPoint(uchar X,uchar Y,uchar Type)
  24          {                                                                       //X,Y化点的坐标Type画点的类型:反相点,檫除点,画点
  25   1      
  26   1         uchar DX = (Y >> 3);               //计算出属于哪个字节
  27   1         uchar BX = Y - (DX << 3);           //计算出属于字节哪一位
  28   1         uchar TempData = 0;
  29   1      
  30   1      
  31   1         if (X > 63)
  32   1         {
  33   2          chip_select=2;
  34   2            X -= 64;
  35   2         }
  36   1         else
  37   1         {
  38   2            chip_select=1;
  39   2         }
  40   1      
  41   1         SetPage(DX);             //设行地址
  42   1         SetColumn(X);                        //设列地址
  43   1      
  44   1         TempData = ReadData();   //读出所画点所在字节的内容
  45   1      
  46   1         switch (Type)            //对该字节进行相应操作
  47   1         {
  48   2             case Graphic_Clear:
  49   2                                                      TempData &= ~(1<< BX);
  50   2                                                      break;
  51   2            case Graphic_Not:
  52   2                                                      TempData ^= (1<< BX);
  53   2                                                      break;
  54   2            case Graphic_Draw:
  55   2                                                      TempData |= ( 1<< BX);
C51 COMPILER V7.50   DRAWING_LINE                                                          01/10/2008 18:32:35 PAGE 2   

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

 118          void DrawLevel(void)
 119          {
 120   1      
 121   1      for(i=0;i<127;i++){DrawPoint(i,32,Graphic_Draw);}//画水平直线
 122   1      
 123   1      }
 124          
 125          /************************************************************************************/
 126          
 127           void DrawSineWave(void)
 128          {
 129   1              uchar xn=0;
 130   1              uchar yn=32;
 131   1              uchar i,j;
 132   1              uchar xi,yi;
 133   1      
 134   1      P27=1;
 135   1      for(i=0;i<127;i++)
 136   1              {
 137   2                      xi=i;
 138   2                      j=i;
 139   2                      if(j>63)
 140   2                      {
 141   3                      ACC=zhengxuan[j-64];
 142   3                      yi=ACC;
 143   3                      }
 144   2                      else
 145   2                      {
 146   3                  ACC=zhengxuan[j];
 147   3                  yi=ACC;
 148   3                      }
 149   2      
 150   2              P27=1;
 151   2                      DrawLine(xn,yn,xi,yi);
 152   2                      P27=1;
 153   2                      xn=i;
 154   2                      yn=yi;
 155   2      
 156   2                      }
 157   1      
 158   1                      }
 159          /********************** main **********************************************************/
 160          
 161          void main(void)
 162          {
 163   1      P2=0;
 164   1      P27=1;
 165   1      while(1)
 166   1      {
 167   2      DrawSineWave();
 168   2       ClearLCD();
 169   2      }
 170   1      
 171   1      }
 172          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    881    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     64    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.50   DRAWING_LINE                                                          01/10/2008 18:32:35 PAGE 4   

   DATA SIZE        =      7      13
   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 + -