标题:
以下是我弄的步进电机源代码
[打印本页]
作者:
FLC123
时间:
2018-6-24 09:46
标题:
以下是我弄的步进电机源代码
此源代码包含了电机的正反转控制,加减速,显示模块还没开始弄,还望各路大神多多指教
单片机源程序如下:
//采用一相励磁方式,即四根信号线每次只有一个为高电平。步进电机型号28BYJ-48,5V,DC,四相八拍
#include<reg52.h>
#define uchar unsigned char
sbit jia_key=P3^2; //电机加速I/O口定义
sbit jian_key=P3^3; //电机减速I/O口定义
sbit zf_key=P3^4; //电机正反转I/O口定义
bit flag=0; //电机正反转标志位,flag为0时正转,flag为1时为反转
uchar num=0,maichong=4,table_begin=0;
uchar code table1[]={0x01,0x02,0x04,0x08, 0x08,0x04,0x02,0x01}; //电机正反转I/O口的高低电平对应表
//延时函数
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=120;k>0;k--); //12M晶振
}
//按键检测处理函数
void key ()
{
if(jia_key==0)
{
delay(5);
if(jia_key==0) //key=0按下
{
num++;
if(num==4)
num=3; //最大则保持3
while(jia_key==0);//等待松开按键
}
}
if(jian_key==0)
{
delay(5);
if(jian_key==0)
{
if(num!=0) //判断是否最小速
num--;
else
num=0;
while(jian_key==0); //等待按键释放,若按键没有释放则jian_key始终等于0,程序就一直停在while语句处,直到按键释放jian_key=1跳出while循环。
//通常我们在检测单片机按键时,要等待按键释放才去执行相应代码
}
}
if(zf_key==0) //电机正反转标志
{
delay(5);
if(zf_key==0) //按键按下为0则反转
{
flag=~flag; //正反转标识取反
while(zf_key==0);
}
}
}
//根据速度标识进行数据处理
void dispose()
{
switch(num)
{
case 0:
//show_num=2;
maichong=8;
break;
case 1:
// show_num=4;
maichong=6;
break;
case 2:
//show_num=6;
maichong=4;
break;
case 3:
// show_num=8;
maichong=2;
break;
}
if(flag==0)
{
table_begin=0;
}
else
table_begin=4;
}
//电机速度,和正反转控制
void qudong()
{
uchar i,j;
for(j=table_begin;j<4+table_begin;j++)
{
P1=table1[j];
for(i=0;i<maichong;i++)
{
//display();
delay(5);
}
}
}
//主函数
void main()
{
while(1)
{
key();
dispose();
qudong();
}
}
复制代码
所有资料51hei提供下载:
步进电机.zip
(4.39 KB, 下载次数: 8)
2018-6-24 09:46 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1