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

📄 main123.c

📁 本文件用于智能云台电机控制和图像处理
💻 C
📖 第 1 页 / 共 2 页
字号:
							cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;

			/*			
						  case   0x0021:		  //自动扫描关闭
							T1_stop();
							T0_stop();
							Focus_stop();
							Zoom_stop();
							cAutoScan=0;    //自动扫描标志
							
							break;
							*/
						case	0x0004:		  //向左	左右由T0控制
							

							if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
							cDirectHorizon=1;
							T1_stop();
							if(cDirectHorizonLim ==1 )
								break;
								cDirectHorizonLim =0;	
							T0_start();
							break;

						
						case	0x0002:		  //向右
						
							if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}

							cDirectHorizon=-1;
							T1_stop();
							if(cDirectHorizonLim ==-1 )
								break;
								cDirectHorizonLim =0;	
							T0_start();
							break;	
						

						case	0:		  //结束所有运动   标准的
							
							T1_stop();
							T0_stop();
							CameraStop();
							
							break;
						case	0x051:		  //结束所有运动   硬盘机
							
							T1_stop();
							T0_stop();
							CameraStop();
							
							break;
						default :break;
						}
						
						break;
					}
					else
					{							   //不是本球机的接收码ID不正确或者是一误码都必须会结束
						cKeyCodeReceiveState=0;
						break;					   //处理并且清除接收标志
					}
					
					   default: break;
					  }
					 }
					 }
					 break;

	 case 8:	   //B01协议
	while(1)
			 {	 
			 	 WDT_cls();
			
			  if(8!=cProtocal)   // 利用协议出错处理
			{
			goto ERRor;
			}		 
				 if(cKeyCodeReceiveState)
				 {
					
	
					 switch((unsigned char)cKeyCodeReceive)
					 {
					 case 0xa0:		  //防误码先接收一个FF后接下来进行 判断是否下个码

	
					  cKeyCodeReceiveState=0; //取走第一个码
						 while(!cKeyCodeReceiveState)  //对于键盘发出的选择球机也是七位FF开始的码
						 {
							 _nop_();

						 }

						 if(0xa0==(unsigned char)cKeyCodeReceive)	   //判断是否是误码,FF说明是误码
						 {							   //不进行处理转入从头开始的循环
							 //不清标志
  

							 break;
						 }
						 else if( (unsigned char)cKeyCodeReceive==id)	//说明是正确的键盘码转入处理程序
						 {
							 
							 x=2;
							 pKeyCode=sKeyCode;	
							 *pKeyCode=0xa0;	   //起始同步码
						
							 ++pKeyCode;
							 *pKeyCode=id;	   //ID码
  
							 cKeyCodeReceiveState=0;//已取走第二个码
							 do
							 {
						
								 while(!cKeyCodeReceiveState)  //读码等待
								 {
									 _nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
 	
								 cKeyCodeReceiveState=0; //取走键盘码
								 ++x;	
							 }while(x!=11);	 //读码结束标志
						   
							 x= ((unsigned int)sKeyCode[3]<<8)+sKeyCode[4]; //构造一译码关键字
					
							 WDT_cls();
							             
							 switch(x)
							 {
							 	case	0x1000:		  //光圈开
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisOpen();
								 break;
							case	0x0800:		  //光圈关
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisClose();
								 break;	
							 case	0x0200:		  //焦距拉近	   因电路接线 必须单操作
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Focus_near();
								 break;
								 
							 case	0x0100:		  //焦距拉远
								 	if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Focus_far()	;
								 break;
								 
							 case	0x0040:		  //视角宽
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Zoom_wide();
								 break;
								 
							 case	0x0020:		  //视角窄
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Zoom_tele();
								 break;
								 
							 case	0x0008:		  //向上	上下由T1控制
								 if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectVertical=1 ;	
								 T0_stop();
								 if(cDirectVerticalLim==1 )
									 break;	
								 cDirectVerticalLim=0;
								 T1_start();
								 break;
							 case	0x0010:		  //向下
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectVertical=-1 ;
								 T0_stop();
								 if(cDirectVerticalLim==-1 )
									 break;
									 cDirectVerticalLim=0;
								 T1_start();
								 break;
							 case	0x0004:		  //向左	左右由T0控制
							   if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectHorizon=1;
								 T1_stop();
								 if(cDirectHorizonLim ==1 )
									 break;	
									 cDirectHorizonLim =0;	  //可以运动则复位
								 T0_start();
								 break;
							 case	0x0002:		  //向右
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectHorizon=-1;
								 T1_stop();
								 if(cDirectHorizonLim ==-1 )
									 break;	
									 cDirectHorizonLim =0;	   //可以运动则复位
								 T0_start();
								 break;
							  case   0x0011:		  //自动扫描
							  cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;
							 case	0:		  //结束所有运动  1标准
								 T1_stop();
								 T0_stop();
								 CameraStop();
								 break;
								 case	0x001f:		  //结束所有运动   2  明景工控
								 T1_stop();
								 T0_stop();
								 CameraStop();
								 break;
							 default :break;
							 }
							 
				 
							 break;				   //处理程序后的分枝完成
					
					
						 }
						 else
						 {							   //不是本球机的接收码ID不正确或者是一误码都必须会结束
							 cKeyCodeReceiveState=0;
							 break;					   //处理并且清除接收标志
						 }
						 
					   default:	   break;
					 }						   //结束协议一次接收
				
					 }						   //结束  if有数
  	
					 }						   //结束协议的while
					 break;					   //结束协议的case事件
					 
					 

	 case 7:	   //亚安
	while(1)
	
	{
			 	 WDT_cls();	
 		if(7!=cProtocal)   // 利用协议出错处理
			{
			goto ERRor;
			}	
				 if(cKeyCodeReceiveState)
				 {
					
	
					 switch((unsigned char)cKeyCodeReceive)
					 {
					 case 0x02:		  //防误码先接收一个FF后接下来进行 判断是否下个码

	
					  cKeyCodeReceiveState=0; //取走第一个码
						 while(!cKeyCodeReceiveState)  //对于键盘发出的选择球机也是七位FF开始的码
						 {
							 _nop_();

						 }
					if(0x02==(unsigned char)cKeyCodeReceive)	   //判断是否是误码,FF说明是误码
						 {							 
							 

							 break;		 //
						 }
						  						 
						 else if( (unsigned char)cKeyCodeReceive==id)	//说明是正确的键盘码转入处理程序
						 {
							 
							
							 	 pKeyCode=sKeyCode;	
							 *pKeyCode=0x02;	   //起始同步码
		         			 ++pKeyCode;
							 *pKeyCode=id;	   //ID码
   
							 cKeyCodeReceiveState=0;
							
								 while(!cKeyCodeReceiveState)  //读码等待
								 {
									 _nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
 	
								 cKeyCodeReceiveState=0; //取走键盘码
								  if((sKeyCode[3]>1)&&(sKeyCode[3]<12))
								  {
								    while(!cKeyCodeReceiveState)  //读码等待
								 {
									 _nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
 	
								 cKeyCodeReceiveState=0; //取走键盘码
								  while(!cKeyCodeReceiveState)  //读码等待
								 {
									 _nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
 	
								 cKeyCodeReceiveState=0; //取走键盘码
								  }
								  else
								  {
								   while(!cKeyCodeReceiveState)  //读码等待
								 {
									 _nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
 	
								 cKeyCodeReceiveState=0; //取走键盘码
								  while(!cKeyCodeReceiveState)  //读码等待
								 {
									 _nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
 	
								 cKeyCodeReceiveState=0; //取走键盘码
								  while(!cKeyCodeReceiveState)  //读码等待
								 {
									 _nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
 	
								 cKeyCodeReceiveState=0; //取走键盘码
								  }
								 
							 y= (((unsigned long)sKeyCode[2])<<16)+(((unsigned long)sKeyCode[3])<<8)+(unsigned long)sKeyCode[4]; 
							 //构造一译码关键字
					
							 WDT_cls();
							  
				 			   switch(y)
							 {
							 case	0x014000:		  //焦距拉近	   因电路接线 必须单操作
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Focus_near();
								 break;
								 
							 case	0x018000:		  //焦距拉远
								 if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Focus_far()	;
								 break;
								 
							 case	0x011000:		  //视角宽
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Zoom_wide();
								 break;
								 
							 case	0x012000:		  //视角窄
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Zoom_tele();
								 break;
							case	0x010001:		  //光圈开
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisOpen();
								 break;
							case	0x010002:		  //光圈关
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisClose();
								 break;		 
							 case	0x010400:		  //向上	上下由T1控制
								 if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectVertical=1 ;	
								 T0_stop();
								 if(cDirectVerticalLim==1 )
									 break;	
								 cDirectVerticalLim=0;
								 T1_start();
								 break;
							 case	0x010800:		  //向下
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectVertical=-1 ;
								 T0_stop();
								 if(cDirectVerticalLim==-1 )
									 break;
									 cDirectVerticalLim=0;
								 T1_start();
								 break;
							 case	0x010200:		  //向左	左右由T0控制
							   if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectHorizon=1;
								 T1_stop();
								 if(cDirectHorizonLim ==1 )
									 break;	
									 cDirectHorizonLim =0;	  //可以运动则复位
								 T0_start();
								 break;
							 case	0x010100:		  //向右
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectHorizon=-1;
								 T1_stop();
								 if(cDirectHorizonLim ==-1 )
									 break;	
									 cDirectHorizonLim =0;	   //可以运动则复位
								 T0_start();
								 break;
							  case   0x0f0300:		  //自动扫描
							  cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;
							  
								 case	0x010000:		  //结束所有运动   
								 T1_stop();
								 T0_stop();
								 CameraStop();
								 break;
							 
							 default :break;
							 }
							 
				 
							 break;				   //处理程序后的分枝完成
					
					
						 }
						 else
						 {							   //不是本球机的接收码ID不正确或者是一误码都必须会结束
							 cKeyCodeReceiveState=0;
							 break;					   //处理并且清除接收标志
						 }
						 
					   default:	   break;
					   					  }						   //结束协议一次接收
				
					 }						   //结束  if有数
					 }
  
					 break;					   //结束协议的case事件
					 				 



	}
}	
	
	

⌨️ 快捷键说明

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