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

📄 bskz.c

📁 这是9个步进电机控制程序,每个都编译通过,并在使用中,可以共同商讨.联系:guanggu346 @163.com
💻 C
字号:
//步进电机变速(加速,匀速,减速)控制
//2007年6月16日
//王志炎

#include<reg51.h>
sbit A=P1^6;//第一相
sbit D=P1^7;//第二相
sbit H=P3^2;//第三相
sbit C=P3^3;//第四相
sbit I=P1^4;//高电平正转,低电平反转
unsigned char j;
unsigned char t;

void Delay(unsigned char i)
{
do
{
TH0 = 0xFF;
TL0 = 0xF0;
TR0 = 1; //启动定时器
while ( !TF0 ); //等待定时器溢出
TR0 = 0; //停止定时器
TF0 = 0; //清除溢出标志
} while ( --i!= 0 ); //循环t 次
}

void z_biansu(unsigned char t)//正转变速
{
for(j=0;j<4;j++)							

switch(j)
{
case 0:
     D=1;
     H=0;
	 C=0;
     A=0;
Delay(30+t*2);
break;
case 1:
     D=0;
     H=1;
	 C=0;
     A=0;
Delay(30+t*2);
break;
case 2:
     D=0;
     H=0;
	 C=1;
     A=0;
Delay(30+t*2);
break;
case 3:
     D=0;
     H=0;
	 C=0;
     A=1;
Delay(30+t*2);
break;
default:break;
}
}
void f_biansu(unsigned char t)//反转变速
{
for(j=0;j<4;j++)							

switch(j)
{
case 0:
     D=0;
     H=0;
	 C=0;
     A=1;
Delay(30+t*2);
break;
case 1:
     D=0;
     H=0;
	 C=1;
     A=0;
Delay(30+t*2);
break;
case 2:
     D=0;
     H=1;
	 C=0;
     A=0;
Delay(30+t*2);
break;
case 3:
     D=1;
     H=0;
	 C=0;
     A=0;
Delay(30+t*2);
break;
default:break;
}
}

void z_yunsu()//正转匀速
{
for(j=0;j<4;j++)							
switch(j)
{
case 0:
     D=1;
     H=0;
	 C=0;
     A=0;
Delay(30);
break;
case 1:
     D=0;
     H=1;
	 C=0;
     A=0;
Delay(30);
break;
case 2:
     D=0;
     H=0;
	 C=1;
     A=0;
Delay(30);
break;
case 3:
     D=0;
     H=0;
	 C=0;
     A=1;
Delay(30);
break;
default:break;
}

}

void f_yunsu()//反转匀速
{
for(j=0;j<4;j++)						

switch(j)
{
case 0:
     D=0;
     H=0;
	 C=0;
     A=1;
Delay(30);
break;
case 1:
     D=0;
     H=0;
	 C=1;
     A=0;
Delay(30);
break;
case 2:
     D=0;
     H=1;
	 C=0;
     A=0;
Delay(30);
break;
case 3:
     D=1;
     H=0;
	 C=0;
     A=0;
Delay(30);
break;
default:break;
}
}

//主函数
 void main(void)
{
if(I==1)//正转
  {
  for(t=30;t>0;t--)//正转加速,走30步
  z_biansu(t); 


for(t=200;t>0;t--)//正转匀速,走200步
  z_yunsu();

   for(t=0;t<30;t++)//正转减速,走30步
   z_biansu(t); 
}

else //反转
{
for(t=30;t>0;t--)//反转加速,走30步
  f_biansu(t);
   
for(t=200;t>0;t--)//反转匀速,走200步

 f_yunsu();

for(t=0;t<30;t++)//反转减速,走30步
 f_biansu(t);
}  
}

⌨️ 快捷键说明

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