?? cam_hita2.c
字號:
/*
Library for control hitachi camera
V 1.00 build 2003.06.20
support camera list:
16X:
22X:
VK_S214ER(TTL)
23X:
*/
#include <REG54.H>
#include <INTRINS.H>
#include <STRING.H>
#include "kernel.h"
#include "camera.h"
#include "cam_func.h"
#include "config.h"
//發送或接收數據時關中斷
#ifndef _CONFIG
sfr WDTC = 0x8f;
sbit ARXD = P1^2;
sbit ATXD = P1^3;
#endif
//為4800波特率的攝像機使用
#ifdef FOCS_40M
void cam_bit_delays(void)
{
register unsigned char j;
for (j=0;j<226;j++);
_nop_();_nop_();
}
void cam_bit_delayr(void)
{
register unsigned char j;
for (j=0;j<223;j++);_nop_();_nop_();
}
void half_bit_delay(void)
{
register unsigned char j;
for (j=0;j<112;j++);
}
#else
void cam_bit_delays(void)
{
register unsigned char j;
for (j=0;j<123;j++);
}
void cam_bit_delayr(void)
{
register unsigned char j;
for (j=0;j<120;j++);
}
void half_bit_delay(void)
{
register unsigned char j;
for (j=0;j<61;j++);
}
#endif
extern void cam_send_byte(unsigned char cam_data)
{
register unsigned char i;
bit check_bit;
RESET;
ACC = cam_data;
check_bit = P;
ATXD = 0; // 發送起始碼
_nop_();
for (i=0;i<8;i++)
{
cam_bit_delays();
cam_data >>= 1;
ATXD = CY;
}
cam_bit_delays();
ATXD = check_bit;
cam_bit_delays();
ATXD = 1; // 發送結束碼
cam_bit_delays();
}
extern unsigned char cam_receive_byte()
{
unsigned int i = 0;
unsigned char cam_data;
do
{
ARXD = 1;
if (!ARXD)
{
half_bit_delay();
ARXD = 1;
if (!ARXD)
{
cam_data = 0;
_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
for(i=0;i<8;i++) // 開始移位接收數據
{
cam_bit_delayr();
cam_data >>= 1;
ARXD = 1;
if (ARXD) cam_data |= 0x80; // '低位在前讀數據'經典
}
cam_bit_delayr();
return cam_data;
}
}
RESET;
}while ((++i) <10000);
return 0xff;
}
bit icr_manu_fg = 0;
unsigned char idata s_data[11];
unsigned char code asc[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
unsigned char asc2hex(unsigned char asc)
{
return ((asc < 0x3a) ? (asc - 0x30) : (asc - 0x37));
}
unsigned char asc2hex2(unsigned char hi,lo)
{
return ((asc2hex(hi) << 4) | asc2hex(lo));
}
unsigned char hex2aschi(unsigned char hex)
{
return asc[(hex & 0xf0) >> 4];
}
unsigned char hex2asclo(unsigned char hex)
{
return asc[hex & 0x0f];
}
//模擬發送并接收一組數據,接收的數據存在發送的數組中
void cam_sandr_comm(unsigned char * s,unsigned char cc)
{
unsigned char *p;
EA = 0;
for (p = s;p < s + cc;p++)
{
cam_send_byte(*p);
*p = cam_receive_byte();
}
EA = 1;
delay_xms(30);
}
void cam_send_command(unsigned char *s,unsigned char cc)
{
unsigned char *p;
for (p = s;p < s + cc;p++) cam_send_byte(*p);
delay_xms(30);
}
extern void cam_focus_auto()
{
f_auto_fg = 1;
cam_send_command(":WFF0E00",8);
}
extern void cam_focus_manu()
{
f_auto_fg = 0;
cam_send_command(":WFF0E08",8);
}
extern void cam_focus_far()
{
cam_focus_manu();
cam_send_command(":WFCBBA9",8);
}
extern void cam_focus_near()
{
cam_focus_manu();
cam_send_command(":WFCBBAA",8);
}
extern void cam_focus_stop()
{
cam_send_command(":WFCBBFE",8);
}
extern void cam_zoom_wide()
{
cam_send_command(":WFCBB9B",8);
}
extern void cam_zoom_tele()
{
cam_send_command(":WFCBB99",8);
}
extern void cam_zoom_stop()
{
cam_focus_stop();
cam_focus_auto();
}
extern void cam_iris_open() {}
extern void cam_iris_close() {}
extern void cam_power_on() {}
extern void cam_power_off() {}
extern void cam_ae_auto() {}
extern void cam_ae_manu() {}
extern void cam_freeze_on() {}
extern void cam_freeze_off() {}
extern void cam_backlight_on() {cam_send_command(":WFECE02",8);}
extern void cam_backlight_off() {cam_send_command(":WFECE00",8);}
extern void cam_reverse_on() {}
extern void cam_reverse_off() {}
extern void cam_display_on() {}
extern void cam_display_off() {}
extern void cam_d_zoom_on() {cam_send_command(":WFCCB01",8);}
extern void cam_d_zoom_off() {cam_send_command(":WFCCB00",8);}
extern void cam_icrshot_on() {}
extern void cam_icrshot_off() {}
extern void cam_wb_auto() {}
extern void cam_wb_manu() {}
extern void cam_picture_off() {}
extern void cam_picture_bw() {}
extern void cam_get_id(void)
{
cam_send_command(":WFDFC00",8);
}
extern void cam_icr_set(void)
{
}
extern void set_level_limit(void)
{
set_curlimit(1);
}
extern void cam_zoom_focus_direct(void)
{
unsigned char i = 0;
unsigned char th,tl;
ES = 0;
cam_focus_manu();
// zoom
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = '1';
s_data[5] = '6';
s_data[6] = hex2aschi(pre[7]);
s_data[7] = hex2asclo(pre[7]);
s_data[8] = hex2aschi(pre[8]);
s_data[9] = hex2asclo(pre[8]);
cam_send_command(s_data,10);
cam_send_command(":WF75303",8);
// far limit
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = '1';
s_data[5] = '8';
s_data[6] = hex2aschi(pre[9]);
s_data[7] = hex2asclo(pre[9]);
s_data[8] = hex2aschi(pre[10]);
s_data[9] = hex2asclo(pre[10]);
cam_send_command(s_data,10);
// near limit
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = '1';
s_data[5] = 'A';
s_data[6] = hex2aschi(pre[11]);
s_data[7] = hex2asclo(pre[11]);
s_data[8] = hex2aschi(pre[12]);
s_data[9] = hex2asclo(pre[12]);
cam_send_command(s_data,10);
// tcb
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = 'B';
s_data[5] = 'E';
s_data[6] = hex2aschi(pre[13]);
s_data[7] = hex2asclo(pre[13]);
s_data[8] = hex2aschi(pre[14]);
s_data[9] = hex2asclo(pre[14]);
cam_send_command(s_data,10);
// tcda
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = 'C';
s_data[5] = '2';
s_data[6] = hex2aschi(pre[15]);
s_data[7] = hex2asclo(pre[15]);
s_data[8] = hex2aschi(pre[16]);
s_data[9] = hex2asclo(pre[16]);
cam_send_command(s_data,10);
// tcdb
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = 'C';
s_data[5] = '4';
s_data[6] = hex2aschi(pre[17]);
s_data[7] = hex2asclo(pre[17]);
s_data[8] = hex2aschi(pre[18]);
s_data[9] = hex2asclo(pre[18]);
cam_send_command(s_data,10);
// select
s_data[0] = ':';
s_data[1] = 'W';
s_data[2] = 'F';
s_data[3] = '8';
s_data[4] = '9';
s_data[5] = '5';
s_data[6] = hex2aschi(pre[19]);
s_data[7] = hex2asclo(pre[19]);
cam_send_command(s_data,8);
//digi
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = 'C';
s_data[4] = '6';
s_data[5] = 'E';
s_data[6] = hex2aschi(pre[20]);
s_data[7] = hex2asclo(pre[20]);
s_data[8] = hex2aschi(pre[21]);
s_data[9] = hex2asclo(pre[21]);
cam_send_command(s_data,10);
// focu
s_data[0] = ':';
s_data[1] = 'w';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = '1';
s_data[5] = '2';
s_data[6] = hex2aschi(pre[5]);
s_data[7] = hex2asclo(pre[5]);
s_data[8] = hex2aschi(pre[6]);
s_data[9] = hex2asclo(pre[6]);
cam_send_command(s_data,10);
do{
s_data[0] = ':';
s_data[1] = 'r';
s_data[2] = 'F';
s_data[3] = '7';
s_data[4] = '1';
s_data[5] = '4';
s_data[6] = '0';
s_data[7] = '0';
s_data[8] = '0';
s_data[9] = '0';
cam_sandr_comm(s_data,10);
th = asc2hex2(s_data[6],s_data[7]);
tl = asc2hex2(s_data[8],s_data[9]);
RESET;
if (i++ > 30) break;
} while (((th != pre[7]) || (tl != pre[8])));
cam_send_command(":WF75302",8);
ES = 1;
}
extern void cam_set_preset(void)
{
ES = 0;
RESET;
cam_focus_manu();
strcpy(s_data,":rF7100000");
cam_sandr_comm(s_data,10); // read focus position 2 bits
seq[5] = asc2hex2(s_data[6],s_data[7]); // focu hi
seq[6] = asc2hex2(s_data[8],s_data[9]); // focu lo
strcpy(s_data,":rF7140000");
cam_sandr_comm(s_data,10); // read zoom position 2 bits
seq[7] = asc2hex2(s_data[6],s_data[7]); // zoom hi
seq[8] = asc2hex2(s_data[8],s_data[9]); // zoom lo
strcpy(s_data,":rF7180000");
cam_sandr_comm(s_data,10); // read focus position 2 bits
seq[9] = asc2hex2(s_data[6],s_data[7]); // focu hi
seq[10] = asc2hex2(s_data[8],s_data[9]); // focu lo
strcpy(s_data,":rF71A0000");
cam_sandr_comm(s_data,10); // read focus position 2 bits
seq[11] = asc2hex2(s_data[6],s_data[7]); // focu hi
seq[12] = asc2hex2(s_data[8],s_data[9]); // focu lo
strcpy(s_data,":rF7BE0000");
cam_sandr_comm(s_data,10); // read tcb 2 bits
seq[13] =asc2hex2(s_data[6],s_data[7]);
seq[14] =asc2hex2(s_data[8],s_data[9]);
strcpy(s_data,":rF7C20000");
cam_sandr_comm(s_data,10); // read tcda 2 bits
seq[15] =asc2hex2(s_data[6],s_data[7]);
seq[16] =asc2hex2(s_data[8],s_data[9]);
strcpy(s_data,":rF7C40000");
cam_sandr_comm(s_data,10); // read tcdb 2 bits
seq[17] =asc2hex2(s_data[6],s_data[7]);
seq[18] =asc2hex2(s_data[8],s_data[9]);
strcpy(s_data,":RF89500");
cam_sandr_comm(s_data,8); // read select tc 1 bits
seq[19] =asc2hex2(s_data[6],s_data[7]);
strcpy(s_data,":rFC6E0000");
cam_sandr_comm(s_data,10); // read digit zoom 2 bits
seq[20] = asc2hex2(s_data[6],s_data[7]);
seq[21] = asc2hex2(s_data[8],s_data[9]);
ES = 1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -