📄 p_eyeview.c
字号:
#include <REG54.H>
#include <INTRINS.H>
#include "protocol.h"
#include "kernel.h"
#include "config.h"
unsigned char id_ext,data5,data4,data6,data7,data8;
unsigned char datax;
void (code *rr)(unsigned char rc);
void word1(unsigned char rc);
void word2(unsigned char rc);
void word3(unsigned char rc);
void word4(unsigned char rc);
void word5(unsigned char rc);
void word6(unsigned char rc);
void word7(unsigned char rc);
void word8(unsigned char rc);
void word9(unsigned char rc);
void word10(unsigned char rc);
void word11(unsigned char rc);
void word1(unsigned char rc) using 1
{
if (rc == 0xbf)
{
rr = word2;
}
}
void word2(unsigned char rc) using 1
{
if (rc != id_ext)
rr = word1;
else
{
rr = word3;
datax = rc;
while(1);
}
}
void word3(unsigned char rc) using 1
{
datax += rc;
rr = word4;
}
void word4(unsigned char rc) using 1
{
datax += rc;
rr = word5;
data4 = rc;
}
void word5(unsigned char rc) using 1
{
data5 = rc;
datax += rc;
rr = word6;
}
void word6(unsigned char rc) using 1
{
data6 = rc;
datax += rc;
rr = word7;
}
void word7(unsigned char rc) using 1
{
data7 = rc;
datax += rc;
rr = word8;
}
void word8(unsigned char rc) using 1
{
data8 = rc;
datax += rc;
rr = word9;
}
void word9(unsigned char rc) using 1
{
datax += rc;
if (rc != 0x01)
rr = word1;
else
{
rr = word10;
datax = 0x9a - datax;
}
}
void word10(unsigned char rc) using 1
{
if (rc != 0xa1)
rr = word1;
else
rr = word11;
}
void word11(unsigned char rc) using 1
{
rr = word1;
if (rc == datax)
{
if(data5 != 0xff)
{
switch(data5)
{
case 0xf9:
set_pre_fg = 1;
run_swing_fg = 0;
run_seq2_fg = 0;
seq[15] = ((0xff - data6) >> 1) + 1;
break;
case 0xf1:
call_pre_fg = 1;
run_swing_fg = 0;
run_seq2_fg = 0;
seq[15] = ((0xff - data6) >> 1) + 1;
break;
case 0x7f:
zoom_tele_fg = 1;
zoom_need_stop = 1;
break;
case 0xbf:
zoom_wide_fg = 1;
zoom_need_stop = 1;
break;
case 0xf7:
case 0xfb:
case 0xef:
case 0xdf:
case 0xe7:
case 0xd7:
case 0xeb:
case 0xdb:
cont_fg = 1;
run_seq2_fg = 0;
run_swing_fg = 0;
run_seq_fg = 0;
seq[12] = (~data5) >> 2;
seq[13] = (~data6) >> 1;
seq[14] = (~data7) >> 1;
break;
}
}
else //不是Extened Command命令
{
switch(data4)
{
case 0xfb: //focu far
focu_far_fg = 1;
focus_need_stop = 1;
break;
case 0xfd: //focu near
focu_near_fg = 1;
focus_need_stop = 1;
break;
case 0xdf: //iris open
iris_open_fg = 1;
break;
case 0xef: //iris close
iris_close_fg = 1;
break;
default:
if (_testbit_(zoom_need_stop)) zoom_stop_fg = 1;
if (_testbit_(focus_need_stop)) focu_stop_fg = 1;
seq[12] = 0; //seq[12]---手动时的方向
cont_fg = 1; //cont_fg---手动控制标志
break;
}
}
}
}
//初始化串行口
extern void init_serial(void)
{
PCON = 0x00;SCON = 0x50; //电源和串行口工作方式设置波特率不倍增
TH2 = 0xff; RCAP2H = 0xff;
#ifdef FOCS_40M
TL2 = 0x7e; RCAP2L = 0x7e;
#else
TL2 = 0xb8; RCAP2L = 0xb8;
#endif
T2CON = 0x34;
rr = word1;
id_ext = id << 1;
id_ext = ~id_ext;
}
//串行口中断服务程序
void serial_int(void) interrupt 4 using 1 // 串行口中断有高优先级,使用寄存器组1
{
ES = 0;
if (_testbit_(RI)) (*rr)(SBUF);
ES = 1;
}
bit power_fg = 1;
/* 返回值为1则不当做预置点功能,返回值为0则是预置点功能 */
/* 用设置预置点的方法来实现附加功能*/
extern bit do_set_addon(unsigned char no)
{
//#ifndef DIS660
#if (1)
switch (no)
{
case F_SCAN_START:
case F_SCAN_END:
case F_SEQ_SET:
no = no;
return 0;
case F_CAM_RESET: //camera reset
addon_fg = 1;
seq[10] = A_RESET;
seq[11] = ON;
return 1;
case F_BLC_OFF: //背光补偿关
addon_fg = 1;
seq[10] = A_BLC;
seq[11] = OFF;
return 1;
case F_ZERO_OFF: //低照度关
addon_fg = 1;
seq[10] = A_ZERO;
seq[11] = OFF;
return 1;
case F_MENU_OFF: //diaplay off
disp_off_fg = 1;
return 1;
case F_DIGI_OFF:
addon_fg = 1; //camera digital off
seq[10] = A_DIGI;
seq[11] = OFF;
return 1;
case F_FOCU_MANU:
addon_fg = 1;
seq[10] = A_FOCU; //聚焦手动
seq[11] = MANU;
return 1;
case F_IRIS_MANU: // 光圈手动
addon_fg = 1;
seq[10] = A_IRIS;
seq[11] = MANU;
return 1;
case F_WB_MANU: // 白平衡手动
addon_fg = 1;
seq[10] = A_WB;
seq[11] = MANU;
return 1;
case F_BLACK: //黑白模式
addon_fg = 1;
seq[10] = A_BLACK;
seq[11] = OFF;
return 1;
case F_FREEZE_OFF: //图象冻结解除
addon_fg = 1;
seq[10] = A_FRZE;
seq[11] = OFF;
return 1;
case F_MIRRO_OFF: //镜像解除
addon_fg = 1;
seq[10] = A_MIRR;
seq[11] = OFF;
return 1;
default:
no = no;
return 0;
}
#else
no = no;
return 0;
#endif
}
/* 用调用预置点的方法来实现附加功能*/
extern bit do_call_addon(unsigned char no)
{
//#ifndef DIS660
#if (1)
switch (no)
{
case F_SCAN_RUN:
run_swing_fg = 1;
seq[17] = F_SCAN_START; //start point
seq[18] = F_SCAN_END; //end point
return 1;
case F_SCAN_STOP:
run_swing_fg = 0;
return 1;
case F_SEQ_RUN:
run_seq2_fg = 1; //运行轨迹标志,调用第一至第十六个预置点
return 1;
case F_CAM_POWER:
power_fg = !power_fg;
power_on_fg = power_fg;
power_off_fg = !power_fg;
return 1;
case F_BLC_ON: //背光补偿开
addon_fg = 1;
seq[10] = A_BLC;
seq[11] = ON;
return 1;
case F_ZERO_ON: //低照度开
addon_fg = 1;
seq[10] = A_ZERO;
seq[11] = ON;
return 1;
case F_MENU_ON: //屏显开
disp_on_fg = 1;
return 1;
case F_DIGI_ON: //数字变倍开
addon_fg = 1;
seq[10] = A_DIGI;
seq[11] = ON;
return 1;
case F_FOCU_AUTO:
addon_fg = 1;
seq[10] = A_FOCU; //聚焦自动
seq[11] = AUTO;
return 1;
case F_IRIS_AUTO: // 光圈自动
addon_fg = 1;
seq[10] = A_IRIS;
seq[11] = AUTO;
return 1;
case F_WB_AUTO: // 白平衡自动
addon_fg = 1;
seq[10] = A_WB;
seq[11] = AUTO;
return 1;
case F_COLOR: //黑白模式
addon_fg = 1;
seq[10] = A_BLACK;
seq[11] = ON;
return 1;
case F_FREEZE_ON: //图象冻结
addon_fg = 1;
seq[10] = A_FRZE;
seq[11] = ON;
return 1;
case F_MIRRO_ON: //镜像开
addon_fg = 1;
seq[10] = A_MIRR;
seq[11] = ON;
return 1;
default:
no = no;
return 0;
}
#else
no = no;
return 0;
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -