📄 p_hd600.c
字号:
/*
history;
V 1.00 build 2003.05.24 by zh
V 2.00 build 2003.06.21 by zh
V 2.01 build 2003.06.27 by zh
*/
#include <REG54.H>
#include <INTRINS.H>
#include "protocol.h"
#include "kernel.h"
#include "config.h"
unsigned char data data4,data5,data6,data7,data8,datax;
unsigned char data pp = 0; // for seq point
bit start_set_fg = 0;
bit power_fg = 1;
/*
bit len6_fg = 0;
bit ti_fg = 0;
unsigned char idata sd[7];
unsigned char idata preset_no = 0;
*/
void (code * rr)(unsigned char rc);
void (code *ext)(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 send_cs(unsigned char cc);
void word1(unsigned char rc)
{
if (rc == 0xf6)
{
// len6_fg = 1;
rr = word2;
}
/*
else if (rc == 0xf4)
{
len6_fg = 0;
rr = word2;
}*/
}
void word2(unsigned char rc)
{
datax = rc;
data4 = rc;
rr = word3;
}
void word3(unsigned char rc)
{
datax += rc;
if (rc == idh)
rr = word4;
else
rr = word1;
}
void word4(unsigned char rc)
{
datax += rc;
if (rc == id)
rr = word5;
else
rr = word1;
}
void word5(unsigned char rc)
{
/* if (!len6_fg)
{
rr = word1;
datax &= 0x7f;
if (datax == rc)
{
switch (data4)
{
case 0x51:
seq[15] = 100;
call_pre_fg = 1;
break;
case 0x53:
seq[15] = 101;
call_pre_fg = 1;
break;
case 0x58:
seq[15] = 102;
call_pre_fg = 1;
break;
case 0x63:
seq[15] = 103;
call_pre_fg = 1;
break;
case 0x65:
seq[15] = 104;
call_pre_fg = 1;
break;
case 0x67:
seq[15] = 105;
call_pre_fg = 1;
break;
case 0x69:
seq[15] = 106;
call_pre_fg = 1;
break;
case 0x6b:
seq[15] = 107;
call_pre_fg = 1;
break;
case 0x6c:
case 0x6d:
seq[15] = 108;
call_pre_fg = 1;
break;
case 0x6e:
case 0x6f:
seq[15] = 109;
call_pre_fg = 1;
break;
}
}
}
else */
{
data7 = rc;
datax += rc;
rr = word6;
}
}
void word6(unsigned char rc)
{
data8 = rc;
datax += rc;
datax &= 0x7f;
rr = word7;
}
void word7(unsigned char rc)
{
rr = word1;
if (datax == rc)
{
//if (data8 == 0x0f)
{
switch(data4)
{
case 0x45:
cont_fg = 1;
seq[12] = 4;
seq[13] = data7*7;
seq[14] = 0;
if (seq[13] == 0) seq[12] = 0;
break;
case 0x46:
cont_fg = 1;
seq[12] = 2;
seq[13] = data7*7;
seq[14] = 0;
if (seq[13] == 0) seq[12] = 0;
break;
case 0x47:
cont_fg = 1;
seq[12] = 8;
seq[14] = data7*7;
seq[13] = 0;
if (seq[14] == 0) seq[12] = 0;
break;
case 0x48:
cont_fg = 1;
seq[12] = 16;
seq[14] = data7*7;
seq[13] = 0;
if (seq[14] == 0) seq[12] = 0;
break;
case 0x49:
if (data7 != 0x00)
iris_close_fg = 1;
break;
case 0x4a:
if (data7 != 0x00)
iris_open_fg = 1;
break;
case 0x4b:
if (data7 == 0x00)
focu_stop_fg = 1;
else
focu_near_fg = 1;
break;
case 0x4c:
if (data7 == 0x00)
focu_stop_fg = 1;
else
focu_far_fg = 1;
break;
case 0x4d:
if (data7 == 0x00)
zoom_stop_fg = 1;
else
zoom_wide_fg = 1;
break;
case 0x4e:
if (data7 == 0x00)
zoom_stop_fg = 1;
else
zoom_tele_fg = 1;
break;
case 0x52:
set_pre_fg = 1;
seq[15] = data7;
// preset_no = data7;
break;
case 0x54:
call_pre_fg = 1;
seq[15] = data7;
break;
case 0x59:
run_seq2_fg = 1;
break;
case 0x5c:
if (data7 == 0x00)
seq[15] = 51;
else
seq[15] = 52;
set_pre_fg = 1;
break;
case 0x5d:
if (data7 == 0x01)
{
run_swing_fg = 1;
seq[17] = 51;
seq[18] = 52;
}
break;
case 0x9a:
switch(data7)
{
case 0:
break;
case 1:
power_fg = 1;
power_on_fg = 1;
break;
case 2:
addon_fg = 1;
seq[10] = A_DIGI;
seq[11] = ON;
break;
case 3:
addon_fg = 1;
seq[10] = A_FOCU;
seq[11] = AUTO;
break;
case 4:
addon_fg = 1;
seq[10] = A_BLC;
seq[11] = ON;
break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
break;
case 12:
addon_fg = 1;
seq[10] = A_WB;
seq[11] = AUTO;
break;
case 13:
disp_on_fg = 1;
break;
case 14:
addon_fg = 1;
seq[10] = A_MIRR;
seq[11] = ON;
break;
case 15:
default:
break;
}
break;
case 0x9b:
switch(data7)
{
case 0:
break;
case 1:
power_fg = 0;
power_off_fg = 1;
break;
case 2:
addon_fg = 1;
seq[10] = A_DIGI;
seq[11] = OFF;
break;
case 3:
addon_fg = 1;
seq[10] = A_FOCU;
seq[11] = MANU;
break;
case 4:
addon_fg = 1;
seq[10] = A_BLC;
seq[11] = OFF;
break;
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
break;
case 12:
addon_fg = 1;
seq[10] = A_WB;
seq[11] = MANU;
break;
case 13:
disp_off_fg = 1;
break;
case 14:
addon_fg = 1;
seq[10] = A_MIRR;
seq[11] = OFF;
break;
case 15:
default:
break;
}
break;
}
}
}
}
extern bit do_set_addon(unsigned char no)
{
//#ifndef DIS660
switch (no)
{
case F_SCAN_START:
case F_SCAN_END:
no = no;
return 0;
case F_SEQ_SET:
run_seq_fg = 0;
run_seq2_fg = 0;
return 1;
#ifndef DIS660
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:
disp_off_fg = 1;
return 1;
case F_DIGI_OFF:
addon_fg = 1;
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;
#endif
default:
no = no;
return 0;
}
/*
#else
no = no;
return 0;
#endif
*/
}
extern bit do_call_addon(unsigned char no)
{
switch (no)
{
case 0x60:
case 0x61:
case 0x63:
run_seq_fg = 0;
run_swing_fg = 0;
run_swing2_fg = 1;
return 1;
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;
run_swing2_fg = 0;
return 1;
case F_SEQ_RUN:
run_seq2_fg = 1;
return 1;
#ifndef DIS660
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;
#endif
default:
no = no;
return 0;
}
//#else
// no = no;
// return 0;
//#endif
}
/*
case 100:
sd[0] = 0xf5;
sd[1] = 0x10;
sd[2] = idh;
sd[3] = id;
sd[4] = 0x0f;
send_cs(6);
return 1;
case 101:
sd[0] = 0xf5;
sd[1] = 0x11;
sd[2] = idh;
sd[3] = id;
sd[4] = preset_no;
send_cs(6);
return 1;
case 102:
sd[0] = 0xf5;
sd[1] = 0x12;
sd[2] = idh;
sd[3] = id;
sd[4] = 0;
sd[5] = 0;
send_cs(6);
return 1;
case 103:
sd[0] = 0xf5;
sd[1] = 0x14;
sd[2] = idh;
sd[3] = id;
sd[4] = 0;
sd[5] = 0;
send_cs(7);
return 1;
case 104:
sd[0] = 0xf5;
sd[1] = 0x15;
sd[2] = idh;
sd[3] = id;
sd[4] = 0;
sd[5] = 0;
send_cs(7);
return 1;
case 105:
sd[0] = 0xf5;
sd[1] = 0x16;
sd[2] = idh;
sd[3] = id;
sd[4] = 0;
sd[5] = 0;
send_cs(7);
return 1;
case 106:
sd[0] = 0xf5;
sd[1] = 0x17;
sd[2] = idh;
sd[3] = id;
sd[4] = 0;
sd[5] = 0;
send_cs(7);
return 1;
case 107:
sd[0] = 0xf5;
sd[1] = 0x18;
sd[2] = idh;
sd[3] = id;
sd[4] = 0;
sd[5] = 0;
send_cs(7);
return 1;
case 108:
sd[0] = 0xf5;
sd[1] = 0x19;
sd[2] = idh;
sd[3] = id;
sd[4] = 04;
sd[5] = 0;
send_cs(7);
return 1;
case 109:
sd[0] = 0xf5;
sd[1] = 0x1a;
sd[2] = idh;
sd[3] = id;
sd[4] = 02;
sd[5] = 0;
send_cs(7);
return 1; */
/*
void send_cs(unsigned char cc)
{
unsigned char i;
sd[cc - 1] = 0;
for (i=1;i<cc-1;i++) sd[cc-1] += sd[i];
if (sd[cc - 1] > 128) sd[cc - 1] -= 128;
DR = 1;
for (i=0;i<cc;i++)
{
SBUF = sd[i];
while(ti_fg == 0);
ti_fg = 0;
_nop_();
}
DR = 0;
}
*/
extern void init_serial(void)
{
PCON = 0x00;SCON = 0x50;
TH2 = 0xff; RCAP2H = 0xff;
#ifdef FOCS_40M
TL2 = 0x7e; RCAP2L = 0x7e;
#else // for 22.1184
TL2 = 0xb8; RCAP2L = 0xb8;
#endif
T2CON = 0x34;
// for addr 0 -- 511
if ((id & 0x80) == 0x80)
idh |= 0x80;
id &= 0x7f;
AD9 = 1;
if (!AD9) idh |= 0x01;
//for addr 512 -- 1023
//idh |= 0x02;
rr = word1;
}
void serial_int(void) interrupt 4 using 1
{
ES = 0;
//if (_testbit_(TI)) {ti_fg = 1;}
if (_testbit_(RI)) (*rr)(SBUF);
ES = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -