📄 main123.c
字号:
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 + -