目标:51+298n+电机转一圈+按键检测
可以完整带动298n模块,
//*********************************************
//Developer:Saber
//Project:Motor Control
//Time:2018/4/18
//*********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
static unsigned int count;
static unsigned int endcount;
//八拍驱动方式正转表 A-B- --> B- --> B-A --> A --> AB --> B
// --> BA- --> A- --> A-B-
uchar upstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};
//四拍驱动方式正转表 A --> B --> A- --> B-
uchar upstep4_table[]={0x08,0x02,0x06,0x01};
void delay(uint ims); //变量延时函数
void Interrupt0_Init(); //中断0初始化
void MotorSpeedOrDirection(uint var, uchar state); //控制电机转速和方向
void ConStep(uchar var); //步进控制器
void MotorStop(void); //停止
void main()
{
unsigned int sum=0;
P1 = 0x00;
count = 0;
Interrupt0_Init();
while(1)
{
MotorSpeedOrDirection(1, 0);
}
}
//******************************
// 步进电机停止函数
//作用:停止
//******************************
void MotorStop(void)
{
P1 = 0x00;
}
//******************************
// 外部中断0初始化函数
//作用:初始化外部中断
//******************************
void Interrupt0_Init()
{
EA = 1;
TMOD = 0x11;
ET0 = 1;
// TH0=0xFF;
// TL0=0x28;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR0=1;
}
//******************************
// 中断处理函数
//作用:定时器0的中断处理
//******************************
void timeint(void) interrupt 1
{
// TH0=0xFF;
// TL0=0x28; //216----234us
// 定时器定时1ms
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
count++;
}
//******************************
//
//延时i ms
//******************************
void delay(uint ims)
{
endcount=ims;
count=0;
do{}while(count<endcount);
}
//******************************
// 步进电机驱动函数
//作用:通过变量var控制电动机的转速高低,通过变量state判断电动机的正反转
// state:0 正转,state: 1 反转
//使用8拍能够实现比较平滑的转动,使用4拍时电机震动比较大。
//******************************
void MotorSpeedOrDirection(uint var, uchar state)
{
uchar i=0;
if(!state)
{
for(i=0; i<8; i++)
{
P1=upstep8_table[i];
delay(var);
}
}else{
for(i=7; i>0; --i)
{
P1=upstep8_table[i];
delay(var);
}
}
}
//******************************
// 步进控制函数
//作用:通过变量var控制旋转圈速
//******************************
void ConStep(uchar var)
{
uchar i=0,j=0,m=0,k=0;
while(k++<var)
{
for(i=0;i<20;i++)
{
for(m=0;m<20;m++)
{
P1=upstep8_table[j];
j++;
if(j>=8) //每8次一个循环
j=0;
delay(1);
}
}
}
}
修改后的
//*********************************************
//Developer:Saber
//Project:Motor Control
//Time:2018/4/18
//*********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//八拍驱动方式正转表 A-B- --> B- --> B-A --> A --> AB --> B
// --> BA- --> A- --> A-B-
uchar upstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};
uchar i=0;
void main()
{
if(i<=8)
{
P1=upstep8_table[i];
i++;
}
else
{
i=0;
}
}
问题是:电机一直响,不转。
没有电机引脚初始化