步进电机控制(Proteus仿真+代码

两相四线步进电机控制

原理图:

 控制代码:

#include <REGX52.H>
#define uc unsigned char 
#define ui unsigned int
 sbit E=P3^5;
 sbit RW=P3^4;
 sbit RS=P3^2;
 sbit L=P3^1;						 
 sbit R=P3^0;						
 sbit zhengzhuan=P1^0;
 sbit stopm=P1^1;
 sbit fanzhuan=P1^2;
 sbit speedup1=P1^3;
 sbit speeddown1=P1^4;
 static  step_index;
 ui count1,count2;				   //定时 
 uc speed;						//速度参数 
 uc tag=0;
 uc run=0;
void ground(step);	                      
void stop();
void delay(ui time);
void main(void) 
{  

   P2=0xff;
   P1=0xff;
   P0=0;
   EX1=1;
   EA=1;	                                      
   speed=60;
   while(1)
  {  
     if((run==1))             // 正转 
	 {  
	    ground(step_index);
	    delay(speed);
   	    step_index++;					           //大于7,从头再来 
	    if(step_index>7)
	   	step_index=0; 
	  }
	 if((run==2))	           //反转 
	 {								    
	   ground(step_index);
	   delay(speed);
   	   step_index--;
	   if(step_index<0)							//小于0,从头再来。 
	   	step_index=7;
	  }
	if(tag==2)
	{	
	 speed=speed+10;		               
		if(speed>=200)			  
	 	{ speed=200;					
		 }
	tag=0;
	}
	if(tag==1)
	{	
	 speed=speed-10;		               
		if(speed<=30)			  
	 	{ speed=30;					
		 }
	tag=0;
	}
	
 }
}

void delay(ui time)	                            ///延时程序 
{
	char i=1;
	while(time--)
	for( i=113;i>0;i--);	
}

void key(void) interrupt 2
{ 
  uc i;
  if(speedup1==0)
  tag=1;
  if(speeddown1==0)
  tag=2;
  if(zhengzhuan==0)
  		run=1;
  if(fanzhuan==0)
  		run=2;
	if(stopm==0)
		run=0;
  for(i=0;i<200;i++);		//延时防抖 
   P1=0XFF;
}
void ground(step_index)	 //转步 
{ 
 switch(step_index)
   {
     case 0://0 	  
      P0_0 = 1;		  
      P0_1 = 0;		   
      P0_2 = 0;
      P0_3 = 0;
      break;
	  case 1://0,1  
      P0_0 = 1;
      P0_1 = 1;
      P0_2 = 0;
      P0_3 = 0;
      break;
	  case 2://1
      P0_0 = 0;
      P0_1 = 1;
      P0_2 = 0;
      P0_3 = 0;
      break;
	  case 3://1,2 
      P0_0 = 0;
      P0_1 = 1;
      P0_2 = 1;
      P0_3 = 0;
      break;
	  case 4://2 
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 1;
      P0_3 = 0;
      break;
	  case 5://2,3 
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 1;
      P0_3 = 1;
      break;
	  case 6://3 
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 0;
      P0_3 = 1;
      break;
	  case 7://3,0 
      P0_0 = 0;
      P0_1 = 0;
      P0_2 = 0;
      P0_3 = 1;
  }	
}

有哪里不懂的留言问我奥,我主页里面还有另外一份代码,也是我自己写的

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值