基于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();

	}
}
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐