俺手头没有步进电机的硬件驱动电路,只好用LED测试了,测试通过喽
只不过程序中的延时 时间比较长,你可以随意修改
另外,你没说是什么步进电机,和控制方式
所以,本人就按照常用的 两相步进电机写的,方式为 8拍
程序设计思路为,设立一个变量来记录状态,然后再根据状态去执行不同语句
具体程序如下,如有不懂之处可以继续追问或私密我加好友
若满意,帮到了你,请记得采纳,谢谢!
/***************************************************************************/
#include
sbit S1=P3^2; sbit S2=P3^3; sbit S3=P3^4; sbit S4=P3^5; sbit S5=P3^6;
int i=0,t=0,fe=0;
char LD[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};//两相8拍编码
/***************************************************************************/
void delay(int t)//延时函数
{
int j;
for(;t>0;t--)
{for(j=200;j>0;j--);}
}
/***************************************************************************/
void main(void)
{
while(1) //主循环内,只执行端口赋值
{
P2=LD[i]; //对 P2 端口赋值,点亮 LED
//方向判断,停止是0,所以没必要编写停止语句
if(fe==1) //如果是反转
{
i++;if(i>7){i=0;}//正向流动
delay(100);//延时一会,即旋转的速度
}
if(fe==2) //如果是正转
{
i--;if(i<0){i=7;}//反向流动
delay(100);//延时一会,即旋转的速度
}
if(fe==3) //如果是延时
{
delay(1000);//延时一会,再反转
for(t=0;t<100;t++)//反转 100个脉冲
{
i++;if(i>7){i=0;}//正向流动
P2=LD[i];
delay(100);//延时一会,即旋转的速度
}
fe=0;//反转结束后,则停止
}
//按键部分
if(S5==0){fe=0;}//停止
if(S4==0){fe=1;}//反转
if(S3==0){fe=2;}//正转
if(S2==0){fe=3;}//延时
if(S1==0){fe=2;}//正转
}
}