基于51单片机的步进电机控制系统(控制4个电机,正反转停止)原理图、流程图、物料清单、仿真图、源代码
基于51单片机的步进电机(4,正反转停止)
单片机控制4个步进电机的正反转和停止控制。
使用矩阵键盘分别独立控制每个步进电机运行。
第一列按钮:反转控制
第二列按钮:正转控制
第三列按钮:停止
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit AA1=P2^0;//电机1引脚
sbit BB1=P2^1;
sbit CC1=P2^2;
sbit DD1=P2^3;
sbit AA2=P2^4;//电机2引脚
sbit BB2=P2^5;
sbit CC2=P2^6;
sbit DD2=P2^7;
sbit AA3=P3^0;//电机3引脚
sbit BB3=P3^1;
sbit CC3=P3^2;
sbit DD3=P3^3;
sbit AA4=P3^4;//电机4引脚
sbit BB4=P3^5;
sbit CC4=P3^6;
sbit DD4=P3^7;
uchar fang1=0,fang2=0,fang3=0;fang4=0;//方向 0停,1左,2右
//=================================================
void key_scan()
{
uchar i,j;
P1=0x0f;
if(P1!=0x0f)
{
switch(P1)
{
case 0x0e:i=1;break;
case 0x0d:i=4;break;
case 0x0b:i=7;break;
case 0x07:i=10;
}
P1=0xf0;
switch(P1)
{
case 0xe0:j=0;break;
case 0xd0:j=1;break;
case 0xb0:j=2;
}
}
switch(i+j)
{
case 1:fang1=1;break;
case 2:fang1=2;break;
case 3:fang1=0;break;
case 4:fang2=1;break;
case 5:fang2=2;break;
case 6:fang2=0;break;
case 7:fang3=1;break;
case 8:fang3=2;break;
case 9:fang3=0;break;
case 10:fang4=1;break;
case 11:fang4=2;break;
case 12:fang4=0;
}
}
void delay() //延时
{
uint i,j;
for(i=0;i<100;i++)
for(j=0;j<300;j++);
}
//================================================
void main()
{
P2=0x11;
P3=0x11;
while(1)
{
key_scan();
if(fang1==1)//1
DD1=1;
if(fang1==2)
BB1=1;
if(fang2==1)
DD2=1;
if(fang2==2)
BB2=1;
if(fang3==1)
DD3=1;
if(fang3==2)
BB3=1;
if(fang4==1)
DD4=1;
if(fang4==2)
BB4=1;
delay();
key_scan();
if(fang1==1)//2
AA1=0;
if(fang1==2)
AA1=0;
if(fang2==1)
AA2=0;
if(fang2==2)
AA2=0;
if(fang3==1)
AA3=0;
if(fang3==2)
AA3=0;
if(fang4==1)
AA4=0;
if(fang4==2)
AA4=0;
delay();
key_scan();
if(fang1==1)//3
CC1=1;
if(fang1==2)
CC1=1;
if(fang2==1)
CC2=1;
if(fang2==2)
CC2=1;
if(fang3==1)
CC3=1;
if(fang3==2)
CC3=1;
if(fang4==1)
CC4=1;
if(fang4==2)
CC4=1;
delay();
key_scan();
if(fang1==1)//4
DD1=0;
if(fang1==2)
BB1=0;
if(fang2==1)
DD2=0;
if(fang2==2)
BB2=0;
if(fang3==1)
DD3=0;
if(fang3==2)
BB3=0;
if(fang4==1)
DD4=0;
if(fang4==2)
BB4=0;
delay();
key_scan();
if(fang1==1)//5
BB1=1;
if(fang1==2)
DD1=1;
if(fang2==1)
BB2=1;
if(fang2==2)
DD2=1;
if(fang3==1)
BB3=1;
if(fang3==2)
DD3=1;
if(fang4==1)
BB4=1;
if(fang4==2)
DD4=1;
delay();
key_scan();
if(fang1==1)//6
CC1=0;
if(fang1==2)
CC1=0;
if(fang2==1)
CC2=0;
if(fang2==2)
CC2=0;
if(fang3==1)
CC3=0;
if(fang3==2)
CC3=0;
if(fang4==1)
CC4=0;
if(fang4==2)
CC4=0;
delay();
key_scan();
if(fang1==1)//7
AA1=1;
if(fang1==2)
AA1=1;
if(fang2==1)
AA2=1;
if(fang2==2)
AA2=1;
if(fang3==1)
AA3=1;
if(fang3==2)
AA3=1;
if(fang4==1)
AA4=1;
if(fang4==2)
AA4=1;
delay();
key_scan();
if(fang1==1)//8
BB1=0;
if(fang1==2)
DD1=0;
if(fang2==1)
BB2=0;
if(fang2==2)
DD2=0;
if(fang3==1)
BB3=0;
if(fang3==2)
DD3=0;
if(fang4==1)
BB4=0;
if(fang4==2)
DD4=0;
delay();
}
}