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

📄 002.lst

📁 通过插补计算实现在51单片机上控制X-Y机械手臂绘图的功能
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.06   002                                                                   09/16/2008 20:43:48 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 002
OBJECT MODULE PLACED IN 002.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 002.c DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include <math.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          #define tim 65536-2000
   6          sbit dis0 =P2^4;
   7          sbit dis1 =P2^5;
   8          sbit dis2 =P2^6;
   9          sbit dis3 =P2^7;
  10          sbit dis4 =P3^4;
  11          int pen1;
  12          sbit key3 =P2^0;
  13          sbit key2 =P2^1;
  14          sbit key1 =P2^2;
  15          sbit key0 =P2^3;
  16          int disp[8];
  17          uchar key,keyx,ts;
  18          int para[10],ptr=0;
  19          uchar code ledtab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  20          uchar code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
  21                                         0x80,0x90,0xed,0x6b,0x0f,0xe3,0x4f,0x4d};
  22          void modeproc(),keyproc(),time(uint);
  23          int xm,ym,xe,ye,fm,xo,yo,x2,y2,shun=0,ni=1,i,autopic=0;
  24          int xx=0,yy=0;
  25          
  26          //==================电机驱动=================================
  27          char movx[6]={0x01,0x03,0x02,0x06,0x04,0x05};//movx[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
  28          char movy[6]={0x10,0x30,0x20,0x60,0x40,0x50};
  29          //char movx1[6]={0x81,0x83,0x82,0x86,0x84,0x85};
  30          //char movy1[6]={0x90,0xb0,0xa0,0xe0,0xc0,0xd0};
  31          char inderx=0,indery=0;
  32          char pen=0x80;
  33          void right()
  34          {inderx++;
  35   1      if(inderx>5)
  36   1      inderx=0;
  37   1      
  38   1      P0=movx[inderx]|pen1;
  39   1      
  40   1      time(1000);
  41   1      }
  42          void left()
  43          {inderx--;
  44   1      if(inderx<0)
  45   1      inderx=5;
  46   1      P0=movx[inderx]|pen1;
  47   1      
  48   1      time(1000);
  49   1      }
  50          void up()
  51          {indery++;
  52   1      if(indery>5)
  53   1      indery=0;
  54   1      
  55   1      P0=movy[indery]|pen1;
C51 COMPILER V7.06   002                                                                   09/16/2008 20:43:48 PAGE 2   

  56   1      
  57   1      time(1000);
  58   1      }
  59          void down()
  60          {indery--;
  61   1      if(indery<0)
  62   1      indery=5;
  63   1      
  64   1      P0=movy[indery]|pen1;
  65   1      
  66   1      
  67   1      time(1000);
  68   1      }
  69          //=======驱动结束===================================
  70          
  71          
  72          void time(uint t)
  73          {
  74   1        uint i;
  75   1        for(i=0;i<t;i++);
  76   1      }
  77          
  78          void distran()
  79          {
  80   1        disp[3]=distab[para[ptr]%10];//s4
  81   1        disp[2]=distab[(para[ptr]/10)%10];//s3
  82   1        disp[1]=distab[(para[ptr]/100)%10];//s2
  83   1        disp[0]=distab[(para[ptr]/1000)%10];//s1
  84   1        disp[4]=~ledtab[ptr];
  85   1      }
  86          
  87          void display()
  88          { 
  89   1        static dis=0;distran();
  90   1        dis=(dis+1)%5;
  91   1        dis0=1;dis1=1;dis2=1;dis3=1;dis4=1;
  92   1        P1=disp[dis]; 
  93   1        switch(dis)
  94   1        {
  95   2          case 0: dis0=0; break;
  96   2              case 1: dis1=0; break;
  97   2              case 2: dis2=0; break;
  98   2              case 3: dis3=0; break;
  99   2              case 4: dis4=0; break;
 100   2        }
 101   1        if(!key0) keyx=dis+1;
 102   1        if(!key1) keyx=dis+5; 
 103   1        if(!key2) keyx=dis+9;
 104   1        if(!key3) keyx=dis+13; 
 105   1      }
 106          
 107          void modi(uchar p,uchar x)
 108          {
 109   1        para[p]=(para[p]%1000)*10+x;
 110   1      }
 111          
 112          void dingwei()
 113          {
 114   1       while(xx!=xm||yy!=ym)//画笔定位到设定值
 115   1               {
 116   2                      if(xx<xm)
 117   2                              {
C51 COMPILER V7.06   002                                                                   09/16/2008 20:43:48 PAGE 3   

 118   3                                      xx++;
 119   3                                      pen1=0x80;
 120   3                                      right();
 121   3                              }
 122   2                       if(xx>xm)
 123   2                              {
 124   3                                      xx--;
 125   3                                      pen1=0x80;
 126   3                                      left();
 127   3                              }
 128   2                      if(yy<ym)
 129   2                              {
 130   3                                      yy++;
 131   3                                      pen1=0x80;
 132   3                                      up();
 133   3                              }
 134   2                       if(yy>ym)
 135   2                              {
 136   3                                      yy--;
 137   3                                      pen1=0x80;
 138   3                                      down();
 139   3                              }
 140   2      
 141   2               }
 142   1      }
 143          
 144          void mode_zx()
 145          {
 146   1              int xiangxian,bushu;//,xe1,ye1;
 147   1      
 148   1       if(!autopic){
 149   2              ptr=0;
 150   2              para[0]=1000;
 151   2              for(;;)
 152   2                      {
 153   3                              if(keyx>0)
 154   3                               {
 155   4                              key=keyx;   
 156   4                              while(keyx!=0) 
 157   4                                      {keyx=0; time(3000);}
 158   4                                      if(key==16)
 159   4                                      break;
 160   4                              keyproc();
 161   4      
 162   4                               }
 163   3                      }
 164   2              para[0]=para[0]*1000/325*10;
 165   2              para[1]=para[1]*1000/325*10;
 166   2              para[2]=para[2]*1000/325*10;
 167   2              para[3]=para[3]*1000/325*10;
 168   2              }       
 169   1               xm=para[0];
 170   1               ym=para[1];
 171   1               dingwei();//画笔初始化
 172   1               xm=0;
 173   1               ym=0;
 174   1               xe=para[2]-para[0];
 175   1               ye=para[3]-para[1];
 176   1              // xe1=xe;
 177   1               //ye1=ye;
 178   1          bushu=abs(xe)+abs(ye);
 179   1               xx=para[2];//下次开始前笔的位置坐标
C51 COMPILER V7.06   002                                                                   09/16/2008 20:43:48 PAGE 4   

 180   1               yy=para[3];
 181   1               fm=0;  
 182   1                       if((ye>ym)&&(xe>xm))
 183   1               xiangxian=1;
 184   1                       if((ye>ym)&&(xe<xm))
 185   1               {xiangxian=2;}//xe=-xe;        
 186   1                       if((ye<ym)&&(xe<xm))
 187   1               {xiangxian=3;}//ye=-ye;xe=-xe;}
 188   1                       if((ye<ym)&&(xe>xm))
 189   1               {xiangxian=4;}//ye=-ye;}
 190   1                 pen1=0;
 191   1      
 192   1      
 193   1                      if(xe==0)//终点坐标在Y轴上(新坐标)
 194   1                      {if(ye>=0)
 195   2                              {while(ym!=ye)
 196   3                                      { ptr=6;
 197   4                                   para[6]=bushu--;
 198   4                                        
 199   4                                              ym++;
 200   4                                              up();
 201   4                                      }
 202   3                              }
 203   2                       if(ye<0)
 204   2                              {
 205   3                                      while(ym!=ye)
 206   3                                              {
 207   4                                               ptr=6;
 208   4                                   para[6]=bushu--;
 209   4                                                      ym--;
 210   4                                                      down();
 211   4                                              }
 212   3                              }
 213   2                       }
 214   1      
 215   1      
 216   1              if(ye==0)//终点坐标在X轴上(新坐标)
 217   1                      {if(xe>=0)
 218   2                              {while(xm!=xe)
 219   3                                      {
 220   4                                       ptr=6;
 221   4                                   para[6]=bushu--;
 222   4                                      xm++;
 223   4                                              right();
 224   4                                      }
 225   3                              }
 226   2                       if(xe<0)
 227   2                              {
 228   3                                      while(xm!=xe)
 229   3                                              {        ptr=6;
 230   4                                   para[6]=bushu--;
 231   4                                                      xm--;
 232   4                                                      left();
 233   4                                              }
 234   3                              }
 235   2                       }
 236   1      
 237   1                      while(xm!=xe||ym!=ye)
 238   1               {
 239   2                       if(fm>=0)
 240   2                       {
 241   3                              if(xiangxian==2||xiangxian==3)
C51 COMPILER V7.06   002                                                                   09/16/2008 20:43:48 PAGE 5   

 242   3                                      {

⌨️ 快捷键说明

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