找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2539|回复: 8
收起左侧

如何用51单片机控制步进电机,各位大佬,求完整正确的程序

[复制链接]
ID:267591 发表于 2017-12-27 11:21 | 显示全部楼层 |阅读模式
如何用51单片机控制步进电机,各位大佬,求完整正确的程序
回复

使用道具 举报

ID:84283 发表于 2017-12-27 13:04 | 显示全部楼层
#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h>//内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint  unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};

/********************************************************/
/*                                                  
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms                                    
/*                                                      
/********************************************************/
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw(uint n)
{
   uchar i;
   uint  j;
   for (j=0; j<12*n; j++)    //转1×n圈
    {
      for (i=0; i<8; i++)     //一个周期转30度
        {
          P1 = FFW[i];          //取数据
          delay(15);             //调节转速
        }
    }
}
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev(uint n)
{
     uchar i;
uint  j;
for (j=0; j<12*n; j++)    //转1×n圈
      {
        for (i=0; i<8; i++)     //一个周期转30度
        {
          P1 = REV[i];          //取数据
          delay(15);             //调节转速
        }
      }
}
/********************************************************
*                                                      
*  主程序                                               
*                                                      
*********************************************************/

main()
{   
   while(1)                     
    {  
       motor_ffw(5);          //电机正转
       delay(5000);           //换向延时
       //motor_rev(5);          //电机反转
       //delay(1000);           //换向延时
    }
}

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

自己改吧, 这是正反转5S
回复

使用道具 举报

ID:267208 发表于 2017-12-27 14:12 | 显示全部楼层
这是带着作业本过来的吗
回复

使用道具 举报

ID:267713 发表于 2017-12-27 14:36 | 显示全部楼层
这个应该有pcb图吧,估计配合一起使用
回复

使用道具 举报

ID:78322 发表于 2017-12-27 14:52 | 显示全部楼层
安装个PROTUES,里面有例程。
回复

使用道具 举报

ID:267701 发表于 2017-12-27 15:56 | 显示全部楼层
#include <reg51.h>       //51芯片管脚定义头文件 #include <intrins.h>//内部包含延时函数 _nop_();  #define uchar unsigned char #define uint  unsigned int  uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};  /********************************************************/ /*                                                   /* 延时t毫秒  /* 11.0592MHz时钟,延时约1ms                                      /*                                                       /********************************************************/ void delay(uint t) {                               uint k;    while(t--)    {      for(k=0; k<125; k++)      { }    } } /********************************************************/ /* /*步进电机正转 /* /********************************************************/ void  motor_ffw(uint n) {     uchar i;    uint  j;    for (j=0; j<12*n; j++)    //转1×n圈     {       for (i=0; i<8; i++)     //一个周期转30度         {           P1 = FFW[i];          //取数据           delay(15);             //调节转速         }     } } /********************************************************/ /* /*步进电机反转 /* /********************************************************/ void  motor_rev(uint n) {      uchar i; uint  j; for (j=0; j<12*n; j++)    //转1×n圈       {         for (i=0; i<8; i++)     //一个周期转30度         {           P1 = REV[i];          //取数据           delay(15);             //调节转速         }       } } /******************************************************** *                                                        *  主程序                                                *                                                       *********************************************************/  main() {       while(1)                          {          motor_ffw(5);          //电机正转        delay(5000);           //换向延时        //motor_rev(5);          //电机反转        //delay(1000);           //换向延时     } }  /********************************************************/  自己改吧, 这是正反转5S
回复

使用道具 举报

ID:267701 发表于 2017-12-27 15:58 | 显示全部楼层
你可以看一下你配套光盘中,单片机教程—配套程序
回复

使用道具 举报

ID:493642 发表于 2019-4-3 10:16 | 显示全部楼层
qq1105424012 发表于 2017-12-27 13:04
#include        //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();

请问一下该怎么连线呢
回复

使用道具 举报

ID:504144 发表于 2019-4-3 15:49 | 显示全部楼层
去某宝搜索L298N电机驱动模块,下载程序就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表