⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 自动控制电机程序
💻 C
📖 第 1 页 / 共 5 页
字号:
							inStep(GFinStep,GFinStepF);	//微调步数统计
							//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						}
						USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						if((IO1PIN & K2) == 0)	//往上的按钮按下
						{
							K2Flag = 1;						
						}
						if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & GFinStep > 0)	//往上的按钮弹起
						{
							GFinStep--;
							Motor(2,0,1,4);
							K2Flag = 0;						
							inStep(GFinStep,GFinStepF);	//微调步数统计
							//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						}
						USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
				}
			}
			else
			{
				if(GFinStep < 99)
				{
					if((IO1PIN & K1) == 0)	//往下的按钮按下
					{
						K1Flag = 1;						
					}
					if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
					{
						GFinStep++;
						Motor(2,1,1,4);
						K1Flag = 0;						
						inStep(GFinStep,GFinStepF);	//微调步数统计
						//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
					USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					if((IO1PIN & K2) == 0)	//往上的按钮按下
					{
						K2Flag = 1;						
					}
					if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & GFinStep > 0)	//往上的按钮弹起
					{
						GFinStep--;
						Motor(2,0,1,4);
						K2Flag = 0;						
						inStep(GFinStep,GFinStepF);	//微调步数统计
						//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
					USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
			}
		}
		else
		{
			if(GFinStep < 99)
			{
				if((IO1PIN & K1) == 0)	//往下的按钮按下
				{
					K1Flag = 1;						
				}
				if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
				{
					GFinStep++;
					Motor(2,1,1,4);
					K1Flag = 0;						
					inStep(GFinStep,GFinStepF);	//微调步数统计
					//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
				USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				if((IO1PIN & K2) == 0)	//往上的按钮按下
				{
					K2Flag = 1;						
				}
				if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & GFinStep > 0)	//往上的按钮弹起
				{
					GFinStep--;
					Motor(2,0,1,4);
					K2Flag = 0;						
					inStep(GFinStep,GFinStepF);	//微调步数统计
					//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
				USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
			}
		}
	}
}
void CL()	//对准清洗槽
{
	M2Position_ini();	//上下电机初始化
	M3Position_ini();	//左右电机初始化
	Motor(3,0,80,4);	//顺转,走固定80步
	while((IO1PIN & M3P)>>21 == 1)	//逆转,走到3不挡为止
	{
		Motor(3,1,1,4);
	}
	Motor(3,1,CleanHole,4);	//逆转,走固定100步
	Motor(2,1,80,4);	//先向下走80步
	while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
	{
		Motor(2,1,1,4);
	}
	Motor(2,1,80,4);	//再向下走80步
}
void CLin()	//调进入深度
{	
	while(CLinFlag == 1)
	{
		ENABLE();
		inStep(CLinStep,CLinStepF);	//微调步数统计
		USB_WriteEndpoint(3, 10, CLinStepF);//GenEpBuf);			/* 发送10个字节到PC */
		//usbserve();										/* 处理USB事件,如USB控制传输,USB总线复位等等 */			
		if(bEPPflags.bits.configuration == 1)
		{	
			if(bEPPflags.bits.ep1_rxdone == 1)
			{												/* 逻辑端点1收到数据 */
				DISABLE();
				bEPPflags.bits.ep1_rxdone = 0;				/* 清除逻辑端点1收到数据标志 */
				if(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='s' & GenEpBuf[3]=='t' & GenEpBuf[4]=='o' & GenEpBuf[5]=='p')
				{					
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */

					//if(GenEpBuf[6]=='#')
					//{
					//	CLRStep = 0;
					//}
					//else if(GenEpBuf[7]=='#')
					//{
					//	CLRStep = GenEpBuf[6] - 0x30;
					//}
					//else if(GenEpBuf[8]=='#')
					//{
					//	CLRStep = (GenEpBuf[6] - 0x30) * 10 + (GenEpBuf[7] - 0x30);
					//}
					//else if(GenEpBuf[9]=='#')
					//{
					//	CLRStep = (GenEpBuf[6] - 0x30) * 100 + (GenEpBuf[7] - 0x30) * 10 + (GenEpBuf[8] - 0x30);
					//}
					//
					//USB_WriteEndpoint(3, 10, ReceiveOK);
					CLinFlag = 0;
					//Motor(2,0,CLRStep+30,4);	//先往上多走30步					
					//while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
					//{
					//	Motor(2,1,1,4);
					//}
					//Motor(2,1,CLRStep,4);
					//USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}	
				else
				{
					if(CLinStep < 200)
					{
						if((IO1PIN & K1) == 0)	//往下的按钮按下
						{
							K1Flag = 1;						
						}
						if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
						{
							CLinStep++;
							Motor(2,1,1,4);
							K1Flag = 0;						
							inStep(CLinStep,CLinStepF);	//微调步数统计
							//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						}
						USB_WriteEndpoint(3, 10, CLinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						if((IO1PIN & K2) == 0)	//往上的按钮按下
						{
							K2Flag = 1;						
						}
						if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & CLinStep > 0)	//往上的按钮弹起
						{
							CLinStep--;
							Motor(2,0,1,4);
							K2Flag = 0;						
							inStep(CLinStep,CLinStepF);	//微调步数统计
							//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						}
						USB_WriteEndpoint(3, 10, CLinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
				}
			}
			else
			{
				if(CLinStep < 200)
				{
					if((IO1PIN & K1) == 0)	//往下的按钮按下
					{
						K1Flag = 1;						
					}
					if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
					{
						CLinStep++;
						Motor(2,1,1,4);
						K1Flag = 0;						
						inStep(CLinStep,CLinStepF);	//微调步数统计
						//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
					USB_WriteEndpoint(3, 10, CLinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					if((IO1PIN & K2) == 0)	//往上的按钮按下
					{
						K2Flag = 1;						
					}
					if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & CLinStep > 0)	//往上的按钮弹起
					{
						CLinStep--;
						Motor(2,0,1,4);
						K2Flag = 0;						
						inStep(CLinStep,CLinStepF);	//微调步数统计
						//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
					USB_WriteEndpoint(3, 10, CLinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
			}
		}
		else
		{
			if(CLinStep < 200)
			{
				if((IO1PIN & K1) == 0)	//往下的按钮按下
				{
					K1Flag = 1;						
				}
				if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
				{
					CLinStep++;
					Motor(2,1,1,4);
					K1Flag = 0;						
					inStep(CLinStep,CLinStepF);	//微调步数统计
					//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
				USB_WriteEndpoint(3, 10, CLinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				if((IO1PIN & K2) == 0)	//往上的按钮按下
				{
					K2Flag = 1;						
				}
				if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & CLinStep > 0)	//往上的按钮弹起
				{
					CLinStep--;
					Motor(2,0,1,4);
					K2Flag = 0;						
					inStep(CLinStep,CLinStepF);	//微调步数统计
					//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
				USB_WriteEndpoint(3, 10, CLinStepF);//GenEpBuf);			/* 发送10个字节到PC */
			}
		}
	}
}
void SD()	//对准样品盘
{
	M2Position_ini();	//上下电机初始化
	M3Position_ini();	//左右电机初始化
	M4Position_ini();	//盘电机初始化
	Motor(3,0,80,4);	//顺转,走固定80步
	while((IO1PIN & M3P)>>21 == 1)	//逆转,走到3不挡为止
	{
		Motor(3,1,1,4);
	}
	Motor(3,1,DiskNum01,4);	//逆转,走固定380步
	Motor(2,1,80,4);	//先向下走80步
	while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
	{
		Motor(2,1,1,4);
	}
	Motor(2,1,40,4);	//再向下走40步
}
void SDin()	//调进入深度
{	
	while(SDinFlag == 1)
	{
		ENABLE();
		inStep(SDinStep,SDinStepF);	//微调步数统计
		USB_WriteEndpoint(3, 10, SDinStepF);//GenEpBuf);			/* 发送10个字节到PC */
		//usbserve();										/* 处理USB事件,如USB控制传输,USB总线复位等等 */			
		if(bEPPflags.bits.configuration == 1)
		{	
			if(bEPPflags.bits.ep1_rxdone == 1)
			{												/* 逻辑端点1收到数据 */
				DISABLE();
				bEPPflags.bits.ep1_rxdone = 0;				/* 清除逻辑端点1收到数据标志 */
				if(GenEpBuf[0]=='s' & GenEpBuf[1]=='d' & GenEpBuf[2]=='s' & GenEpBuf[3]=='t' & GenEpBuf[4]=='o' & GenEpBuf[5]=='p')
				{					
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */

					//if(GenEpBuf[6]=='#')
					//{
					//	SDRStep = 0;
					//}
					//else if(GenEpBuf[7]=='#')
					//{
					//	SDRStep = GenEpBuf[6] - 0x30;
					//}
					//else if(GenEpBuf[8]=='#')
					//{
					//	SDRStep = (GenEpBuf[6] - 0x30) * 10 + (GenEpBuf[7] - 0x30);
					//}
					//else if(GenEpBuf[9]=='#')
					//{
					//	SDRStep = (GenEpBuf[6] - 0x30) * 100 + (GenEpBuf[7] - 0x30) * 10 + (GenEpBuf[8] - 0x30);
					//}
					//
					//USB_WriteEndpoint(3, 10, ReceiveOK);
					SDinFlag = 0;
					//Motor(2,0,SDRStep+30,4);	//先往上多走30步					
					//while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
					//{
					//	Motor(2,1,1,4);
					//}
					//Motor(2,1,SDRStep,4);
					//USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}	
				else
				{
					if(SDinStep < 200)
					{
						if((IO1PIN & K1) == 0)	//往下的按钮按下
						{
							K1Flag = 1;						
						}
						if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
						{
							SDinStep++;
							Motor(2,1,1,4);
							K1Flag = 0;						
							inStep(SDinStep,SDinStepF);	//微调步数统计
							//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						}
						USB_WriteEndpoint(3, 10, SDinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						if((IO1PIN & K2) == 0)	//往上的按钮按下
						{
							K2Flag = 1;						
						}
						if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & SDinStep > 0)	//往上的按钮弹起
						{
							SDinStep--;
							Motor(2,0,1,4);
							K2Flag = 0;						
							inStep(SDinStep,SDinStepF);	//微调步数统计
							//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
						}
						USB_WriteEndpoint(3, 10, SDinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
				}
			}
			else
			{
				if(SDinStep < 200)
				{
					if((IO1PIN & K1) == 0)	//往下的按钮按下
					{
						K1Flag = 1;						
					}
					if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
					{
						SDinStep++;
						Motor(2,1,1,4);
						K1Flag = 0;						
						inStep(SDinStep,SDinStepF);	//微调步数统计
						//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
					USB_WriteEndpoint(3, 10, SDinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					if((IO1PIN & K2) == 0)	//往上的按钮按下
					{
						K2Flag = 1;						
					}
					if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & SDinStep > 0)	//往上的按钮弹起
					{
						SDinStep--;
						Motor(2,0,1,4);
						K2Flag = 0;						
						inStep(SDinStep,SDinStepF);	//微调步数统计
						//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
					}
					USB_WriteEndpoint(3, 10, SDinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
			}
		}
		else
		{
			if(SDinStep < 200)
			{
				if((IO1PIN & K1) == 0)	//往下的按钮按下
				{
					K1Flag = 1;						
				}
				if(((IO1PIN & K1)>>25 == 1) & K1Flag == 1)	//往下的按钮弹起
				{
					GFinStep++;
					Motor(2,1,1,4);
					K1Flag = 0;						
					inStep(GFinStep,GFinStepF);	//微调步数统计
					//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
				USB_WriteEndpoint(3, 10, SDinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				if((IO1PIN & K2) == 0)	//往上的按钮按下
				{
					K2Flag = 1;						
				}
				if(((IO1PIN & K2)>>24 == 1) & K2Flag == 1 & SDinStep > 0)	//往上的按钮弹起
				{
					SDinStep--;
					Motor(2,0,1,4);
					K2Flag = 0;						
					inStep(SDinStep,SDinStepF);	//微调步数统计
					//USB_WriteEndpoint(3, 10, GFinStepF);//GenEpBuf);			/* 发送10个字节到PC */
				}
				USB_WriteEndpoint(3, 10, SDinStepF);//GenEpBuf);			/* 发送10个字节到PC */
			}
		}
	}
}
////////////////////////////////////////////////////////////////

void Clean()	//清洗
{
	int i;
	if(SetFlag == 1)
	{
		//CL();	//对准清洗槽
		//Motor(2,1,SetCLStep,4);	//先向下走SetCLStep步,进入清洗槽
		//UART1_SendStr(PumpIniQ);	//向串口发送字符串,泵初始化
		//DelayNS(200);	//延时
		//UART1_SendStr(PumpCln);
		//DelayNS(900);	//延时
		//UART1_SendStr(PumpIniS);	//向串口发送字符串,泵初始化
		//DelayNS(800);	//延时
		CL();	//对准清洗槽
		Motor(2,1,SetCLStep,4);	//向下走SetCLStep步,进入清洗槽
		UART1_SendStr(PumpIniQ);	//向串口发送字符串,泵初始化
		DelayNS(800);	//延时
		for(i=0;i<OlnyCleanNum;i++)
		{
			UART1_SendStr(PumpCln);
			DelayNS(900);	//延时
			UART1_SendStr(PumpCln);
			DelayNS(900);	//延时
		}
		UART1_SendStr(PumpIni);	//向串口发送字符串,泵初始化
		DelayNS(800);	//延时

		M2Position_ini();	//往上走到初始位置

		OlnyCleanNum = 0;
	}
	else
	{
		USB_WriteEndpoint(3, 10, NoSet);//GenEpBuf);			/* 发送10个字节到PC */
	}
}
void MoveDisk(int disknum)	//走杯号
{
	int i;
	if(DiskNumNow == 0)	//如果一开机盘没有初始化过
	{
		M4Position_ini();	//盘电机初始化
	}

	if(disknum > 0)
	{
		if(disknum < 21)	//1~20号杯
		{
			if(DiskNumNow < 21)
			{
				if((disknum - DiskNumNow) > 0)
				{
					for(i=0;i<(disknum - DiskNumNow);i++)
					{
						if((IO1PIN & M4D)>>20 == 0)//正好对着光耦2了(为了接下来的“逆转,走到2不挡为止”顺利进行)
						{
							if((60-CDiskStep) >= 0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -