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

📄 main.c

📁 自动控制电机程序
💻 C
📖 第 1 页 / 共 5 页
字号:
			}
			Motor(2,1,40,4);	//再向下走40步

			inStep(add1+60,PumpGet);
			UART1_SendStr(PumpGet);	//再吸20ul空气
			DelayNS(400);	//延时	
		}
		if(Add2Flag == 1)
		{
			MoveDisk(add2num);
			Motor(2,1,SetSDStep,4);	//向下走SetSDStep步,进入样品盘

			DelayNS(100);	//延时
			inStep(add1+add2+60,PumpGet);
			UART1_SendStr(PumpGet);	//取样
			DelayNS(600);	//延时

			M2Position_ini();	//往上走到初始位置
			Motor(2,1,80,4);	//先向下走80步
			while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
			{
				Motor(2,1,1,4);
			}
			Motor(2,1,40,4);	//再向下走40步

			inStep(add1+add2+80,PumpGet);
			UART1_SendStr(PumpGet);	//再吸20ul空气
			DelayNS(400);	//延时	
		}
		if(Add3Flag == 1)
		{
			MoveDisk(add3num);
			Motor(2,1,SetSDStep,4);	//向下走SetSDStep步,进入样品盘

			DelayNS(100);	//延时
			inStep(add1+add2+add3+80,PumpGet);
			UART1_SendStr(PumpGet);	//取样
			DelayNS(600);	//延时

			M2Position_ini();	//往上走到初始位置
			Motor(2,1,80,4);	//先向下走80步
			while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
			{
				Motor(2,1,1,4);
			}
			Motor(2,1,40,4);	//再向下走40步

			inStep(add1+add2+add3+100,PumpGet);
			UART1_SendStr(PumpGet);	//再吸20ul空气
			DelayNS(400);	//延时	
		}

		MoveDisk(samplenum);
		Motor(2,1,SetSDStep,4);	//向下走SetSDStep步,进入样品盘

		DelayNS(100);	//延时
		if(Add1Flag == 1 & Add2Flag == 1 & Add3Flag == 1)
		{
			inStep(sample+add1+add2+add3+100,PumpGet);
		}
		else if(Add1Flag == 1 & Add2Flag == 1)
		{
			inStep(sample+add1+add2+80,PumpGet);
		}
		else if(Add1Flag == 1)
		{
			inStep(sample+add1+60,PumpGet);
		}
		else
		{
			inStep(sample+40,PumpGet);
		}
		UART1_SendStr(PumpGet);	//取样
		DelayNS(600);	//延时

		M2Position_ini();	//往上走到初始位置
		
		if(Add1Flag == 1 & Add2Flag == 1 & Add3Flag == 1)
		{
			inStep(sample+add1+add2+add3+120,PumpGet);
		}
		else if(Add1Flag == 1 & Add2Flag == 1)
		{
			inStep(sample+add1+add2+100,PumpGet);
		}
		else if(Add1Flag == 1)
		{
			inStep(sample+add1+80,PumpGet);
		}
		else
		{
			inStep(sample+60,PumpGet);
		}
		UART1_SendStr(PumpGet);	//再吸20ul空气
		DelayNS(400);	//延时	

		//Add1Number = 0;
		//Add1Sample = 0;
		//Add2Number = 0;
		//Add2Sample = 0;
		//Add3Number = 0;
		//Add3Sample = 0;
		//Add1Flag   = 0;
		//Add2Flag   = 0;
		//Add3Flag   = 0;

		//对准石墨管
		while((IO1PIN & M3D)>>18 == 1)	//逆转,走到4不挡为止
		{
			Motor(3,1,1,4);
		}		
		Motor(2,1,80,4);	//先向下走80步
		while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
		{
			Motor(2,1,1,4);
		}
	
		Motor(2,1,SetGFStep,4);	//向下走SetGFStep步,进入石墨管
		DelayNS(100);	//延时
		UART1_SendStr(PumpAirL);	//进样,管子里剩20ul空气
		DelayNS(800);	//延时

		M2Position_ini();	//上下电机初始化
		//Continue[10] = {'o','u','t','g','f','#','#','#','#','#'};
		Continue[0] = 'o';
		Continue[1] = 'u';
		Continue[2] = 't';
		Continue[3] = 'g';
		Continue[4] = 'f';
		Continue[5] = '#';
		Continue[6] = '#';
		Continue[7] = '#';
		Continue[8] = '#';
		Continue[9] = '#';
		M3Position_ini();	//左右电机初始化
		////Continue[10] = {'x','c','o','n','t','i','n','u','e','#'};
		//Continue[0] = 'x';
		//Continue[1] = 'c';
		//Continue[2] = 'o';
		//Continue[3] = 'n';
		//Continue[4] = 't';
		//Continue[5] = 'i';
		//Continue[6] = 'n';
		//Continue[7] = 'u';
		//Continue[8] = 'e';
		//Continue[9] = '#';

		CL();	//对准清洗槽
		Motor(2,1,SetCLStep,4);	//向下走SetCLStep步,进入清洗槽
		UART1_SendStr(PumpIniQ);	//向串口发送字符串,泵初始化
		DelayNS(800);	//延时
		USB_WriteEndpoint(3, 10, Continue);//GenEpBuf);			/* 发送10个字节到PC */
		UART1_SendStr(PumpCln);
		DelayNS(900);	//延时
		USB_WriteEndpoint(3, 10, Continue);//GenEpBuf);			/* 发送10个字节到PC */
		UART1_SendStr(PumpCln);
		DelayNS(900);	//延时
		USB_WriteEndpoint(3, 10, Continue);//GenEpBuf);			/* 发送10个字节到PC */
		UART1_SendStr(PumpIni);	//向串口发送字符串,泵初始化
		DelayNS(800);	//延时
		USB_WriteEndpoint(3, 10, Continue);//GenEpBuf);			/* 发送10个字节到PC */

		//Continue[0] = 'o';
		//Continue[1] = 'u';
		//Continue[2] = 't';
		//Continue[3] = 'c';
		//Continue[4] = 'l';
		//Continue[5] = '0';
		//Continue[6] = '0';
		//Continue[7] = '0';
		//Continue[8] = '0';
		//Continue[9] = '#';
		SampleOverFlag = 1;	//进样结束标志位置1
		M2Position_ini();	//往上走到初始位置
		Continue[0] = 'x';
		Continue[1] = 'c';
		Continue[2] = 'o';
		Continue[3] = 'n';
		Continue[4] = 't';
		Continue[5] = 'i';
		Continue[6] = 'n';
		Continue[7] = 'u';
		Continue[8] = 'e';
		Continue[9] = '#';
		SampleOverFlag = 0;	//进样结束标志位置0

		USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);		/* 发送10个字节到PC */
	}
	else
	{
		USB_WriteEndpoint(3, 10, NoSet);//GenEpBuf);			/* 发送10个字节到PC */
	}
}

////////////////////////////////////////////////////////////////

int main(void)
{	
	INT8U err;
	int Rstep;
	SMC_ini();
	err = USB_Initialize();		//初始化USB控制器
	if (err != 0)
	{
		while(1);				//初始化失败,程序停止执行
	}
	Init_USBInterrupt();		//配置USB中断向量 
			
	UART1_ini();
	IRQEnable();
	//EINT1_ini();
		
	M2Position_ini();	//上下电机初始化
	M3Position_ini();	//左右电机初始化
	M4Position_ini();	//盘电机初始化

	//Motor(int num,int dir,int step,int speed);

	while(1)
	{
		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]=='u' & GenEpBuf[1]=='s' & GenEpBuf[2]=='b' & GenEpBuf[3]=='o' & GenEpBuf[4]=='k')
				{
					USB_WriteEndpoint(3, 10, USBOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='s' & GenEpBuf[1]=='t')
				{
					SetCLStep = (GenEpBuf[2] - 0x30) * 100 + (GenEpBuf[3] - 0x30) * 10 + (GenEpBuf[4] - 0x30) - 80;
					SetSDStep = (GenEpBuf[5] - 0x30) * 100 + (GenEpBuf[6] - 0x30) * 10 + (GenEpBuf[7] - 0x30) - 40;
					SetGFStep =	(GenEpBuf[8] - 0x30) * 10 + (GenEpBuf[9] - 0x30);
					SetFlag   = 1;
					USB_WriteEndpoint(3, 10, SetOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='d' & GenEpBuf[1]=='i' & GenEpBuf[2]=='s' & GenEpBuf[3]=='k')
				{
					if(GenEpBuf[4]=='#')
					{
						CDiskStep = 0;
					}
					else if(GenEpBuf[5]=='#')
					{
						CDiskStep = GenEpBuf[4] - 0x30;
					}
					else if(GenEpBuf[6]=='#')
					{
						CDiskStep = (GenEpBuf[4] - 0x30) * 10 + (GenEpBuf[5] - 0x30);
					}
					else if(GenEpBuf[7]=='#')
					{
						CDiskStep = (GenEpBuf[4] - 0x30) * 100 + (GenEpBuf[5] - 0x30) * 10 + (GenEpBuf[6] - 0x30);
					}					
					USB_WriteEndpoint(3, 10, ReceiveOK);
					M4Position_ini();	//盘电机初始化
					USB_WriteEndpoint(3, 10, DiskOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='f' & GenEpBuf[1]=='i' & GenEpBuf[2]=='r' & GenEpBuf[3]=='s' & GenEpBuf[4]=='t' & GenEpBuf[9]=='#')
				{
					if(GenEpBuf[5]=='d')
					{
						DiskNum01 = (GenEpBuf[6] - 0x30) * 100 + (GenEpBuf[7] - 0x30) * 10 + (GenEpBuf[8] - 0x30);	//默认是360
						DiskNum21 = DiskNum01 + 100;	//默认是460
						DiskNum41 = DiskNum01 + 230; 	//默认是590					
						USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
					}
					else if(GenEpBuf[5]=='c')
					{
						CleanHole = (GenEpBuf[6] - 0x30) * 100 + (GenEpBuf[7] - 0x30) * 10 + (GenEpBuf[8] - 0x30);	//默认是100
						USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
					}
				}
				else if(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='e' & GenEpBuf[3]=='a' & GenEpBuf[4]=='n' & GenEpBuf[6]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					OlnyCleanNum = GenEpBuf[5] - 0x30;
					Clean();	//清洗
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='s' & GenEpBuf[1]=='p')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);					
					if(GenEpBuf[2]=='f' & GenEpBuf[3]=='l' & GenEpBuf[4]=='a' & GenEpBuf[5]=='g')
					{
						Add1Number = 0;
						Add1Sample = 0;
						Add2Number = 0;
						Add2Sample = 0;
						Add3Number = 0;
						Add3Sample = 0;
						Add1Flag   = 0;
						Add2Flag   = 0;
						Add3Flag   = 0;
					}
					else if(GenEpBuf[6]=='1' & GenEpBuf[7]=='#')
					{						
						Add1Number = ((GenEpBuf[2] - 0x30) * 10 + (GenEpBuf[3] - 0x30));
						Add1Sample = ((GenEpBuf[4] - 0x30) * 10 + (GenEpBuf[5] - 0x30));
						Add1Flag   = 1;						
					}
					else if(GenEpBuf[6]=='2' & GenEpBuf[7]=='#')
					{						
						Add2Number = ((GenEpBuf[2] - 0x30) * 10 + (GenEpBuf[3] - 0x30));
						Add2Sample = ((GenEpBuf[4] - 0x30) * 10 + (GenEpBuf[5] - 0x30));
						Add2Flag = 1;						
					}
					else if(GenEpBuf[6]=='3' & GenEpBuf[7]=='#')
					{
						Add3Number = ((GenEpBuf[2] - 0x30) * 10 + (GenEpBuf[3] - 0x30));
						Add3Sample = ((GenEpBuf[4] - 0x30) * 10 + (GenEpBuf[5] - 0x30));
						Add3Flag = 1;						
					}
					else if(GenEpBuf[2]=='c' & GenEpBuf[3]=='l')
					{
						CleanNumber = GenEpBuf[4] - 0x30;
						CleanFlag = 1;						
					}
					else if(GenEpBuf[9]=='#')
					{						
						PumpIni[5] = GenEpBuf[6];
						PumpIni[6] = GenEpBuf[7];
						PumpIni[7] = GenEpBuf[8];
						GetSample(((GenEpBuf[2] - 0x30) * 10 + (GenEpBuf[3] - 0x30)),((GenEpBuf[4] - 0x30) * 10 + (GenEpBuf[5] - 0x30)),Add1Number,Add1Sample,Add2Number,Add2Sample,Add3Number,Add3Sample);	//进样
					}
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */			
				}
				else if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					GF();	//对准石墨管
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='+' & GenEpBuf[3]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					Motor(2,1,1,4);	//往下
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='-' & GenEpBuf[3]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					Motor(2,0,1,4);	//往上
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='i' & GenEpBuf[3]=='n' & GenEpBuf[4]=='#')
				{
					GFinStep = 0;
					USB_WriteEndpoint(3, 10, ReceiveOK);
					GFinFlag = 1;
					GFin();	//调进入深度
					//USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='t' & GenEpBuf[3]=='e' & GenEpBuf[4]=='s' & GenEpBuf[5]=='t')
				{
					if(GenEpBuf[6]=='#')
					{
						GFRStep = 0;
					}
					else if(GenEpBuf[7]=='#')
					{
						GFRStep = GenEpBuf[6] - 0x30;
					}
					else if(GenEpBuf[8]=='#')
					{
						GFRStep = (GenEpBuf[6] - 0x30) * 10 + (GenEpBuf[7] - 0x30);
					}
					else if(GenEpBuf[9]=='#')
					{
						GFRStep = (GenEpBuf[6] - 0x30) * 100 + (GenEpBuf[7] - 0x30) * 10 + (GenEpBuf[8] - 0x30);
					}					
					USB_WriteEndpoint(3, 10, ReceiveOK);
					Motor(2,0,GFRStep+30,4);	//先往上多走30步	
					while((IO1PIN & M2D)>>17 == 1)	//往下,走到6不挡为止
					{
						Motor(2,1,1,4);
					}
					Motor(2,1,GFRStep,4);	//调试
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}	
				else if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='o' & GenEpBuf[3]=='k' & GenEpBuf[4]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					M2Position_ini();	//上下电机初始化
					M3Position_ini();	//左右电机初始化
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			//发送10个字节到PC
				}
				else if(GenEpBuf[0]=='g' & GenEpBuf[1]=='f' & GenEpBuf[2]=='o' & GenEpBuf[3]=='n' & GenEpBuf[4]=='l' & GenEpBuf[5]=='y')
				{
					if(GenEpBuf[6]=='#')
					{
						GFRStep = 0;
					}
					else if(GenEpBuf[7]=='#')
					{
						GFRStep = GenEpBuf[6] - 0x30;
					}
					else if(GenEpBuf[8]=='#')
					{
						GFRStep = (GenEpBuf[6] - 0x30) * 10 + (GenEpBuf[7] - 0x30);
					}
					else if(GenEpBuf[9]=='#')
					{
						GFRStep = (GenEpBuf[6] - 0x30) * 100 + (GenEpBuf[7] - 0x30) * 10 + (GenEpBuf[8] - 0x30);
					}					
					USB_WriteEndpoint(3, 10, ReceiveOK);
					GF();	//对准石墨管
					Motor(2,1,GFRStep,4);	//调试
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}

				else if(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					CL();	//对准清洗槽
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='+' & GenEpBuf[3]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					Motor(2,1,1,4);	//往下
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='-' & GenEpBuf[3]=='#')
				{
					USB_WriteEndpoint(3, 10, ReceiveOK);
					Motor(2,0,1,4);	//往上
					USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='i' & GenEpBuf[3]=='n' & GenEpBuf[4]=='#')
				{
					CLinStep = 0;
					USB_WriteEndpoint(3, 10, ReceiveOK);
					CLinFlag = 1;
					CLin();	//调进入深度
					//USB_WriteEndpoint(3, 10, ControlOK);//GenEpBuf);			/* 发送10个字节到PC */
				}
				else if(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='t' & GenEpBuf[3]=='e' & GenEpBuf[4]=='s' & GenEpBuf[5]=='t')
				{
					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);
					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(GenEpBuf[0]=='c' & GenEpBuf[1]=='l' & GenEpBuf[2]=='o' & Gen

⌨️ 快捷键说明

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