#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//4相8拍
uchar code tableCCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时针旋转相序表
uchar code tableCW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //顺时针旋转相序表
sbit S3=P3^5; //反转 按键
sbit S4=P3^6; //正转 按键
sbit S5=P3^4; //停止 按键
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void motorTurn_ccw() //转1圈,逆时针
{
uint i,j;
for(j=0;j<8;j++) //电机内部的转子旋转一周
{
if(S5==0) //按键没处理抖动
{
break; //如果停止键按下,退出此循环
}
for(i=0;i<8;i++) //旋转45度, 8*5.625°=45°
{
P1=tableCCW[i];
delay(500); //调节转速
}
}
}
void motorTurn_cw() //转1圈 ,顺时针
{
uint i,j;
for(j=0;j<8;j++) //8*45°=360°
{
if(S5==0)
{
break; //如果停止键按下,退出此循环
}
for(i=0;i<8;i++) //旋转45度,8*5.625°=45°
{
P1=tableCW[i];
delay(500); //调节转速
}
}
}
void main()
{
uint r;
uint N=64; //减速步进电机,减速比1/64,所以N=64时,步进电机外主轴转一圈
//我们的P1口接有8个led灯,先锁定,不要让它们亮 ,节能环保
while(1)
{
if(S3==0) //按键了
{
for(r=0;r<N;r++)
{
motorTurn_ccw(); //电机逆时针转
if(S5==0)
{
break; //俺S5键立马停止
}
}
}
else if(S4==0)
{
for(r=0;r<N;r++)
{
motorTurn_cw(); //电机顺时针转
if(S5==0)
{
break;
}
}
}
else
{
P1=0xf0; //平时也是停止的
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
非常感谢。。。。。。。。。。。。。。。。
一周热门 更多>