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

📄 mainbak.c

📁 本文件用于智能云台电机控制和图像处理
💻 C
📖 第 1 页 / 共 3 页
字号:
							vPauseTime=200;
							VMotorOut(SIN16[currentCount]) ;
							
						}
						else
						{
							++accDecCount;
							vSoftTimer0=DECTABLE[accDecCount]/250;
						}
						
						//	VMotorOut(SIN16[currentCount+1]) ;
						break;
					case ACCELERATION:
						if(currentCount==0)
							currentCount=15;
						else
							--currentCount;
						VMotorOut(SIN16[currentCount]) ;
						
						--vAbsolutionPosition;
						if(accDecCount==15)
						{
							vSoftTimer0=ACCTABLE[accDecCount]/250;
							accDecCount=0;
							vPresetPosition=vPresetPosition+16;
							vAccDecFlag=NORMALMOTION;
						}
						else
						{
							vSoftTimer0=ACCTABLE[accDecCount]/250;
							++accDecCount; 				
						}
						
						break;
					case NORMALMOTION:
						if(vPresetPosition!=vAbsolutionPosition)
						{
							if(currentCount==0)
								currentCount=15;
							else
								--currentCount;
							VMotorOut(SIN16[currentCount]) ;
							
							--vAbsolutionPosition;
							vSoftTimer0=-80;
							//	vSoftTimer0=ACCDEC[accDecCount];
						}
						else
							vAccDecFlag=DECELERATION;
						break;
						
					} 			
					break;
				}
		   }
		   
		   break;
	case MULMOTION  :
		if(!vOrientFlag)
		{
			if(vPresetPosition>vAbsolutionPosition)
				
				vOrientFlag=1;
			
			//	else	if(vPresetPosition==vAbsolutionPosition)  TR2=0;
			else 
				
				vOrientFlag=-1;
			
		}
		//
		switch(vOrientFlag)
		{
		default:break;
			
		case 1:
			{
				switch(vAccDecFlag)
				{
				default :break;
				case PAUSE:
					if(!(vPauseTime--))
					{
						vAccDecFlag=ACCELERATION;
						vOrientFlag=0;
						if( (vMulPointCount>=0)&&(vMulPointCount<=3))
						{
							vPresetPosition=VMulPoint[vMulPointCount];
							vMulPointCount++;
						}
						else	if( (vMulPointCount>=4)&&(vMulPointCount<=6))
						{
							vPresetPosition=VMulPoint[8-vMulPointCount];
							vMulPointCount++;
						}
						else 
						{
							vPresetPosition=VMulPoint[8-vMulPointCount];
							vMulPointCount=0;
						}
						
						
					}
					break;
				case DECELERATION:
					if(currentCount==15)
						currentCount=0;
					else
						++currentCount;
					VMotorOut(SIN16[currentCount]) ;
					
					++vAbsolutionPosition;
					if(accDecCount==15)
					{
						vSoftTimer0=DECTABLE[accDecCount]/250;
						accDecCount=0;
						vAccDecFlag=PAUSE;
						vPauseTime=50;
						VMotorOut(SIN16[currentCount]) ;
						
					}
					else
					{
						vSoftTimer0=DECTABLE[accDecCount]/250;
						++accDecCount;				
					}
					
					//	VMotorOut(SIN16[currentCount-1]) ;				
					break;
				case ACCELERATION:
					if(currentCount==15)
						currentCount=0;
					else
						++currentCount;
					VMotorOut(SIN16[currentCount]) ;
					
					++vAbsolutionPosition;
					if(accDecCount==15)
					{
						vSoftTimer0=ACCTABLE[accDecCount]/250;
						accDecCount=0;
						vAccDecFlag=NORMALMOTION;
						vPresetPosition=vPresetPosition-16;
					}
					else
					{
						vSoftTimer0=ACCTABLE[accDecCount]/250;
						++accDecCount;
					}				
					break;
				case NORMALMOTION:
					if(vPresetPosition!=vAbsolutionPosition)
					{
						if(currentCount==15)
							currentCount=0;
						else
							++currentCount;
						VMotorOut(SIN16[currentCount]) ;
						
						++vAbsolutionPosition;
						vSoftTimer0=-2000;
						//	vSoftTimer0=ACCDEC[accDecCount];
					}
					else
						vAccDecFlag=DECELERATION;
					break;
					
				} 			
				break;
			}
		case -1:
			{
				switch(vAccDecFlag)
				{
				default :break;
				case PAUSE:
					if(!(vPauseTime--))
					{
						vAccDecFlag=ACCELERATION;
						vOrientFlag=0;
						if( (vMulPointCount>=0)&&(vMulPointCount<=3))
						{
							vPresetPosition=VMulPoint[vMulPointCount];
							vMulPointCount++;
						}
						else	if( (vMulPointCount>=4)&&(vMulPointCount<=6))
						{
							vPresetPosition=VMulPoint[8-vMulPointCount];
							vMulPointCount++;
						}
						else 
						{
							vPresetPosition=VMulPoint[8-vMulPointCount];
							vMulPointCount=0;
						}
						
					}
					break;				
					
					
				case DECELERATION:
					if(currentCount==0)
						currentCount=15;
					else
						--currentCount;
					VMotorOut(SIN16[currentCount]) ;
					
					--vAbsolutionPosition;
					if(accDecCount==15)
					{
						vSoftTimer0=DECTABLE[accDecCount]/250;
						accDecCount=0;
						vAccDecFlag=PAUSE;
						vPauseTime=50;
						VMotorOut(SIN16[currentCount]) ;
						
					}
					else
					{
						++accDecCount;
						vSoftTimer0=DECTABLE[accDecCount]/250;
					}
					
					//	VMotorOut(SIN16[currentCount+1]) ;
					break;
				case ACCELERATION:
					if(currentCount==0)
						currentCount=15;
					else
						--currentCount;
					VMotorOut(SIN16[currentCount]) ;
					
					--vAbsolutionPosition;
					if(accDecCount==15)
					{
						vSoftTimer0=ACCTABLE[accDecCount]/250;
						accDecCount=0;
						vPresetPosition=vPresetPosition+16;
						vAccDecFlag=NORMALMOTION;
					}
					else
					{
						vSoftTimer0=ACCTABLE[accDecCount]/250;
						++accDecCount; 				
					}
					
					break;
				case NORMALMOTION:
					if(vPresetPosition!=vAbsolutionPosition)
					{
						if(currentCount==0)
							currentCount=15;
						else
							--currentCount;
						VMotorOut(SIN16[currentCount]) ;
						
						--vAbsolutionPosition;
						vSoftTimer0=-2000;
						//	vSoftTimer0=ACCDEC[accDecCount];
					}
					else
						vAccDecFlag=DECELERATION;
					break;
					
				} 			
				break;
			}
		   }
		   
		   break;
		 case SINGLEMOTION :
			 if(!vOrientFlag)
			 {
				 if(vPresetPosition>vAbsolutionPosition)
					 
					 vOrientFlag=1;
				 
				 else	if(vPresetPosition==vAbsolutionPosition)  TR2=0;
				 else 
					 
					 vOrientFlag=-1;
				 
			 }
			 //
			 switch(vOrientFlag)
			 {
			 default:break;
			 case 1:
				 {
					 switch(vAccDecFlag)
					 {
					 default :break;
					 case DECELERATION:
						 if(currentCount==15)
							 currentCount=0;
						 else
							 ++currentCount;
						 VMotorOut(SIN16[currentCount]) ;
						 
						 ++vAbsolutionPosition;
						 if(accDecCount==15)
						 {
							 vSoftTimer0=DECTABLE[accDecCount]/250;
							 accDecCount=0;
							 TR2=0;
							 vAccDecFlag=0;
							 vOrientFlag=0;
							 VMotorOut(SIN16[currentCount]) ;
						 }
						 else
						 {
							 vSoftTimer0=DECTABLE[accDecCount]/250;
							 ++accDecCount;				
						 }
						 
						 //	VMotorOut(SIN16[currentCount-1]) ;				
						 break;
					 case ACCELERATION:
						 if(currentCount==15)
							 currentCount=0;
						 else
							 ++currentCount;
						 VMotorOut(SIN16[currentCount]) ;
						 
						 ++vAbsolutionPosition;
						 if(accDecCount==15)
						 {
							 vSoftTimer0=ACCTABLE[accDecCount]/250;
							 accDecCount=0;
							 vAccDecFlag=NORMALMOTION;
							 vPresetPosition=vPresetPosition-16;
						 }
						 else
						 {
							 vSoftTimer0=ACCTABLE[accDecCount]/250;
							 ++accDecCount;
						 }				
						 break;
					 case NORMALMOTION:
						 if(vPresetPosition!=vAbsolutionPosition)
						 {
							 if(currentCount==15)
								 currentCount=0;
							 else
								 ++currentCount;
							 VMotorOut(SIN16[currentCount]) ;
							 
							 ++vAbsolutionPosition;
							 vSoftTimer0=-2000;
							 //	vSoftTimer0=ACCDEC[accDecCount];
						 }
						 else
							 vAccDecFlag=DECELERATION;
						 break;
						 
					 } 			
					 break;
				 }
			 case -1:
				 {
					 switch(vAccDecFlag)
					 {
					 default :break;
					 case DECELERATION:
						 if(currentCount==0)
							 currentCount=15;
						 else
							 --currentCount;
						 VMotorOut(SIN16[currentCount]) ;
						 
						 --vAbsolutionPosition;
						 if(accDecCount==15)
						 {
							 vSoftTimer0=DECTABLE[accDecCount]/250;
							 accDecCount=0;
							 TR2=0;
							 vAccDecFlag=0;
							 vOrientFlag=0;
							 VMotorOut(SIN16[currentCount]) ;
						 }
						 else
						 {
							 ++accDecCount;
							 vSoftTimer0=DECTABLE[accDecCount]/250;
						 }
						 
						 //	VMotorOut(SIN16[currentCount+1]) ;
						 break;
					 case ACCELERATION:
						 if(currentCount==0)
							 currentCount=15;
						 else
							 --currentCount;
						 VMotorOut(SIN16[currentCount]) ;
						 
						 --vAbsolutionPosition;
						 if(accDecCount==15)
						 {
							 vSoftTimer0=ACCTABLE[accDecCount]/250;
							 accDecCount=0;
							 vPresetPosition=vPresetPosition+16;
							 vAccDecFlag=NORMALMOTION;
						 }
						 else
						 {
							 vSoftTimer0=ACCTABLE[accDecCount]/250;
							 ++accDecCount; 				
						 }
						 
						 break;
					 case NORMALMOTION:
						 if(vPresetPosition!=vAbsolutionPosition)
						 {
							 if(currentCount==0)
								 currentCount=15;
							 else
								 --currentCount;
							 VMotorOut(SIN16[currentCount]) ;
							 
							 --vAbsolutionPosition;
							 vSoftTimer0=-2000;
							 //	vSoftTimer0=ACCDEC[accDecCount];
						 }
						 else
							 vAccDecFlag=DECELERATION;
						 break;
						 
					 } 			
					 break;
				 }
		   }
		   
		   break;
		 case STOPROTATION :
			 switch(vOrientFlag)
			 {
			 default :break;
			 case 1:
				 //	   case DECELERATION:
				 if(currentCount==15)
					 currentCount=0;
				 else
					 ++currentCount;
				 VMotorOut(SIN16[currentCount]) ;
				 
				 ++vAbsolutionPosition;
				 if(accDecCount==15)
				 {
					 vSoftTimer0=DECTABLE[accDecCount]/250;
					 accDecCount=0;
					 TR2=0;
					 vAccDecFlag=0;
					 vOrientFlag=0;
					 VMotorOut(SIN16[currentCount]) ;
				 }
				 else
				 {
					 vSoftTimer0=DECTABLE[accDecCount]/250;
					 ++accDecCount;				
				 }
				 
				 //	VMotorOut(SIN16[currentCount-1]) ;				
				 break;
				 
			 case -1:
				 //  case DECELERATION:
				 if(currentCount==0)
					 currentCount=15;
				 else
					 --currentCount;
				 VMotorOut(SIN16[currentCount]) ;
				 
				 --vAbsolutionPosition;
				 if(accDecCount==15)
				 {
					 vSoftTimer0=DECTABLE[accDecCount]/250;
					 accDecCount=0;
					 TR2=0;
					 vAccDecFlag=0;
					 vOrientFlag=0;
					 VMotorOut(SIN16[currentCount]) ;
				 }
				 else
				 {
					 ++accDecCount;
					 vSoftTimer0=DECTABLE[accDecCount]/250;
				 }
				 
				 //	VMotorOut(SIN16[currentCount+1]) ;
				 break;
			 }
			 
			 break;
		}
		}
	}
	
	
	
	void horizonalmotor(void) interrupt TF2_VECTOR
	{
		static 	unsigned char currentCount=0;
		static 	unsigned char accDecCount=0;
		
		TF2=0;
		
		switch(hRotationManner)
		{
		default:break;
		case FREEMOTION:
			{
				switch(hOrientFlag)
				{
				default:break;
				case 1:
					{
						switch(hAccDecFlag)
						{
						default :break;
						case ACCELERATION:
							if(currentCount==15)
								currentCount=0;
							else
								++currentCount;
							HMotorOut(SIN16[currentCount]) ;
							if(hAbsolutionPosition==3999)
								hAbsolutionPosition=0;
							else
								++hAbsolutionPosition;
							if(accDecCount==15)
							{
								RCAPT2=ACCTABLE[accDecCount];
								accDecCount=0;
								hAccDecFlag=NORMALMOTION;
							}
							else
							{
								RCAPT2=ACCTABLE[accDecCount];
								++accDecCount;
							}				
							break;
						case NORMALMOTION:
							if(currentCount==15)
								currentCount=0;
							else
								++currentCount;
							HMotorOut(SIN16[currentCount]) ;
							if(hAbsolutionPosition==3999)
								hAbsolutionPosition=0;
							else
								++hAbsolutionPosition;
							RCAPT2=-2000;
							//	RCAPT2=ACCDEC[accDecCount];
							break;
							
						} 			
						break;
					}
				case -1:
					{
						switch(hAccDecFlag)
						{
						default :break;
						case ACCELERATION:
							if(currentCount==0)
								currentCount=15;
							else
								--currentCount;
							HMotorOut(SIN16[currentCount]) ;
							if(hAbsolutionPosition==0)
								hAbsolutionPosition=3999;
							else
								--hAbsolutionPosition;
							if(accDecCount==15)
							{
								RCAPT2=ACCTABLE[accDecCount];
								accDecCount=0;
								hAccDecFlag=NORMALMOTION;
							}
							else
							{
								RCAPT2=ACCTABLE[accDecCount];
								++accDecCount; 				
							}
							
							break;
						case NORMALMOTION:
							if(currentCount==0)
								currentCount=15;
							else
								--currentCount;
							HMotorOut(SIN16[currentCount]) ;
							if(hAbsolutionPosition==0)
								hAbsolutionPosition=3999;
							else
								--hAbsolutionPosition;
							RCAPT2=-2000;
							//	RCAPT2=ACCDEC[accDecCount];
							break;
							
						} 			
						break;
					}
				}
				break;
			}
			
		case DOUBLEMOTION  :
			if(!hOrientFlag)
			{
				if(hPresetPosition>hAbsolutionPosition)
				{
					if((hPresetPosition-hAbsolutionPosition)<2000)
						hOrientFlag=1;
					else 
						hOrientFlag=-1;
				}
				//	else	if(hPresetPosition==hAbsolutionPosition)  TR2=0;
				else 
				{
					if((hAbsolutionPosition-hPresetPosition)<2000)
						hOrientFlag=-1;
					else 
						hOrientFlag=1;
				}
			}
			//
			switch(hOrientFlag)
			{
			default:break;
				
			case 1:
				{
					switch(hAccDecFlag)
					{
					default :break;
					case PAUSE:
						if(!(hPauseTime--))
						{
							hAccDecFlag=ACCELERATION;
							if(hAbsolutionPosition==hPresetPosition1)
								hPresetPosition=hPresetPosition2;
							else
								hPresetPosition=hPresetPosition1;
							hOrientFlag=0;
						}

⌨️ 快捷键说明

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