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

📄 step motor.c

📁 这是一个简单的步进电机的程序,用C51编写,主要可以定时控制电机进行180度的旋转
💻 C
字号:
#include<reg51.h>
#define uchar unsigned char

#define positive 0
#define minus 1
sbit direction_select=P3^6;
bit dir_flag=1;
uchar code Pulse_table[4]={0xf8,0xf4,0xf2,0xf1};//{0xfc,0xf6,0xf3,0xf9};
uchar code Pulse_table_m[4]={0xf1,0xf2,0xf4,0xf8};//{0xf9,0xf3,0xf6,0xfc};
extern bit reset_flag;
sbit key_cycleless=P3^3;
sbit key_pause=P3^5;
sbit key_start=P3^4;
extern delay();
extern bit Glint_enable_flag;
extern bit Pause_flag;

/*
void delaymotorf()//////////////////////////////////////////
{
 int k;
 for(k=0;k<3000;k++);
}
*/
void delaymotor()//////////////////////////////////////////
{
 int k;
 for(k=0;k<4000;k++);
}



void step_motor()///////////////////////////转90度
{
 bit direction;
 uchar i,j;
 TR0=0;
 if(direction_select==0&&dir_flag==1)
 {
  direction=positive;
  dir_flag=0;
 }
  if(direction_select==1&&dir_flag==1)
 {
  direction=minus;
  dir_flag=0;
 }
 if(direction==positive)
 {
  
  for(j=0;j<24;j++)//13
  {
   for(i=0;i<4;i++)
   {
    
    P0=Pulse_table[i];
    /*
    if(j<2||j>22)
    delaymotor();
	else 
	*/
	delaymotor();

	if(key_pause==0)
	{
	 delay();
	 if(key_pause==0)
	 {
	  Pause_flag=1;
      Glint_enable_flag=1;
	  TR0=0;
	 while(1)
	 {
	  if(key_start==0)
	  {
       Pause_flag=0;
       Glint_enable_flag=0;
	  //TR0=1;
	  break;
	  }
      if(reset_flag==1)
      {
       //reset_flag=0;
       break;
      }
	 }
	 }
	}
    
   }
  }
  P0=0;
  direction=minus;
 }
 else
 if(direction==minus)
 {
 /*
  P0=0xf3;//@@@@@@@@@@@@@@@@@@@@@2
  delaymotor();
  P0=0xf6;
  delaymotor();
  P0=0xfc;
  delaymotor();
  */
  for(j=0;j<24;j++)//12
  {
   for(i=0;i<4;i++)
   {
    P0=Pulse_table_m[i];
    /*
	if(j<2||j>22)
    delaymotor();
	else 
    */
	delaymotor();
  

	if(key_pause==0)
	{
	 delay();
	 if(key_pause==0)
	 {
	   Pause_flag=1;
       Glint_enable_flag=1;
	  TR0=0;
	 while(1)
	 {
	  if(key_start==0)
	  {
       Pause_flag=0;
       Glint_enable_flag=0;
	  //TR0=1;
	  break;
	  }
      if(reset_flag==1)
      {
       //reset_flag=0;留待外面置0
       break;
      }
	 }
	 }
	}

   }
  }
P0=0;//@@@@@@@@@@@22
  direction=positive;
 }
 if(reset_flag==1)
 {
  TR0=0;
  if(key_cycleless==1)//不是无限循环状态,则外面不会用到reset_flag,置0
  reset_flag=0;
 }
 else
 TR0=1;//正常,开启计时
}

⌨️ 快捷键说明

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