?? cam_hita.c
字號:
/*
Library for control hitachi camera
V 1.00 build 2003.06.20
support camera list:
16X:
VK_S914(TTL)
22X:
VK_S234(TTL)
23X:
VK_S454(TTL)
*/
#include <REG54.H>
#include <INTRINS.H>
#include <STRING.H>
#include "kernel.h"
#include "camera.h"
//#include "cam_func.h"
#include "config.h"
//發(fā)送或接收數(shù)據(jù)時關(guān)中斷
#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;
//EA = 0;
ATXD = 0; // 發(fā)送起始碼
_nop_();
for (i=0;i<8;i++)
{
cam_bit_delays();
cam_data >>= 1;
ATXD = CY;
}
cam_bit_delays();
ATXD = check_bit;
cam_bit_delays();
//EA = 1;
ATXD = 1; // 發(fā)送結(jié)束碼
cam_bit_delays();
}
extern unsigned char cam_receive_byte()
{
unsigned int i = 0;
unsigned char cam_data;
EA = 0;
RESET;
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++) // 開始移位接收數(shù)據(jù)
{
cam_bit_delayr();
cam_data >>= 1;
ARXD = 1;
if (ARXD) cam_data |= 0x80; // '低位在前讀數(shù)據(jù)'經(jīng)典
}
cam_bit_delayr();
cam_bit_delayr();
cam_bit_delayr();
goto sr_exit;
}
}
RESET;
}while ((++i) <10000);
sr_exit:
EA = 1;
return cam_data;
}
//bit icr_fg = 0;
//bit icr_need_fg = 0;
bit icr_manu_fg = 0;
//bit iris_manu_fg = 0;
//bit bw_fg = 0;
//unsigned char idata cam_id;
//unsigned int idata cc_icr = 0;
unsigned char idata s_data[11];
// camera
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)
{
if (asc < 0x30) return 0xff;
asc -= 0x30;
if (asc < 0x0a) return asc;
asc -= 0x07;
if ((asc < 0x0a) || (asc > 0x0f)) return 0xff;
return asc;
}
unsigned char asc2hex2(unsigned char hi,lo)
{
unsigned char tmphi,tmplo;
tmphi = asc2hex(hi);
if ( tmphi == 0xff) return 0xff;
tmplo = asc2hex(lo);
if ( tmplo == 0xff) return 0xff;
return (tmphi<<4 | tmplo);
}
unsigned char hex2aschi(unsigned char hex)
{
unsigned char tmp;
tmp = hex;
tmp &= 0xf0;
tmp >>= 4;
return asc[tmp];
}
unsigned char hex2asclo(unsigned char hex)
{
unsigned char tmp;
tmp = hex;
tmp &= 0x0f;
return asc[tmp];
}
//模擬發(fā)送并接收一組數(shù)據(jù),接收的數(shù)據(jù)存在發(fā)送的數(shù)組中
void cam_sandr_comm(unsigned char * s,unsigned char cc)
{
while (cc--)
{
RESET;
cam_send_byte(*s);
*s = cam_receive_byte();
s++;
}
}
void cam_send_command(unsigned char *s,unsigned char cc)
{
while (cc--)
{
cam_send_byte(*s);
s++;
}
delay_xms(30);
}
extern void cam_focus_auto()
{
f_auto_fg = 1;
cam_send_command(":WFF0E00",8);
//delay_xms(30);
}
extern void cam_focus_manu()
{
f_auto_fg = 0;
cam_send_command(":WFF0E08",8);
//delay_xms(30);
}
extern void cam_focus_far()
{
cam_focus_manu();
//delay_xms(30);
cam_send_command(":WFCBBA9",8);
//delay_xms(30);
}
extern void cam_focus_near()
{
cam_focus_manu();
//delay_xms(30);
cam_send_command(":WFCBBAA",8);
//delay_xms(30);
}
extern void cam_focus_stop()
{
cam_send_command(":WFCBBFE",8);
//delay_xms(30);
}
extern void cam_zoom_wide()
{
cam_send_command(":WFCBB9B",8);
//delay_xms(30);
}
extern void cam_zoom_tele()
{
cam_send_command(":WFCBB99",8);
//delay_xms(30);
}
extern void cam_zoom_stop()
{
cam_focus_stop();
//delay_xms(30);
cam_focus_auto();
//delay_xms(30);
}
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_inq_zoom_pos() {}
//extern void cam_inq_focus_pos() {}
extern void cam_get_id(void)
{
cam_send_command(":WFDFC04",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();
//delay_xms(30);
cam_send_command(":WF75303",8);
//delay_xms(30);
/*
th = pre[11]; // tcb
tl = pre[12];
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(th);
s_data[7] = hex2asclo(th);
s_data[8] = hex2aschi(tl);
s_data[9] = hex2asclo(tl);
cam_send_command(s_data,10);
delay_xms(30);
th = pre[13]; // tcda
tl = pre[14];
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(th);
s_data[7] = hex2asclo(th);
s_data[8] = hex2aschi(tl);
s_data[9] = hex2asclo(tl);
cam_send_command(s_data,10);
delay_xms(30);
th = pre[15]; // tcdb
tl = pre[16];
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(th);
s_data[7] = hex2asclo(th);
s_data[8] = hex2aschi(tl);
s_data[9] = hex2asclo(tl);
cam_send_command(s_data,10);
delay_xms(30);
th = pre[17]; // 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(th);
s_data[7] = hex2asclo(tl);
cam_send_command(s_data,8);
delay_xms(30);
*/
RESET;
// digit
if (pre[5] || pre[6])
{
cam_d_zoom_on();
//WDTC |= 0x40;
//delay_xms(30);
}
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[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);
//delay_xms(30);
// 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[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);
//delay_xms(30);
// 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[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);
do{
strcpy(s_data,":rF7140000");
cam_sandr_comm(s_data,10);
delay_xms(30);
th = asc2hex2(s_data[6],s_data[7]);
tl = asc2hex2(s_data[8],s_data[9]);
RESET;
if (i++ > 200) break;
} while (((th != pre[9]) || (tl != pre[10])));
cam_send_command(":WF75302",8);
//delay_xms(30);
ES = 1;
}
extern void cam_set_preset(void)
{
ES = 0;
RESET;
cam_focus_manu();
/*
strcpy(s_data,":rF7BE0000");
cam_sandr_comm(s_data,10); // read tcb 2 bits
seq[11] =asc2hex2(s_data[6],s_data[7]);
seq[12] =asc2hex2(s_data[8],s_data[9]);
strcpy(s_data,":rF7C20000");
cam_sandr_comm(s_data,10); // read tcda 2 bits
seq[13] =asc2hex2(s_data[6],s_data[7]);
seq[14] =asc2hex2(s_data[8],s_data[9]);
strcpy(s_data,":rF7C40000");
cam_sandr_comm(s_data,10); // read tcdb 2 bits
seq[15] =asc2hex2(s_data[6],s_data[7]);
seq[16] =asc2hex2(s_data[8],s_data[9]);
strcpy(s_data,":RF89500");
cam_sandr_comm(s_data,8); // read select tc 1 bits
seq[17] =asc2hex2(s_data[6],s_data[7]);
*/
strcpy(s_data,":rFC6E0000");
cam_sandr_comm(s_data,10); // read digit zoom 2 bits
seq[5] = asc2hex2(s_data[6],s_data[7]);
seq[6] = asc2hex2(s_data[8],s_data[9]);
RESET;
delay_xms(30);
strcpy(s_data,":rF7100000");
cam_sandr_comm(s_data,10); // read focus position 2 bits
seq[7] = asc2hex2(s_data[6],s_data[7]); // focu hi
seq[8] = asc2hex2(s_data[8],s_data[9]); // focu lo
RESET;
delay_xms(30);
strcpy(s_data,":rF7140000");
cam_sandr_comm(s_data,10); // read zoom position 2 bits
seq[9] = asc2hex2(s_data[6],s_data[7]); // zoom hi
seq[10] = asc2hex2(s_data[8],s_data[9]); // zoom lo
RESET;
delay_xms(30);
ES = 1;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -