失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 51单片机控制步进电机点动正反转程序 自动运行及左右限位开关

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

时间:2021-03-24 16:09:07

相关推荐

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,跳出循环

}

}

}

}

}

如果觉得《51单片机控制步进电机点动正反转程序 自动运行及左右限位开关》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。