c语言编程a4988驱动步进电机,A4988步进电机单片机驱动程序

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

* 实 验 名 :步进电机实验

* 实验说明 :电机启动、停止、正转、反转

* 实验平台 :51单片机开发板

* 连接方式 :pulse接P10  DIR接P11 KYE1接P20 KYE2接P21 KYE3接P22 KYE4接P23 ENABLE接P12 MS1-3接P13-P14

* 注    意 :本例程使用了中断定时器,中断介绍会在下一实验中说明

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

#include

#include

#define FOSC 11059200L //晶振设置,默认使用11.0592M Hz

//#define FOSC 12000000L //晶振设置,使用12M Hz

//#define FOSC 24000000L //晶振设置,使用24M Hz

#define TIME_MS 1 //设定定时时间 ms ,在11.0592M晶振下,不易超过60ms

//IO接口定义

sbit pulse = P1^0;//脉冲信号

sbit Dir   = P1^1; //正反转

sbit EN    = P1^2;

sbit MS1   = P1^3;

sbit MS2   = P1^4;

sbit MS3   = P1^5;

sbit KEY1 = P2^0;  //启动

sbit KEY2 = P2^1;  //停止

sbit KEY3 = P2^2;  //正转

sbit KEY4 = P2^3;  //反转

//全局变量定义

unsigned char count=0;

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

* 函 数 名 :Delayms

* 函数功能 :实现 ms级的延时

* 输    入 :ms

* 输    出 :无

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

void Delayms(unsigned int ms)

{

unsigned int i,j;

for(i=0;i

#if FOSC == 11059200L

for(j=0;j<114;j++);

#elif FOSC == 12000000L

for(j=0;j<123;j++);

#elif FOSC == 24000000L

for(j=0;j<249;j++);

#else

for(j=0;j<114;j++);

#endif

}

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

* 函 数 名 :Timer0Init

* 函数功能 :定时器0初始化

* 输    入 :无

* 输    出 :无

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

void Timer0Init()

{

TMOD=0x01; //设置定时器0工作方式为1

TH0=(65536-FOSC/12/1000*TIME_MS)/256;

TL0=(65536-FOSC/12/1000*TIME_MS)%256;

ET0=1; //开启定时器0中断

//        TR0=1;        //开启定时器

EA=1;  //打开总中断

}

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

* 函 数 名 :main

* 函数功能 :主函数

* 输    入 :无

* 输    出 :无

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

void main()

{

Timer0Init();

EN=0;

MS1=0;

MS2=0;

MS3=0;

while(1)

{

if(KEY1==0)  //判断是否按下键盘

{

Delayms(10); //延时,软件去干扰

if(KEY1==0)   //确认按键按下

{

TR0=1;

}

while(KEY1==0);//按键锁定,每按一次count只加1.

}

if(KEY2==0)  //判断是否按下键盘

{

Delayms(10); //延时,软件去干扰

if(KEY2==0)   //确认按键按下

{

TR0=0;

}

while(KEY2==0);//按键锁定,每按一次count只加1.

}

if(KEY3==0)  //判断是否按下键盘

{

Delayms(10); //延时,软件去干扰

if(KEY3==0)   //确认按键按下

{

Dir=0;

}

while(KEY3==0);//按键锁定,每按一次count只加1.

}

if(KEY4==0)  //判断是否按下键盘

{

Delayms(10); //延时,软件去干扰

if(KEY4==0)   //确认按键按下

{

Dir=1;

}

while(KEY4==0);//按键锁定,每按一次count只加1.

}

}

}

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

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值