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

📄 text1.lst

📁 通过插补计算实现在51单片机上控制X-Y机械手臂绘图的功能
💻 LST
字号:
C51 COMPILER V6.12  TEXT1                                                                  09/12/2008 22:11:44 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN .\Text1.OBJ
COMPILER INVOKED BY: E:\学习软件\keil\C51\BIN\C51.EXE .\Text1.C DEBUG OBJECTEXTEND

stmt level    source

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

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

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

 180   4      				}
 181   3      
 182   3      					fm=fm-ye;
 183   3      		
 184   3      		 }
 185   2      
 186   2      		  if(fm<0)
 187   2      		 {
 188   3      		 	if(xiangxian==1||xiangxian==2)
 189   3      				{
 190   4      					ym++;
 191   4      					up();
 192   4      				}
 193   3      
 194   3      			if(xiangxian==3||xiangxian==4)
 195   3      				{
 196   4      					ym--;
 197   4      					down();
 198   4      
 199   4      				}
 200   3      
 201   3      					fm=fm+xe;
 202   3      		
 203   3      		 }
 204   2      		 }
 205   1      
 206   1      	
 207   1      }
 208          
 209          void mode_yh(int fangxiang)
 210          {
 211   1      	int xiangxian;
 212   1      	for(;;)
 213   1      		{
 214   2      			if(keyx>0)
 215   2        			 {
 216   3           			key=keyx;   
 217   3           			while(keyx!=0) 
 218   3      	   			{keyx=0; time(3000);}
 219   3      				if(key==16)
 220   3      				break;
 221   3           			keyproc();
 222   3      
 223   3      			 }
 224   2      		}
 225   1      	 xm=para[0]-para[4];//01起始23重点45原点
 226   1      	 ym=para[1]-para[5];
 227   1      	 xe=para[2]-para[4];
 228   1      	 ye=para[3]-para[5];
 229   1      	 xo=0;
 230   1      	 yo=0;
 231   1          dingwei();//画笔初始化
 232   1      	 xx=para[2];
 233   1      	 yy=para[3];
 234   1      	 fm=0;
 235   1        	while(xm!=xe||ym!=ye)
 236   1      	 {	
 237   2      	 	 if((ym-yo)>0&&(xm-xo)>0)
 238   2      	 xiangxian=1;
 239   2      		 if((ym-yo)>0&&(xm-xo)<0)
 240   2      	 xiangxian=2;	
 241   2      	 	 if((ym-yo)<0&&(xm-xo)<0)
C51 COMPILER V6.12  TEXT1                                                                  09/12/2008 22:11:44 PAGE 5   

 242   2      	 xiangxian=3;
 243   2      		 if((ym-yo)<0&&(xm-xo)>0)
 244   2      	 xiangxian=4;	
 245   2      	 pen=0x80;
 246   2        	
 247   2      	 	 if(fm>=0)
 248   2      		 {
 249   3      		 	if((fangxiang==1&&xiangxian==1)||(fangxiang==0&&xiangxian==4))
 250   3      				{
 251   4      					xm--;
 252   4      					left();
 253   4      					fm=fm-2*xm+1;
 254   4      				}
 255   3      
 256   3      			if((xiangxian==3&&fangxiang==1)||(xiangxian==2&&fangxiang==0))
 257   3      				{
 258   4      					xm++;
 259   4      					right();	
 260   4      					fm=fm-2*xm+1;
 261   4      
 262   4      				}
 263   3      			if((fangxiang==0&&xiangxian==1)||(fangxiang==1&&xiangxian==2))
 264   3      				{
 265   4      					ym--;
 266   4      					down();
 267   4      					fm=fm-2*ym+1;
 268   4      				}
 269   3      
 270   3      			if((xiangxian==3&&fangxiang==0)||(xiangxian==4&&fangxiang==1))
 271   3      				{
 272   4      					ym++;
 273   4      					up();	
 274   4      					fm=fm-2*ym+1;
 275   4      
 276   4      				}
 277   3      				
 278   3      		
 279   3      		 }
 280   2      
 281   2      		  if(fm<0)
 282   2      		 {
 283   3      		 		if((fangxiang==0&&xiangxian==3)||(fangxiang==1&&xiangxian==2))
 284   3      				{
 285   4      					xm--;
 286   4      					left();
 287   4      					fm=fm+2*xm+1;
 288   4      				}
 289   3      
 290   3      			if((xiangxian==1&&fangxiang==0)||(xiangxian==4&&fangxiang==1))
 291   3      				{
 292   4      					xm++;
 293   4      					right();	
 294   4      					fm=fm+2*xm+1;
 295   4      
 296   4      				}
 297   3      			if((fangxiang==1&&xiangxian==3)||(fangxiang==0&&xiangxian==4))
 298   3      				{
 299   4      					ym--;
 300   4      					down();
 301   4      					fm=fm+2*ym+1;
 302   4      				}
 303   3      
C51 COMPILER V6.12  TEXT1                                                                  09/12/2008 22:11:44 PAGE 6   

 304   3      			if((xiangxian==1&&fangxiang==1)||(xiangxian==2&&fangxiang==2))
 305   3      				{
 306   4      					ym++;
 307   4      					up();	
 308   4      					fm=fm+2*ym+1;
 309   4      
 310   4      				}
 311   3      		
 312   3      		 }
 313   2      		 }
 314   1      
 315   1      }
 316          
 317          void fuwei()
 318          {
 319   1      
 320   1      }
 321          
 322          void mypic()
 323          {
 324   1      
 325   1      }
 326          
 327          void modeproc()
 328          {
 329   1      	if(key>0)
 330   1        {
 331   2          switch(key)
 332   2      	{
 333   3      	  case 1: mode_zx();break;
 334   3      	  case 2: mode_yh(shun);break;
 335   3      	  case 3: mode_yh(ni);break;
 336   3      	  case 4: mypic();break;
 337   3      	  case 5: fuwei();	
 338   3      	 /* case 5: modi(ptr,4);break;
 339   3      	  case 6: modi(ptr,5);break;
 340   3      	  case 7: modi(ptr,6);break;
 341   3      	  case 8: modi(ptr,7);break;
 342   3      	  case 9: modi(ptr,8);break;
 343   3      	  case 10:modi(ptr,9);break;
 344   3      
 345   3      	  case 11:if(ptr<7) ptr++;break;
 346   3      	  case 12:if(ptr>0) ptr--;break;
 347   3      
 348   3      	  case 13:para[ptr]+=1;break;
 349   3      	  case 14:para[ptr]-=1;break;
 350   3      	  case 15:para[ptr]+=10;break;
 351   3      	  case 16:para[ptr]-=10;break;*/
 352   3      	}
 353   2        } 
 354   1        key=0;
 355   1      }
 356          
 357          
 358          
 359          void keyproc()
 360          {
 361   1        if(key>0)
 362   1        {
 363   2          switch(key)
 364   2      	{
 365   3      	  case 1: modi(ptr,0);break;
C51 COMPILER V6.12  TEXT1                                                                  09/12/2008 22:11:44 PAGE 7   

 366   3      	  case 2: modi(ptr,1);break;
 367   3      	  case 3: modi(ptr,2);break;
 368   3      	  case 4: modi(ptr,3);break;
 369   3      	  case 5: modi(ptr,4);break;
 370   3      	  case 6: modi(ptr,5);break;
 371   3      	  case 7: modi(ptr,6);break;
 372   3      	  case 8: modi(ptr,7);break;
 373   3      	  case 9: modi(ptr,8);break;
 374   3      	  case 10:modi(ptr,9);break;
 375   3      
 376   3      	  case 11:if(ptr<7) ptr++;break;
 377   3      	  case 12:if(ptr>0) ptr--;break;
 378   3      
 379   3      	  /*case 13:para[ptr]+=1;break;
 380   3      	  case 14:para[ptr]-=1;break;
 381   3      	  case 15:para[ptr]+=10;break;
 382   3      	  case 16:para[ptr]-=10;break;*/
 383   3      
 384   3      	}
 385   2        } 
 386   1        key=0;
 387   1      }
 388          
 389          void timer0() interrupt 1
 390          {
 391   1        TH0=tim>>8; TL0=tim; display(); 
 392   1      }
 393          
 394          void main()
 395          { 
 396   1        TMOD=0x11;IE=0x82;
 397   1        TH0=tim>>8;  TL0=tim; TR0=1;
 398   1        ptr=0; 
 399   1        distran();  
 400   1        for(;;)
 401   1        {para[0]=xx;
 402   2        para[1]=yy;
 403   2        for(i=2;i<6;i++)
 404   2        para[i]=0;
 405   2         if(keyx>0)
 406   2         {
 407   3           key=keyx;   
 408   3           while(keyx!=0) 
 409   3      	   {keyx=0; time(3000);}
 410   3           modeproc(); 
 411   3         }
 412   2         time(1000);
 413   2         distran();
 414   2        } 
 415   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2305    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     86       6
   IDATA SIZE       =   ----    ----
   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 + -