标题: 51单片机控制步进电机点动正反转程序,自动运行及左右限位开关 [打印本页]

作者: 机电大佬人人喊    时间: 2019-7-16 14:36
标题: 51单片机控制步进电机点动正反转程序,自动运行及左右限位开关
#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,跳出循环
                                                
                                                }
                                                
                                }
                                 
                }           
                        
                        
                        
                        
                        
                        
                        }
                }
                        
                        
                        
                        
        


作者: admin    时间: 2019-7-16 17:23
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
作者: ttaniscy    时间: 2019-9-5 10:48
谢谢LZ分享
作者: aatcs    时间: 2019-9-8 11:29
不知道能不能用,试试看了
作者: ~123~    时间: 2020-6-11 09:14
有线路连接图吗

作者: 天下为家129    时间: 2021-5-1 14:34
既然是步进电机,怎么程序里面没有看到关于驱动器的接口定义呢
作者: LXJ50    时间: 2021-5-1 22:42
天下为家129 发表于 2021-5-1 14:34
既然是步进电机,怎么程序里面没有看到关于驱动器的接口定义呢

驱动器的接口定义应该是P1.0   p1.1  p1.2  p1.3
作者: 158751hei0141    时间: 2021-5-28 22:15
天下为家129 发表于 2021-5-1 14:34
既然是步进电机,怎么程序里面没有看到关于驱动器的接口定义呢

直接对P1口赋值
作者: dj3365191    时间: 2021-5-29 10:18
你不补全文件,这程序就白发表了,得不到黑币,别人也用不上
作者: xiaobing0522    时间: 2021-5-29 11:39
真不知道放着半截程序是干什么的,为什么不放全,或者是传上来也算  




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1