找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8443|回复: 9
收起左侧

51单片机控制步进电机点动正反转程序,自动运行及左右限位开关

  [复制链接]
ID:585091 发表于 2019-7-16 14:36 | 显示全部楼层 |阅读模式
#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include<intrins.h>                //因为要用到左右移函数,所以加入这个头文件

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

        
sbit k1=P0^0;         //定义P10口是k1    正转点动按钮
sbit k2=P0^1;         //反转点动按钮
sbit k3=P0^2;        //停止按钮
sbit k4=P0^3;        //自动运行
sbit k5=P0^4;        //右限位开关
sbit k6=P0^5;        //左限位开关


#define SPEED 200

/*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
        while(i--);        
}


/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/

void main()
{
        while(1)
        {
                P1=0x00;
                if(k1==0)                  //检测按键K1是否按下
                {        
                        delay(1000);   //消除抖动 一般大约10ms
                        if(k1==0)         //再次判断按键是否按下
                        {
                                while(k1==0)        //当k1一直为0时,电机正转
                                {
                                P1=0x0b;
                                delay(SPEED);

                                P1=0x0e;
                                delay(SPEED);

                                P1=0x07;
                                delay(SPEED);
                           
                                P1=0x0d;
                                delay(SPEED);
                                }
                        }
                }
               
               
                if(k2==0)                  //检测按键K2是否按下
                {        
                        delay(1000);   //消除抖动 一般大约10ms
                        
                        if(k2==0)         //再次判断按键是否按下
                        {        
                                while(k2==0)         //当k2一直未了0时,电机反转
                        
                                {
                                P1=0x0e;
                                delay(SPEED);

                                P1=0x0b;
                                delay(SPEED);

                                P1=0x0d;
                                delay(SPEED);

                                P1=0x07;
                                delay(SPEED);
                                }
                        }
                }               
               
               



           
            if(k4==0)                  //检测按键K4是否按下
                        
                {
                        delay(1000);   //消除抖动 一般大约10ms
               
                        
                        if(k4==0)         //再次判断按键是否按下
                                {        
                                                while(k3!=0||k5!=0) //当k3不等于0或k5不等于0时
                                                {
                                                P1=0x0b;
                                                delay(SPEED);

                                                P1=0x0e;
                                                delay(SPEED);

                                                P1=0x07;
                                                delay(SPEED);

                                                P1=0x0d;
                                                delay(SPEED);
                                                
                                                
                                                
                                                if(k3==0||k5==0)
                                                break;          //如果k3=0或k5=0,跳出循环
                                                
                                                }
                                                
                                }
                                 
                }
               
               
                                                
                if(k5==0)
                {
                delay(1000);
                if(k5==0)
                        {
                                while(k3!=0||k6!=0)                                       
                                {
                                P1=0x0e;
                                delay(SPEED);

                                P1=0x0b;
                                delay(SPEED);

                                P1=0x0d;
                                delay(SPEED);

                                P1=0x07;
                                delay(SPEED);
                                
                                if(k3==0||k6==0)
                                break;
                                }                        
                        }
                }        
                        
                if(k3==0)                  //检测按键K3是否按下
                {        
                        delay(1000);   //消除抖动 一般大约10ms
                        if(k3==0)         //再次判断按键是否按下
                                {                                                
                                P1=0x00;  //电机停止
                                }
                }        
                        
                if(k6==0)                  //检测按键K6是否按下                        
                {
                        delay(1000);   //消除抖动 一般大约10ms               
                        if(k6==0)         //再次判断按键是否按下
                                {        
                                        while(k3!=0||k5!=0) //当k3不等于0或k5不等于0时
                                                {
                                                P1=0x0b;
                                                delay(SPEED);

                                                P1=0x0e;
                                                delay(SPEED);

                                                P1=0x07;
                                                delay(SPEED);

                                                P1=0x0d;
                                                delay(SPEED);
                                                
                                                
                                                
                                                if(k3==0||k5==0)
                                                break;          //如果k3=0或k5=0,跳出循环
                                                
                                                }
                                                
                                }
                                 
                }           
                        
                        
                        
                        
                        
                        
                        }
                }
                        
                        
                        
                        
        

回复

使用道具 举报

ID:1 发表于 2019-7-16 17:23 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:451441 发表于 2019-9-5 10:48 | 显示全部楼层
谢谢LZ分享
回复

使用道具 举报

ID:61950 发表于 2019-9-8 11:29 | 显示全部楼层
不知道能不能用,试试看了
回复

使用道具 举报

ID:709988 发表于 2020-6-11 09:14 | 显示全部楼层
有线路连接图吗
回复

使用道具 举报

ID:424741 发表于 2021-5-1 14:34 | 显示全部楼层
既然是步进电机,怎么程序里面没有看到关于驱动器的接口定义呢
回复

使用道具 举报

ID:164988 发表于 2021-5-1 22:42 | 显示全部楼层
天下为家129 发表于 2021-5-1 14:34
既然是步进电机,怎么程序里面没有看到关于驱动器的接口定义呢

驱动器的接口定义应该是P1.0   p1.1  p1.2  p1.3
回复

使用道具 举报

ID:505058 发表于 2021-5-28 22:15 | 显示全部楼层
天下为家129 发表于 2021-5-1 14:34
既然是步进电机,怎么程序里面没有看到关于驱动器的接口定义呢

直接对P1口赋值
回复

使用道具 举报

ID:143767 发表于 2021-5-29 10:18 | 显示全部楼层
你不补全文件,这程序就白发表了,得不到黑币,别人也用不上
回复

使用道具 举报

ID:859852 发表于 2021-5-29 11:39 来自手机 | 显示全部楼层
真不知道放着半截程序是干什么的,为什么不放全,或者是传上来也算  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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