标题:
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