c语言编写步进电机步数程序6,单片机步进电机程序问题

/*************************************************************************************

*  标题:  步进电机试验一                                                                                                                         *

*                                                                                                                                                                          *

*    通过本例程了解步进马达使用及驱动程序编写                                                                                 *

*;   单双八拍工作方式:                                                                    *

*;   A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度)                                                                       *

*    J14短路冒需断开                                                                       *

*  请学员一定要消化掉本例程                                                                    *

*

**************************************************************************************/

#include "reg52.h"

//Motor

sbit A = P1^0;          //定义管脚

sbit b = P1^1;

sbit C = P1^2;

sbit D = P1^3;

///

//步进电机驱动

unsigned char MotorStep=0;

unsigned int  MotorTimer = 0;

unsigned int  MotorDelay,Speed=1,TIM,CT;

#define speed 8   // 调整速度 数值不要设的太低 低了会引起震动。

/*****************************************************

*            初始化马达                                                                 *

******************************************************/

void InitMotor()

{

A = 1;

b = 1;

C = 1;

D = 1;

}

void SetMotor()

{

//  if(Speed == 0) return;

MotorDelay=Speed;        //调整速度

switch(MotorStep)

{

case 0:

if(TIM)   // A

{

A = 0;                    //0xf1

b = 1;

C = 1;

D = 1;

MotorStep = 1;

TIM=0;

}

break;

case 1:                 // AB

if(TIM)

{

A = 0;                   //0xf3

b = 0;

C = 1;

D = 1;

MotorStep = 2;

TIM=0;

}

break;

case 2:           //B

if(TIM)

{

A = 1;

b = 0;                  //0xf2

C = 1;

D = 1;

MotorStep = 3;

TIM=0;

}

break;

case 3:                //BC

if(TIM)

{

A = 1;

b = 0;                    //0xf6

C = 0;

D = 1;

MotorStep = 4;

TIM=0;

}

break;

case 4:                 //C

if(TIM)

{

A = 1;

b = 1;                    //0xf4

C = 0;

D = 1;

MotorStep = 5;

TIM=0;

}

break;

case 5:                          //CD

if(TIM)

{

A = 1;

b = 1;                    //0xfc

C = 0;

D = 0;

MotorStep = 6;

TIM=0;

}

break;

case 6:                          //D

if(TIM)

{

A = 1;

b = 1;                    //0xf8

C = 1;

D = 0;

MotorStep = 7;

TIM=0;

}

break;

case 7:                        //DA

if(TIM)

{

A = 0;

b = 1;                    //0xf9

C = 1;

D = 0;

MotorStep = 0;

TIM=0;

}

break;

}

}

void system_Ini()

{

TMOD|= 0x11;

TH0=0xDC; //11.0592M

TL0=0x00;

IE = 0x8A;

TR0  = 1;

}

main()

{ system_Ini();

InitMotor();

while(1)

{

SetMotor();

}

}

/************************************************

*                                                                                                *

*              定时中断延时                                                    *

************************************************/

void Tzd(void) interrupt 1

{

TH0 = 0xfe;    //11.0592

TL0 = 0x33;

if( CT++==speed)

{TIM=1;

CT=0;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值