标题:
51单片机控制步进电机
[打印本页]
作者:
瓦尔多欧冠
时间:
2018-9-8 16:54
标题:
51单片机控制步进电机
#include <reg52.h>
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
unsigned char code zheng[4]={0x08,0x04,0x02,0x01};//正转表格
unsigned char code fan[4]={0x01,0x02,0x04,0x08};//反转表格
uchar flag_start ; //启动标志位 1为起动步进电机 否则关闭电机
uchar flag_z_f; //正反标志位 0为顺时钟 1为逆时史上转
uchar flag_shudu; //4种速度 0,1,2,3,
uint flag_shudu_value = 400;
void Delay(unsigned int i)//延时
{
while(--i);
}
uchar key_can;
/********************独立按键程序*****************/
void key()
{
static uchar key_new;
key_can = 20; //按键值还原
if((P3 & 0xf0) != 0xf0) //按键按下
{
Delay(5); //按键消抖动
if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
{ //确认是按键按下
key_new = 0;
switch(P3 & 0xf0)
{
case 0xe0: key_can = 1; break; //得到按键值
case 0xd0: key_can = 2; break; //得到按键值
case 0xb0: key_can = 3; break; //得到按键值
case 0x70: key_can = 4; break; //得到按键值
}
}
}
else //按键松开
key_new = 1;
}
/******************主程序**********************/
void main()
{
unsigned char i;
while(1)
{
key();
if(key_can < 10)
{
if(key_can == 1) //启动键
{
if(flag_start == 0) //启动
{
flag_start = 1;
switch(flag_shudu)
{
case 0: flag_shudu_value = 500; P2 = 0xf0; break; //速度1 最快
case 1: flag_shudu_value = 800; P2 = 0xf9; break;
case 2: flag_shudu_value = 1000; P2 = 0xfc; break;
case 3: flag_shudu_value = 1500;P2 = 0xfe; break; //速度4 最慢
}
}
else //停止
{
flag_start = 0;
P2 = 0XFF; //关闭指示灯
}
}if(key_can == 2) //正反转键
{
flag_z_f = ~flag_z_f; //
}if(key_can == 3) //减速
{
flag_shudu ++;
if(flag_shudu >= 4)
flag_shudu = 0;
switch(flag_shudu)
{
case 0: flag_shudu_value = 500; P2 = 0xf0; break; //速度1 最快
case 1: flag_shudu_value = 800; P2 = 0xf9; break;
case 2: flag_shudu_value = 1000; P2 = 0xfc; break;
case 3: flag_shudu_value = 1500;P2 = 0xfe; break; //速度4 最慢
}
}if(key_can == 4) //加速
{
if(flag_shudu == 0)
flag_shudu = 4;
flag_shudu --;
switch(flag_shudu)
{
case 0: flag_shudu_value = 500; P2 = 0xf0; break; //速度1 最快
case 1: flag_shudu_value = 800; P2 = 0xf8; break;
case 2: flag_shudu_value = 1000; P2 = 0xfc; break;
case 3: flag_shudu_value = 1500;P2 = 0xfe; break; //速度4 最慢
}
}
}
if(flag_start == 1)
{
for(i=0;i<4;i++) //4相
{
if(flag_z_f == 0)
P1=zheng[i]; //电机正转
else
P1=fan[i]; //电机反转
Delay(flag_shudu_value); //改变这个参数可以调整电机转速
}
}
}
}
复制代码
作者:
admin
时间:
2018-9-8 18:16
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者:
阿拉登666
时间:
2018-11-30 13:36
很不错的例子
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1