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

📄 main123.c

📁 本文件用于智能云台电机控制和图像处理
💻 C
📖 第 1 页 / 共 2 页
字号:

							 y= (((unsigned long)sKeyCode[3])<<16)+(((unsigned long)sKeyCode[4])<<8)+(unsigned long)sKeyCode[5]; 
							 //构造一译码关键字
					
							 WDT_cls();
							  
				 
							  switch(y)
							 {
							 case	0x010800:		  //光圈开
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisOpen();
								 break;
							case	0x011000:		  //光圈关
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisClose();
								 break;	
							 case	0x010200:		  //焦距拉近	   因电路接线 必须单操作
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Focus_near();
								 break;
								 
							 case	0x010100:		  //焦距拉远
								 if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 Focus_far()	;
								 break;
								 
							 case	0x014000:		  //视角宽
								  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	0x010004:		  //向上	上下由T1控制
								 if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectVertical=1 ;	
								 T0_stop();
								 if(cDirectVerticalLim==1 )
									 break;	
								 cDirectVerticalLim=0;
								 T1_start();
								 break;
							 case	0x010008:		  //向下
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectVertical=-1 ;
								 T0_stop();
								 if(cDirectVerticalLim==-1 )
									 break;
									 cDirectVerticalLim=0;
								 T1_start();
								 break;
							 case	0x010001:		  //向左	左右由T0控制
							   if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectHorizon=1;
								 T1_stop();
								 if(cDirectHorizonLim ==1 )
									 break;	
									 cDirectHorizonLim =0;	  //可以运动则复位
								 T0_start();
								 break;
							 case	0x010002:		  //向右
								if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 cDirectHorizon=-1;
								 T1_stop();
								 if(cDirectHorizonLim ==-1 )
									 break;	
									 cDirectHorizonLim =0;	   //可以运动则复位
								 T0_start();
								 break;
							  case   0x031301:		  //自动扫描
							  cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;
							  case   0x031a01:		  //自动扫描
							  cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;
							case   0x031b01:		  //自动扫描
							  cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;
								 case	0x010000:		  //结束所有运动   2  明景工控
								 T1_stop();
								 T0_stop();
								 CameraStop();
								 break;
							 default :break;
							 }
							 
				 
							 break;				   //处理程序后的分枝完成
					
					
						 }
						 else
						 {							   //不是本球机的接收码ID不正确或者是一误码都必须会结束
							 cKeyCodeReceiveState=0;
							 break;					   //处理并且清除接收标志
						 }
						 
					   default:	   break;
					   					  }						   //结束协议一次接收
				
					 }						   //结束  if有数
  	
					 }						   //结束协议的while
					 break;					   //结束协议的case事件
	  
	 
	 case 2:	   //PELCO-P协议
		 			  	
			 while(1)
			 {	
			 

				 WDT_cls();	
		
			if(2!=cProtocal)   // 利用协议出错处理
			{
			goto ERRor;
			}	
				 if(cKeyCodeReceiveState)
				 {
					 cKeyCodeReceiveState=0; //取走第一个码
					 switch(cKeyCodeReceive)
					 {
					 case 0xa0:		  //防误码先接收一个FF后接下来进行 判断是否下个码
						 while(!cKeyCodeReceiveState)  //对于键盘发出的选择球机也是七位FF开始的码
						 {
							 _nop_();
						 }
						 //  cKeyCodeReceiveState=0;
						 if(cKeyCodeReceive==0xa0)	   //判断是否是误码,FF说明是误码
						 {							   //不进行处理转入从头开始的循环
							 //不清标志
							 break;
						 }
						 else if( cKeyCodeReceive==id)	//说明是正确的键盘码转入处理程序
						 {
							 x=2;
							 	 pKeyCode=sKeyCode;	
							 *pKeyCode=0xa0;	   //起始同步码
							 ++pKeyCode;
							 *pKeyCode=id;	   //ID码
							 cKeyCodeReceiveState=0;//已取走第二个码
							 do
							 {
							//	 x=x^*pKeyCode	;	//从第二个开始累加校验
								 while(!cKeyCodeReceiveState)  //读码等待
								 {
									_nop_();
								 }
								 ++pKeyCode;	
								 *pKeyCode=cKeyCodeReceive;
								 cKeyCodeReceiveState=0; //取走键盘码
								 ++x;	
							 }while( x!=8);	 //读码结束标志
						
															
						
							 x= ((unsigned int)sKeyCode[2]<<8)+sKeyCode[3]; //构造一译码关键字
							 WDT_cls();
									 
				  
				 
							 switch(x)
							 {
							 case	0x0400:		  //光圈开
								  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	0x001f:		  //自动扫描 1 pattern start 
								 
								 cAutoScan=1;    //自动扫描标志
								 cDirectHorizon=1;
								 T0_start();
								 break;
								  case	0x0023:		  //自动扫描 2 run pattern
								 
								 cAutoScan=1;    //自动扫描标志
								 cDirectHorizon=1;
								 T0_start();
								 break;
								  case	0x0007:		  //自动扫描   3  preset类功能
								 
								 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:		  //结束所有运动  1标准
								 T1_stop();
								 T0_stop();
								 CameraStop();
								 
								 break;
								 
							 default :break;
							 }
							 
							break; 
						 }
						 else
						 {							   //不是本球机的接收码ID不正确或者是一误码都必须会结束
							 cKeyCodeReceiveState=0;
							 break;					   //处理并且清除接收标志
						 }
						 
					   default: break;
					  }

					 }
					 }
					 break;
					

	 case 12:							//PELCO-D协议
	 
		while(1)
		{
			WDT_cls();
		
		if(12!=cProtocal)   // 利用协议出错处理
			{
			goto ERRor;
			}	
			
			if(cKeyCodeReceiveState)
			{
				cKeyCodeReceiveState=0; //取走第一个码
				switch(cKeyCodeReceive)
				{
				case 0xff:		  //防误码先接收一个FF后接下来进行 判断是否下个码
					
			
					while(!cKeyCodeReceiveState)  //对于键盘发出的选择球机也是七位FF开始的码
					{
						_nop_();
					}
					//  cKeyCodeReceiveState=0;
					if(cKeyCodeReceive==0xff)	   //判断是否是误码,FF说明是误码
					{							   //不进行处理转入从头开始的循环
						//不清标志
						break;
					}
					else if( cKeyCodeReceive==id)	//说明是正确的键盘码转入处理程序
					{
				
						x=2;
						pKeyCode=sKeyCode;	
						*pKeyCode=0xff;	   //起始同步码
						++pKeyCode;
						*pKeyCode=id;	   //ID码
						cKeyCodeReceiveState=0;//已取走第二个码
						do
						{
						//	x=x + *pKeyCode	;	//从第二个开始累加校验
							while(!cKeyCodeReceiveState)  //读码等待
							{
								_nop_();
							}
							++pKeyCode;	
							*pKeyCode=cKeyCodeReceive;
							cKeyCodeReceiveState=0; //取走键盘码
							++x	;
						}while( x!=7);	 //读码结束进入译码处理程序,取低位

				
														 /*-------------------------
														 ---------------------------
														 下面是译码控制主程序
						--------------------------------------------------------------------------*/
					  
						if( sKeyCode[3]==0x55)
							break;
						x= ((unsigned int)sKeyCode[2]<<8)+sKeyCode[3]; //构造一译码关键字
						WDT_cls();
					
					
						switch(x)
						{
						 	case	0x0200:		  //光圈开
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisOpen();
								 break;
							case	0x0400:		  //光圈关
								  if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
								 CameraStop();
								 IrisClose();
								 break;	
							
						case	0x0100:		  //焦距拉近
							if(cAutoScan==1)
							{
							T0_stop();
							cAutoScan=0;    //自动扫描标志
							}
							CameraStop();
							Focus_near();
							break;
							
						case	0x0080:		  //焦距拉远
							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   0x001f:		  //自动扫描功能1
							cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;
							 case   0x0023:		  //自动扫描功能2	硬盘机
							cAutoScan=1;    //自动扫描标志
							cDirectHorizon=1;
							T0_start();
							break;
							 case   0x0007:		  //自动扫描功能3	   工控机

⌨️ 快捷键说明

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