STC51单片机34——五线四相步进电机驱动(1个步进电机)

news2025/5/15 5:56:29

 

 

/*--------------------------------------------------------------------------------
     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;

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(10);
     }
}  

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

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript面向对象:面向过程与面向对象

面向对象编程介绍 两大编程思想 面向过程 面向对象 面向过程编程 POP(Process-oriented programming) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 举个栗子:…

STM32 CRC计算单元(循环冗余校验)

STM32第三篇【1】STM32 CRC计算单元【2】STM32 CRC简介【3】STM32 CRC主要特性【4】STM32 CRC功能描述【5】STM32 CRC寄存器【6】STM32 数据寄存器(CRC_DR)【7】STM32 独立数据寄存器(CRC_IDR)【8】STM32 控制寄存器(C…

数字化转型模块设计

基于了解到现状及问题,设计部门提出如下的业务需求: 创建三维通用模型仓库: 在Windchill创建相应的存储库及文件夹,分别存储不同类型的通用模型,例如标准件、通用件、外购件等等;对于存储库及文件夹针对所…

k8s 资源管理

文章目录1. 资源管理介绍2. 资源管理方式2.1 命令式对象管理Kubectl 命令资源对象类型子命令输出格式namespace / pod的创建和删除演示2.2 命令式对象配置2.3 声明式对象配置3. kubectl 可以在 node 节点上运行吗?4. 使用推荐:三种方式应该怎么用&#x…

【王道计算机网络笔记】计算机网络体系结构-计算机网络体系结构与参考模型

文章目录计算机网络分层结构OSI参考模型TCP/IP参考模型5层参考模型5层参考模型的数据封装与解封装计算机网络分层结构 我们把计算机网络的各层及其协议的集合称为网络的体系结构(Architecture)。换言之,计算机网络的体系结构就是这个计算机网络及其所应完成的功能的…

Hash表实现原理

Hash表查找的本质就是:在创建记录表的时候,确定记录的key与其存储地址之间的关系f,当要查找keyk的记录时,通过关系 f 就可得到相应记录的地址而获取记录,从而免去了key的比较过程 我们把这个关系 f 称为Hash 函数&…

1.3 字符编码

文章目录1. 编码2. ASCII 字符集3. 字符编码发展4. Unicode 字符集5. 字符编码5.1 UTF-165.3 UTF-325.3 UTF-86. 文件编码转换7. 乱码问题1. 编码 计算机只能识别高低电平, 将高低电平用数字表示: 0表示低电压, 1表示高电平. 于是就创造出来二进制数, 一个二进制有 0 和 1, 两…

【网络工程】5、路由器介绍及配置实操

接上篇《4、企业级交换机配置》 之前我们通过eNSP完成了一个企业级交换机的配置实例,本篇我们继续来讲解网络设备——路由器的介绍,以及完成路由器的相关配置实操。 当我们申请了一条宽带后,一般都需要一台路由器来进行上网,那么…

SpringBoot项目创建及其核心设计思想

参考了很多相关博客: springboot怎么学? - 知乎 如何解读springboot 中约定大于配置、JPA是什么、咋用_打豆豆。的博客-CSDN博客 SpringBoot约定大于配置到底是什么意思?_zhupanlinch的博客-CSDN博客 SpringBoot约定大于配置的特性解读 & SpringBoot…

胶囊网络深入理解

胶囊网络的概念与理解 胶囊网络概述 人工神经元不应当追求神经元活动中的视角不变性,(使用单一的标量输出来总结一个局部池中的重要特征的检测器的活动)。而应当使用局部的胶囊,这些胶囊对其输入执行一些相当复杂的内部计算。然…

【Java】Java中时间的相关类(Date,SimpleDateFormat)

文章目录Date类SimpleDateFormat类Date类 Date是JDK提供的类,用来描述时间,使用无参构造创建的对象默认表示系统的当前时间,使用有参构造(指定的毫秒值)表示从时间原点(1970年)过了该参数值的时…

08_原始套接字

知识点1【原始套接字概述】 1、UDP封包格式 ​IP封包格式: Ethernet封包格式 TCP封包格式: ICMP封包格式:ping 知识点2【数据包的分析】 案例:网络分析器: 知识点2【混杂模式】接受数据(了解&#x…

win11+WSL2安装visdom

win11WSL2安装visdom环境配置下载visdom小小的修改运行visdom环境配置 Win11WSL2Ubuntu-18.04 下载visdom pip install visdom pip install --upgrade visdom conda install -c conda-forge visdom 小小的修改 \home\grass\miniconda3\envs\torch\lib\python3.8\site-pack…

[一篇读懂]C语言九讲:线性表应用

[一篇读懂]C语言九讲:线性表应用1. 与408关联解析及本节内容介绍1 与408关联解析2 本节内容介绍2. 线性表的顺序表示原理解析1 线性表线性表的定义线性表的特点2 线性表的顺序表示顺序表的定义顺序表优缺点顺序表插入操作顺序表删除操作动态分配3. 顺序表的初始化及…

微服务系列之单体架构

随笔 终于迎来了“微服务、云原生”系列文章,这个系列的文章的更新速度博主无法保证能够每个星期一篇,因为这个系列的难度比以往系列都要高(以往的系列就没有保证一个星期一更)。但是长时间不去写文章,自己可能会慢慢…

Keepalived+LVS部署

目录 一、环境准备 二、实验拓扑 三、部署LVS DR环境 四、LVS服务器配置keepalived 1、安装keepalived 2、修改lvs1服务器keepalived配置 3、修改lvs2服务器keepalived配置 五、客户端测试 1、负责均衡测试 2、LVS服务器高可用测试 一、环境准备 准备4台centos服务器…

学习日记(单元测试、反射、注解、动态代理)

文章目录学习日记(单元测试、反射、注解、动态代理)一、单元测试1. 单元测试实践2. JUnit 常用注解二、反射1. 反射获取类对象2. 反射获取构造器对象3. 反射获取成员变量对象4. 反射获取成员方法对象三、反射的作用举例1. 绕过编译阶段为集合添加数据2. …

基于生物地理学的优化算法(BBO)用于训练多层感知器(MLP)【多种算法进行比较】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

java中的BigDecimal使用

文章目录1、什么是BigDecimal?2、为什么使用BigDecimal?3、如何使用BigDecimal?(1)BigDecimal初始化赋值(2)加减乘除运算(3)BigDecimal保留两位小数及舍入模式&#xff0…

WFP实现侧边栏导航菜单

菜单导航功能实现,常规的管理系统应该常用,左侧显示菜单条目,点击菜单,右侧切换不同的业务用户控件。 常用菜单可以采用TreeView树形控件特定样式实现 ,本文介绍的是使用ExpanderListView的组合形式实现的导航菜单&am…