/*--------------------------------------------------------------------------------
     MCU:             STC15W408AS 注意其没有T1,但是有T2
     开发板:             STC15W408AS最小系统板
     晶振:              内部时钟11.0592M,波特率38400
     扩展模块:        -
     软件:            Keil.C51.V9.01
-------------------------------------------------------------------------------------*/

#include "STC15.h"

#define u8 unsigned char
#define u16 unsigned int

sbit StepperPin1=P1^2;
sbit StepperPin2=P1^3;
sbit StepperPin3=P1^4;
sbit StepperPin4=P1^5;

sbit Stepper2Pin1=P3^4;
sbit Stepper2Pin2=P3^5;
sbit Stepper2Pin3=P3^6;
sbit Stepper2Pin4=P3^7;

void StepmotorDelay(u8 n){
  u16 i;
    for(;n>0;n--)
      for(i=2000;i>0;i--) //不要小于2000
            ;
}

void Step(void);

//----------------------------------------------------------   
//  函数名称:void IniSerialPort(void)   
//  函数功能:串口初始化   
//----------------------------------------------------------

void InitSerialPort(void)
{
        SCON = 0x50;            //8位数据,可变波特率
    AUXR = 0x14;                //T2为1T模式, 并启动定时器2
    AUXR |= 0x01;               //选择定时器2为串口1的波特率发生器
        T2L = 0xB8;        //设置定时初始值
      T2H = 0xFF;        //设置定时初始值
      ES=1;                     //串口中断开关,采用查询法时不用打开中断   
    EA=1;    
      //PS=1;//高优先级
    REN=1;                  //串口为工作方式1,允许接收数据
}
//----------------------------------------------------------   
//  函数名称:void SerialPortInte(void)
//  函数功能:串口中断方式接收一个字符
//----------------------------------------------------------   
#define Download_command 0xf1 //功能码

void SerialPortInte(void) interrupt 4
{
    unsigned char dat;
    unsigned int ISP_i,ISP_j;
    
    if(TI==1)
    {
        TI=0;
    }
    else
    {
        RI=0;
        dat=SBUF;
        SBUF=dat;
        if(dat==Download_command)
        {
            for(ISP_j=1000;ISP_j>0;ISP_j--)
              for(ISP_i=123;ISP_i>0;ISP_i--);
            IAP_CONTR =0x60;//软件复位
        }
    }
}

/************************主函数******************************************************/
void main()  
{
  InitSerialPort();
     while(1)
     {
      Step();
            StepmotorDelay(1);
     }
}

u8 StepN=1;
void Step(void) //4 相8 拍
{
    switch(StepN){
        case 1: StepperPin1=1;
                        StepperPin2=0;
                        StepperPin3=0;
                        StepperPin4=0;
                Stepper2Pin1=1;
                        Stepper2Pin2=0;
                        Stepper2Pin3=0;
                        Stepper2Pin4=0;
                        break;
        case 2: StepperPin1=1;
                        StepperPin2=1;
                        StepperPin3=0;
                        StepperPin4=0;    
            Stepper2Pin1=1;
                        Stepper2Pin2=1;
                        Stepper2Pin3=0;
                        Stepper2Pin4=0;            
                        break;
        case 3: StepperPin1=0;
                        StepperPin2=1;
                        StepperPin3=0;
                        StepperPin4=0;    
                        Stepper2Pin1=0;
                        Stepper2Pin2=1;
                        Stepper2Pin3=0;
                        Stepper2Pin4=0;    
                        break;
        case 4: StepperPin1=0;
                        StepperPin2=1;
                        StepperPin3=1;
                        StepperPin4=0;
                        Stepper2Pin1=0;
                        Stepper2Pin2=1;
                        Stepper2Pin3=1;
                        Stepper2Pin4=0;
                        break;
        case 5: StepperPin1=0;
                        StepperPin2=0;
                        StepperPin3=1;
                        StepperPin4=0;
                        Stepper2Pin1=0;
                        Stepper2Pin2=0;
                        Stepper2Pin3=1;
                        Stepper2Pin4=0;
                        break;
        case 6: StepperPin1=0;
                        StepperPin2=0;
                        StepperPin3=1;
                        StepperPin4=1;
                        Stepper2Pin1=0;
                        Stepper2Pin2=0;
                        Stepper2Pin3=1;
                        Stepper2Pin4=1;
                        break;
        case 7: StepperPin1=0;
                        StepperPin2=0;
                        StepperPin3=0;
                        StepperPin4=1;
                        Stepper2Pin1=0;
                        Stepper2Pin2=0;
                        Stepper2Pin3=0;
                        Stepper2Pin4=1;
                        break;
        case 8: StepperPin1=1;
                        StepperPin2=0;
                        StepperPin3=0;
                        StepperPin4=1;
                        Stepper2Pin1=1;
                        Stepper2Pin2=0;
                        Stepper2Pin3=0;
                        Stepper2Pin4=1;
                        StepN=0;
                        break;
    default:break;                        
    }
    StepN++;
    StepmotorDelay(1);

}

完整资料打包:

STC51单片机35-五线四相步进电机驱动测试程序(2个步进电机)-单片机文档类资源-CSDN下载

STC51单片机35——五线四相步进电机驱动测试程序(2个步进电机)相关推荐

  1. 28BYJ-48五线四相步进电机驱动(解决为啥抖动但是转不起来)

    首先我用的单片机是普中51单片机开发板中的一款,而且由于单片机接口信号不够大需要通过ULN2003(集成7对达林顿管的芯片)放大(相当于一个功率放大电路)再连接到相应的电机接口 按照这样去接:红线接电 ...

  2. arduino 步进电机驱动库_Arduino驱动 步进电机

    本帖最后由 李逍遥 于 2019-6-3 23:16 编辑 首先,感谢作者的分享,认真读完代码,学到了很多知识,但在其中发现一些错误,可能是我的拙见,如果理解错误请指出. 问题:在运行原代码时,电机总 ...

  3. stc51单片机入门 c语言,STC51单片机入门 (C语言)

    51单片机发展主要历程:AT89C51系列--STC89C52系列--STC90系列--STC11系列--STC12系列--STC15F系列--STC15W系列(最新主流),由于STC12系列功能已经 ...

  4. STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数

    STM32控制步进电机:基于HAL库定时器中断的闭环步进电机驱动+精准控制脉冲数 一.步进电机闭环驱动器 二.CubeMx配置 1.Clock Configuration 2.脉冲端 定时器配置 3. ...

  5. 【电机驱动芯片(单、双极性步进电机驱动方式/四相五线和42步进电机)——ULN2003、双H桥芯片(DRV8833/DRV8825)】

    文章目录 一.步进电机工作原理 1.基本原理 2.相关总结 二.单极性步进电机驱动(以ULN2003芯片+28BYJ-48电机为例) 1.28BYJ-48四相五线步进电机介绍 2.ULN2003芯片介 ...

  6. 步进电机驱动器设计c语言软件,最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序.doc...

    最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序 基于单片机系统的步进电机驱动 摘 要 本文介绍了基于80C52单片机的步进电机控制系统的设计.分别概括的介绍了单片机和步进 ...

  7. 单片机四线步进电机驱动 PROTEUS 和51单片机教程(附仿真文件+源代码)

    单片机四线步进电机驱动 程序功能: 当按下SW1时步进电机正转,按下SW2后步进电机反转,并可以根据源码任意调节旋转速度和每一个脉冲旋转角度 程序参考源代码如下: /C语言程序:/ #include ...

  8. 基于单片机的步进电机驱动电路设计

    基于单片机的步进电机驱动电路设计 步进电机在控制系统中具有广泛的应用.它可以把脉冲信号转换成角位移,并且可用作电磁制动轮.电磁差分器.或角位移发生器等. 有时从一些旧设备上拆下的步进电机(这种电机一般 ...

  9. 基于51单片机的步进电机驱动,亲测无误

    文章目录 前言 一.我们该如何实现电机驱动? 二.驱动实现 1.硬件准备 2.软件编写 3.实物 总结 前言 这一次要分享的项目是最近接单做的一个小玩意儿,基于51单片机的步进电机驱动.最近积压了两个 ...

最新文章

  1. php接口图片转二进制,怎么在php项目中对图片进行二进制转换
  2. Consul入门01 - 安装Consul
  3. 临河天气预报软件测试,临河天气预报15天
  4. NFS服务器是什么?(Network File System 网络文件系统)(远程主机间 mount 挂载目录)(ubuntu:nfs-kernel-server)
  5. 有关WriteableBitmap和BitmapImage之间的相互转换
  6. 虚拟目录继承根Web.Config的问题解决(转)
  7. Android 用MediaRecorder录制视频太短崩的问题
  8. 3个简单步骤即可测试Java 8
  9. linux的mysql小记
  10. InnoDB自增原理都搞不清楚,还怎么CRUD?
  11. linux下配置钉钉内网穿透_4G工业路由器内嵌花生壳PHTunnel,为工业物联网提供智能内网穿透...
  12. uniapp —— 配合腾讯地图实现小程序自动定位
  13. MySQL 新增、修改、删除 字段 sql语句
  14. 射频放大电路的优化及ADS仿真
  15. 个人sublime定制
  16. 树莓派如何接硬盘_树莓派添加USB外接硬盘
  17. python数据按照分组进行频率分布_python实现读取类别频数数据画水平条形图案例...
  18. VS配置永久OpenCV(小萌轻松操作):超细致
  19. 开启Windows11休眠功能
  20. Go测试开发(二) 多线程简单斗地主

热门文章

  1. 力扣题——2.除数与被除数
  2. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景
  3. 经济学:宏观经济学计算题
  4. 解决MySQL CPU占用100%的经验总结
  5. biopython中文指南_Biopython新手指南-第1部分
  6. MATLAB 2008a 激活成功后还要激活(许可证过期)
  7. 专家谈房产两难:力图房价回归理性 担心地产崩溃
  8. 锐浪(Grid++Report)报表脚本通过某些字段隐藏控件
  9. Java生成-zipf分布的数据集(自定义倾斜度,用作spark data skew测试)
  10. 5000字 大数据时代读书笔记_《大数据时代》读后感5篇