.h:
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define A1 P0_4 //定义步进电机连接端口
#define B1 P0_5
#define C1 P0_6
#define D1 P0_7
//改变这个参数可以调整电机转速,数字越小,转速越快,力矩越小
uchar ucSpeed = 2; //调整速度 建议在1-10范围内
uchar FFW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};//正转旋转相序表
uchar REV[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};//反向旋转相序表
void MotorData(uchar data);
void Delay_ms(uint x);
//顺时针转动
void MotorFFW(float n);
//逆时针转动
void MotorREV(float n);
void ContrlStepMotor(int state, float count);
void InitIO(void);
.c:
#include "Stepper.h"
void MotorData(uchar data)
{
A1 = 1&(data>>4);
B1 = 1&(data>>5);
C1 = 1&(data>>6);
D1 = 1&(data>>7);
}
//ms延时函数
void Delay_ms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<535;j++);
}
//顺时针转动
void MotorFFW(float n)
{
unsigned char i;
unsigned int j;
int movie_count=(int)(8*64*n);
for (j=0; j<movie_count; j++)
{
for (i=0; i<8; i++)
{
MotorData( FFW[i]);
Delay_ms(ucSpeed);
}
}
}
//逆时针转动
void MotorREV(float n)
{
unsigned char i;
unsigned int j;
int movie_count=(int)(8*64*n);
for (j=0; j<movie_count; j++)
{
for (i=0; i<8; i++)
{
MotorData(REV[i]);
Delay_ms(ucSpeed);
}
}
}
/****************************************************************************
* 名 称: InitIO()
* 功 能: 初始化IO口程序
* 入口参数: state=0正转 1反转
****************************************************************************/
void ContrlStepMotor(int state, float count)
{
if(state == 0)
{
MotorFFW(count);
}
else
{
MotorREV(count);
}
}
/****************************************************************************
* 名 称: InitIO()
* 功 能: 初始化IO口程序
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitIO(void)
{
P0SEL &= 0x0F; //P04 05 06 07定义为普通IO
P0DIR |= 0xF0; //P04 05 06 07定义为输出
}
void main(void)
{
InitIO();
//改变这个参数可以调整电机转速,数字越小,转速越快,力矩越小
ucSpeed = 2; //调整速度建议在1-10范围内,数字越小转速越快力矩越小
while(1)
{
ContrlStepMotor(0, 1);//正转1圈
Delay_ms(500);
ContrlStepMotor(1, 1);//反转1圈
Delay_ms(500);
}
}