百度知道 - 信息提示
求;用51单片机编写最简单的程序,C语言,使步进电机转动,间歇式转动,快慢交替转动
编一个简单的吧,控制两相电机。#include#define uchar unsigned charuchar step[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};void delay(uchar sd){uchar i,j;for(i=0;i<sd;i++)for(j=0;j<120jj++);}main(){uchar i,j;while(1) { for(j=0;j<10;j++) for(i=0;i<8;i++) { P0=step[i]; delay(3); } for(j=0;j<10;j++) for(i=0;i<8;i++) { P0=step[i]; delay(6); } }}求;用51单片机编写最简单的程序,C语言,使步进电机转动,间歇式转动,快慢交替转动
求一个用c51单片机控制57步进电机的程序,希望能够左右旋转。谢谢!!
/*************************************************************************************
* 标题: 步进电机试验一(双极性步进电机) *
* *
*; 单相四拍通电驱动时序: *
*; 正转: A/ B A B/
* 反转: B/ A B A/ *
*
* UDN2916电流控制真值表:
* I0 I1 输出电流
* L L 最大
* H L 最大*2/3
* L H 最大*1/3
* H H 0 *
**************************************************************************************/
#include "reg52.h"
#define speed 2
//Motor
sbit PH1 = P1^0; //定义管脚
sbit PH2 = P1^1;
sbit I01 = P1^2;
sbit I11 = P1^3;
sbit I02 = P1^4;
sbit I12 = P1^5;
sbit key = P2^0;//接按钮 正转
sbit key2 = P2^1;//接按钮 停止
sbit key3 = P2^2;//接按钮 反转
void delay(int time);
/***************************************
函数功能:产生单相四拍脉冲控制步进机
**************************************/
void delay10ms(int time)
{
int i,j;
for(j=0; j <= time; j++)
for(i =0 ; i <= 1800; i++);
}
void Go(int try)
{
int j;
for(j=0; j <=try; j++)
{
//A反,b0
PH1 = 0; //PH1为0 则A线圈为反向电流
I01 = 0;
I11 = 0; //以最大电流输出
PH2 = 0; //PH2为0 则B线圈为反向电流
I02 = 1;
I12 = 1; //输出0
delay(2);
//0 a0,bz
PH1 = 0; //PH1为0 则A线圈为反向电流
I01 = 1; //输出0
I11 = 1;
PH2 = 1; //PH2为1 则B线圈为正电流
I02 = 0; //以最大电流输出
I12 = 0;
delay(speed);
//B az,b0
PH1 = 1; //PH1为1 则A线圈为正向电流
I01 = 0; //以最大电流输出
I11 = 0;
PH2 = 1; //PH2为1 则B线圈为正向电流
I02 = 1; //输出0
I12 = 1;
////
delay(speed);
//0 a0,bf
PH1 = 1; //PH1为1 则A线圈为正向电流
I01 = 1; //输出0
I11 = 1;
PH2 = 0; //PH2为0 则B线圈为反向电流
I02 = 0;
I12 = 0;
delay(2);
}
}
void back(int try)
{
int j;
for(j=0; j <=try; j++)
{
//b
PH2 = 0; //b 反
I02 = 0;
I12 = 0; //以最大电流输出
PH1 = 0; //a反
I01 = 1;
I11 = 1; //输出0
delay(2);
//0
PH2 = 0; //b
I02 = 1; //输出0
I12 = 1;
PH1 = 1; //a
I01 = 0; //以最大电流输出
I11 = 0;
delay(speed);
//a
PH1 = 1; //PH1为1 则A线圈为正向电流
I01 = 1; //以最大电流输出
I11 = 1;
PH2 = 1; //PH2为1 则B线圈为正向电流
I02 = 0; //输出0
I12 = 0;
////
delay(speed);
//0
PH1 = 0; //PH1为1 则A线圈为正向电流
I01 = 1; //以最大电流输出
I11 = 1;
PH2 = 1; //PH2为0 则B线圈为反向电流
I02 = 0;
I12 = 0;
delay(2);
}
}
/*******************延时函数****************************/
void delay(int time)
{
int i,j;
for(j=0; j <= time; j++)
for(i =0 ; i <= 2000; i++);
}
void main()
{
int star,star2;
while(1)
{
if(key==0)
{
delay10ms(2) ;
if(key==0)
{
star=1;
}
}
//////////////////
if(key3==0)
{
delay10ms(2) ;
if(key3==0)
{
star2=1;
}
}
////////////////////
if(key2==0)
{
// delay10ms(1) ;
if(key2==0)
{
star=0;
star2=0;
}
}
while(star==1&&key2==1)
{
Go(1); //步进电机运行
star=0;
}
while(star2==1&&key2==1)
{
back(1); //步进电机运行
//star2=0;
}
}
}