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

📄 start.c

📁 基于51单片机控制步进电机的程序
💻 C
字号:
#include<reg51.h>
#include<start.h>
#include<key.h>

void delay500us(float count)	//100us*count
{
    unsigned int i,j;
	for(j=0;j<count;j++)
	  for(i=0;i<17;i++)
	  ;     
}

////////////////////////刹车、反转、正转都可以写成函数

void shache(void)
{
   	P2_2=1;
    P2_0=1;
    P2_5=1;
    P2_4=1;	 //两个电机刹停
	P2_2=1;
	P2_0=1;
	P2_5=1;
	P2_4=1;
}
void zheng(float a)
{
    float z=a;
	P2_2=1;
	P2_0=0;
	P2_5=1;
	P2_4=0;
	delay500us(z);	 //正转
	P2_2=0;
	P2_0=0;
	P2_5=0;
	P2_4=0;
	delay500us(z);
}
void fan(float b)
{
    float z=b;
    P2_2=0;
	P2_0=1;
	P2_5=0;
	P2_4=1;
	delay500us(z);
	P2_2=0;
	P2_0=0;
	P2_5=0;
	P2_4=0;
	delay500us(z);
}
void maichong0(unsigned int x,unsigned int y,float z)  //x和y分别是脉冲的周期个数,z是脉冲的周期
{

    float a;
	z=2000*z;//计算count
	a=z;  //           500us*count
    P2_1=1;	//两个使能端有效;
	P2_3=1;
    if(zhengbujin==1||fanbujin==1)
	{
        if(zhengbujin==1) //先正传后反转
	    {
		    unsigned int j;
		    for(j=0;j<x;j++)  //正传
			{
                zheng(a);
			}
			shache();
		    for(j=0;j<y;j++)	//反转
			{
                fan(a);
			}

		}

		else if(fanbujin==1)   //先反后正
		{
		    unsigned int j;
		    for(j=0;j<y;j++)  //反传
			{
                fan(a);
			}
			shache();
		    for(j=0;j<x;j++)	//正转
			{
                zheng(a);
		    }
   
	    }
	}
	else if(zhengjuli==1||fanjuli==1)
	{
	    
        if(zhengjuli==1) //先正传后反转
	    {
		    unsigned int j;
		    for(j=0;j<x;j++)  //正传
			{
                zheng(a);
			}
			shache();
		    for(j=0;j<y;j++)	//反转
			{
                fan(a);

		     }
		 }

		 else if(fanjuli==1)//先反后正
		 {
		    unsigned int j;
		    for(j=0;j<y;j++)  //反传
			{
                fan(a);
			}
			shache();
		    for(j=0;j<x;j++)	//正转
			{
                zheng(a);	
		    }
	    }
      }
}

void startset(void)
{
	float sudu;
    switch(csudu)
    {
	  case 1: sudu=1.0;break;
	  case 2: sudu=2.0;break;
	  case 3: sudu=3.0;break;
	  case 4: sudu=4.0;break;
	  case 5: sudu=5.0;break;
	  case 6: sudu=6.0;break;
	  case 7: sudu=7.0;break;
	  case 8: sudu=8.0;break;
	  case 9: sudu=9.0;break;
	  default:break;
    }


    if(zhengbujin==1||fanbujin==1)
	{	

	    sudu=0.45/(sudu*20);//求得高电平低电平的时间
	    maichong0(czhengbujin,cfanbujin,sudu);
	}

	else if(zhengjuli==1 || fanjuli==1)    
	{
		unsigned int czhengjuli0=czhengjuli*10/0.45;	//把距离转化成步数
		unsigned int cfanjuli0=cfanjuli*10/0.45;		 //把距离转化成步数,一步就是一个周期的脉冲
		sudu=0.45/(sudu*20);//求得高电平低电平的时间
		maichong0(czhengjuli0,cfanjuli0,sudu) ;
	}
}

⌨️ 快捷键说明

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