📄 main.c
字号:
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事件
}
}
/*-----------------
目前只有键盘发码,如果相机发码则加相应处理程序
如果需要只需用if-else语句就可以实现了
-----------------------------------------------*/
/* ---------------------------------------------------------------------------
--------------------以下是中断程序区 ----------------------------------------
-----------------------------------------------------------------------------*/
void left(void) interrupt IE0_VECTOR //水平方向
{
if(cAutoScan==1)
{
cDirectHorizonLim=1; //左极限位换向变成右方向在调试时只需变成反方向即可
}
else
{
T0_stop(); //停止定时器0运动
cDirectHorizonLim=1; //左极限位换向变成右方向在调试时只需变成反方向即可
}
}
void right(void) interrupt IE1_VECTOR
{
if(cAutoScan==1)
{
cDirectHorizonLim=-1; //右极限位换向变成左方向在调试时只需变成反方向即可
}
else
{
T0_stop(); //停止定时器0运动
cDirectHorizonLim=-1; //右极限位换向变成左方向在调试时只需变成反方向即可
}
}
void up(void) interrupt IE2_VECTOR //上下方向
{
if(cAutoTestVertical==1)
{
cDirectVerticalLim=-1;
}
else
{
T1_stop(); //停止定时器1运动
cDirectVerticalLim=-1; //上极限位换向变成下方向在调试时只需变成反方向即可
}
}
void down(void) interrupt IE3_VECTOR
{
if(cAutoTestVertical==1)
{
cDirectVerticalLim=1;
}
else
{
T1_stop(); //停止定时器1运动
cDirectVerticalLim=1; //上极限位换向变成下方向在调试时只需变成反方向即可
}
}
void horizonalmotor(void) interrupt TF0_VECTOR
{
T0_load();
if(cAutoScan==1)
{
if(cDirectHorizonLim==1 )
{
cDirectHorizonLim=0;
cDirectHorizon=-1;
}
if(cDirectHorizonLim==-1 )
{
cDirectHorizonLim=0;
cDirectHorizon=1;
}
}
switch(cDirectHorizon)
{
case -1:
if(cHorizonStep==7)
{
cHorizonStep=0;
}
else
{
++cHorizonStep;
}
break;
case 1:
if(cHorizonStep==0)
{
cHorizonStep=7;
}
else
{
--cHorizonStep;
}
break;
default:break;
}
LeftRight_out(Left_Right[cHorizonStep]);
}
void verticalmotor(void) interrupt TF1_VECTOR
{
T1_load();
if(cAutoTestVertical==1)
{
if(cDirectVerticalLim==1 )
{
cDirectVerticalLim=0;
cDirectVertical=-1;
}
if(cDirectVerticalLim==-1 )
{
cDirectVerticalLim=0;
cDirectVertical=1;
}
}
switch(cDirectVertical)
{
case -1:
if(cVerticleStep==7)
{
cVerticleStep=0;
}
else
{
++cVerticleStep;
}
break;
case 1:
if(cVerticleStep==0)
{
cVerticleStep=7;
}
else
{
--cVerticleStep;
}
break;
default: break;
}
UpDown_out(Up_Down[cVerticleStep]);
}
void receive_send(void) interrupt SIO_VECTOR
{
switch((char)RI)
{
case 1:
RI=0;
cKeyCodeReceiveState=1; //有接收时就置位 然后在主程序中清除
cKeyCodeReceive=SBUF;
/*------------------------------------------------------------------------------------------------*/
// SBUF=cKeyCodeReceive;
/*------------------------------------------------------------------------------------------------*/
break;
case 0:
TI=0;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -