?? cam_sony3.c
字號:
/*
Library for control sony camera
V 1.00 build 2003.05.08
support camera list:
16X:
SONY450AP(TTL)
SONY450LP(TTL)
18X:
SONY480AP(TTL)
SONY480LP(TTL)
FCB-EX480BP(TTL)
*/
// for BP
#include <REG54.H>
#include <INTRINS.H>
#include "kernel.h"
#include "camera2.h"
//#include "cam_func.h"
//#define CAM_SONY_LP
//發送或接收數據時關中斷
#ifndef _CONFIG
sfr WDTC = 0x8f;
sbit ARXD = P1^2;
sbit ATXD = P1^3;
#endif
//為9600波特率的攝像機使用
#ifdef FOCS_40M
void cam_bit_delays(void)
{
register unsigned char j;
for (j=0;j<110;j++);
_nop_();_nop_();
}
void cam_bit_delayr(void)
{
register unsigned char j;
for (j=0;j<108;j++);
}
void half_bit_delay(void)
{
register unsigned char j;
for (j=0;j<60;j++);
}
#else
void cam_bit_delays(void)
{
register unsigned char j;
for (j=0;j<59;j++);
_nop_();
}
void cam_bit_delayr(void)
{
register unsigned char j;
for (j=0;j<56;j++);
_nop_();
}
void half_bit_delay(void)
{
register unsigned char j;
for (j=0;j<32;j++);
}
#endif
extern void cam_send_byte(unsigned char cam_data)
{
register unsigned char i;
//EA = 0;
ATXD = 0; // 發送起始碼
_nop_();
for (i=0;i<8;i++)
{
cam_bit_delays();
cam_data >>= 1;
ATXD = CY;
}
cam_bit_delays();
//EA = 1;
ATXD = 1; // 發送結束碼
cam_bit_delays();
ATXD = 1; // 發送結束碼
cam_bit_delays();
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++) // 開始移位接收數據
{
cam_bit_delayr();
cam_data >>= 1;
ARXD = 1;
if (ARXD) cam_data |= 0x80; // '低位在前讀數據'經典
}
goto sr_exit;
}
}
}while ((++i) <10000);
sr_exit:
EA = 1;
return cam_data;
}
void cam_send_command(unsigned char *p)
{
while (*p != 0xff)
{
cam_send_byte(*p);
p++;
}
cam_send_byte(0xff);
}
void cam_inquiry_state(void)
{
register unsigned char i;
for (i=40;i<47;i++)
seq[i] = cam_receive_byte();
}
extern void cam_zoom_focus_direct(void)
{
cam_focus_manu();
delay_xms(30);
cam_send_byte(0x81); // CAM_ZoomFocus Direct
cam_send_byte(0x01);
cam_send_byte(0x04);
cam_send_byte(0x47);
cam_send_byte((pre[5] >> 4) & 0x0f);
cam_send_byte(pre[5] & 0x0f);
cam_send_byte((pre[6] >> 4) & 0x0f);
cam_send_byte(pre[6] & 0x0f);
cam_send_byte((pre[7] >> 4) & 0x0f);
cam_send_byte(pre[7] & 0x0f);
cam_send_byte((pre[8] >> 4) & 0x0f);
cam_send_byte(pre[8] & 0x0f);
cam_send_byte(0xff);
delay_xms(24);
set_curlimit(((pre[5] << 8) | pre[6])/ 0x02e8);
}
unsigned char code cam_power_on_[] = {0x81,0x01,0x04,0x00,0x02,0xff};
unsigned char code cam_power_off_[] = {0x81,0x01,0x04,0x00,0x03,0xff};
unsigned char code cam_zoom_stop_[] = {0x81,0x01,0x04,0x07,0x00,0xff};
unsigned char code cam_zoom_tele_[] = {0x81,0x01,0x04,0x07,0x27,0xff};
unsigned char code cam_zoom_wide_[] = {0x81,0x01,0x04,0x07,0x37,0xff};
unsigned char code cam_d_zoom_on_[] = {0x81,0x01,0x04,0x06,0x02,0xff};
unsigned char code cam_d_zoom_off_[] = {0x81,0x01,0x04,0x06,0x03,0xff};
//unsigned char code cam_icrshot_on_[] = {0x81,0x01,0x04,0x01,0x02,0xff};
//unsigned char code cam_icrshot_off_[] = {0x81,0x01,0x04,0x01,0x03,0xff};
unsigned char code cam_focus_stop_[] = {0x81,0x01,0x04,0x08,0x00,0xff};
unsigned char code cam_focus_far_[] = {0x81,0x01,0x04,0x08,0x02,0xff};
unsigned char code cam_focus_near_[] = {0x81,0x01,0x04,0x08,0x03,0xff};
unsigned char code cam_focus_auto_[] = {0x81,0x01,0x04,0x38,0x02,0xff};
unsigned char code cam_focus_manu_[] = {0x81,0x01,0x04,0x38,0x03,0xff};
unsigned char code cam_iris_up_[] = {0x81,0x01,0x04,0x0b,0x02,0xff};
unsigned char code cam_iris_down_[] = {0x81,0x01,0x04,0x0b,0x03,0xff};
unsigned char code cam_wb_auto_[] = {0x81,0x01,0x04,0x35,0x00,0xff};
unsigned char code cam_wb_manu_[] = {0x81,0x01,0x04,0x35,0x05,0xff};
unsigned char code cam_ae_auto_[] = {0x81,0x01,0x04,0x39,0x00,0xff};
unsigned char code cam_ae_manu_[] = {0x81,0x01,0x04,0x39,0x03,0xff};
unsigned char code cam_backlight_on_[] = {0x81,0x01,0x04,0x33,0x02,0xff};
unsigned char code cam_backlight_off_[]= {0x81,0x01,0x04,0x33,0x03,0xff};
unsigned char code cam_reverse_on_[] = {0x81,0x01,0x04,0x61,0x02,0xff};
unsigned char code cam_reverse_off_[] = {0x81,0x01,0x04,0x61,0x03,0xff};
unsigned char code cam_freeze_on_[] = {0x81,0x01,0x04,0x62,0x02,0xff};
unsigned char code cam_freeze_off_[] = {0x81,0x01,0x04,0x62,0x03,0xff};
unsigned char code cam_picture_off_[] = {0x81,0x01,0x04,0x63,0x00,0xff};
unsigned char code cam_picture_bw_[] = {0x81,0x01,0x04,0x63,0x04,0xff};
unsigned char code cam_display_on_[] = {0x81,0x01,0x04,0x15,0x02,0xff};
unsigned char code cam_display_off_[] = {0x81,0x01,0x04,0x15,0x03,0xff};
unsigned char code cam_inq_zoom_pos_[] = {0x81,0x09,0x04,0x47,0xff};
unsigned char code cam_inq_focus_pos_[] = {0x81,0x09,0x04,0x48,0xff};
unsigned char code cam_inq_gain_pos_[] = {0x81,0x09,0x04,0x4C,0xff};
extern void cam_focus_auto() {f_auto_fg = 1;cam_send_command(cam_focus_auto_);}
extern void cam_focus_manu() {f_auto_fg = 0;cam_send_command(cam_focus_manu_);}
extern void cam_focus_far() {
cam_focus_manu();
delay_xms(12);
cam_send_command(cam_focus_far_);
}
extern void cam_zoom_wide() {cam_send_command(cam_zoom_wide_);}
extern void cam_zoom_tele() {cam_send_command(cam_zoom_tele_);}
extern void cam_zoom_stop() {
cam_send_command(cam_zoom_stop_);
delay_xms(24);
set_level_limit();
delay_xms(24);
cam_focus_auto();
}
extern void cam_focus_near() {
cam_focus_manu();
delay_xms(24);
cam_send_command(cam_focus_near_);
}
extern void cam_focus_stop() {
cam_send_command(cam_focus_stop_);
}
extern void cam_iris_open() {cam_send_command(cam_iris_up_);}
extern void cam_iris_close() {cam_send_command(cam_iris_down_);}
extern void cam_power_on() {cam_send_command(cam_power_on_);}
extern void cam_power_off() {cam_send_command(cam_power_off_);}
extern void cam_ae_auto() {//iris_manu_fg = 0;
cam_send_command(cam_ae_auto_);}
extern void cam_ae_manu() {//iris_manu_fg = 1;
cam_send_command(cam_ae_manu_);}
extern void cam_freeze_on() {cam_send_command(cam_freeze_on_);}
extern void cam_freeze_off() {cam_send_command(cam_freeze_off_);}
extern void cam_backlight_on() {cam_send_command(cam_backlight_on_);}
extern void cam_backlight_off() {cam_send_command(cam_backlight_off_);}
extern void cam_reverse_on() {cam_send_command(cam_reverse_on_);}
extern void cam_reverse_off() {cam_send_command(cam_reverse_off_);}
extern void cam_display_on() {cam_send_command(cam_display_on_);}
extern void cam_display_off() {cam_send_command(cam_display_off_);}
extern void cam_d_zoom_on() {cam_send_command(cam_d_zoom_on_);}
extern void cam_d_zoom_off() {cam_send_command(cam_d_zoom_off_);}
extern void cam_icrshot_on()
{
}
extern void cam_icrshot_off()
{
}
extern void cam_wb_auto() {cam_send_command(cam_wb_auto_);}
extern void cam_wb_manu() {cam_send_command(cam_wb_manu_);}
extern void cam_picture_off() {cam_send_command(cam_picture_off_);}
extern void cam_picture_bw() {cam_send_command(cam_picture_bw_);}
extern void cam_inq_zoom_pos() {cam_send_command(cam_inq_zoom_pos_);}
extern void cam_inq_focus_pos() {cam_send_command(cam_inq_focus_pos_);}
extern void cam_get_id(void)
{
unsigned char code _cam_icr_auto[] = {0x81,0x01,0x04,0x51,0x02,0xff};
cam_send_command(_cam_icr_auto);
}
extern void cam_icr_set(void)
{
}
extern void set_level_limit(void)
{
unsigned char zh,zl;
cam_inq_zoom_pos();
cam_inquiry_state();
zh = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
zl = ((seq[44] << 4) & 0xf0) | (seq[45] & 0x0f);
set_curlimit(((zh << 8) | zl) / 0x02e8);
}
extern void cam_set_preset(void)
{
cam_inq_zoom_pos(); // read zoom position
cam_inquiry_state();
pre[5] = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
pre[6] = ((seq[44] << 4) & 0xf0) | (seq[45] & 0x0f);
delay_xms(20);
cam_inq_focus_pos(); // read focus position
cam_inquiry_state();
pre[7] = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
pre[8] = ((seq[44] << 4) & 0xf0) | (seq[45] & 0x0f);
}
// for camera title
extern void cam_clr_title(void)
{
unsigned char code _cam_clr_title[] =
{ 0x81,0x01,0x04,0x74,0x00,0xff};
cam_send_command(_cam_clr_title);
}
extern void cam_disp_title(bit onf)
{
unsigned char code _cam_on_title[] =
{ 0x81,0x01,0x04,0x74,0x02,0xff};
unsigned char code _cam_off_title[] =
{ 0x81,0x01,0x04,0x74,0x03,0xff};
if (onf)
cam_send_command(_cam_on_title);
else
cam_send_command(_cam_off_title);
}
extern void cam_set_title(unsigned char apos,unsigned char str[])
{
unsigned char idata mm,nn,pp,qq;
switch (apos)
{
case 0:
mm = 1;
nn = 1;
break;
case 1:
mm = 0x0a;
nn = 17;
break;
}
pp = 6;
qq = 0;
//set position
cam_send_byte(0x81);
cam_send_byte(0x01);
cam_send_byte(0x04);
cam_send_byte(0x73);
cam_send_byte(0x00);
cam_send_byte(mm);
cam_send_byte(nn);
cam_send_byte(pp);
cam_send_byte(qq);
cam_send_byte(0x00);
cam_send_byte(0x00);
cam_send_byte(0x00);
cam_send_byte(0x00);
cam_send_byte(0x00);
cam_send_byte(0x00);
cam_send_byte(0xff);
delay_xms(20);
//set s1 -- s10
cam_send_byte(0x81);
cam_send_byte(0x01);
cam_send_byte(0x04);
cam_send_byte(0x73);
cam_send_byte(0x01);
cam_send_byte(str[0]);
cam_send_byte(str[1]);
cam_send_byte(str[2]);
cam_send_byte(str[3]);
cam_send_byte(str[4]);
cam_send_byte(str[5]);
cam_send_byte(str[6]);
cam_send_byte(str[7]);
cam_send_byte(str[8]);
cam_send_byte(str[9]);
cam_send_byte(0xff);
delay_xms(20);
//set s11 -- s20
cam_send_byte(0x81);
cam_send_byte(0x01);
cam_send_byte(0x04);
cam_send_byte(0x73);
cam_send_byte(0x02);
cam_send_byte(str[10]);
cam_send_byte(str[11]);
cam_send_byte(str[12]);
cam_send_byte(str[13]);
cam_send_byte(str[14]);
cam_send_byte(str[15]);
cam_send_byte(str[16]);
cam_send_byte(str[17]);
cam_send_byte(str[18]);
cam_send_byte(str[19]);
cam_send_byte(0xff);
delay_xms(20);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -