⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cam_ss.c

📁 这是监视器行业常见摄像头与球机通讯协议的C语言源代码
💻 C
字号:
/* 	
	Library for control sony camera 
	V 1.00 build 2003.05.08
	support camera list:
		SS-800'S-H(232)
		SS-800'S(232)
		SS-801HD(TTL)
		SS-804HD(TTL)
*/

// V1.01 build 2003.05.29 预置点操作关所有中断

#include <REG54.H>
#include <INTRINS.H>
#include "kernel.h"
#include "camera.h"
#include "cam_func.h"

#define ZOOM_POS	0x0200

bit icr_fg = 0;
bit icr_need_fg = 0;
bit icr_manu_fg = 0;
bit iris_manu_fg = 0;
unsigned char data cam_id;

void cam_send_command(unsigned char cam[])
{
	unsigned char cs;
	cam_send_byte(cam[0]);
	cs = cam[0];
	cam_send_byte(cam[1]);
	cs += cam[1];
	cam_send_byte(cam[2]);
	cs += cam[2];
	cam_send_byte(cam[3]);
	cs += cam[3];
	cam_send_byte(cam_id);
	cs += cam_id;
	cam_send_byte(cs);	
	//delay_xms(50);
}

void cam_inquiry_state(void)
{
	register unsigned char i,j = 30;
	
	while (j--)
	{
		if (cam_receive_byte() != 0xc5) continue;
		for (i=39;i<47;i++) seq[i] = cam_receive_byte();
	}
}


extern void cam_zoom_focus_direct(void)
{
	unsigned char idata tmp[] = 
	{
		0xc5,0x00,0x00,0x00,0x00,0x00
	};
	cam_focus_manu();									
	delay_xms(30);

	EA = 0;
	tmp[1] = 0x49;
	tmp[2] = pre[5] & 0x1f;
	tmp[3] = pre[6];
	cam_send_command(tmp);
	EA = 1;
	delay_xms(100);
	
	EA = 0;
	tmp[1] = 0x4a;
	tmp[2] = pre[8] & 0x1f;
	tmp[3] = pre[9];
	cam_send_command(tmp);
	EA = 1;
	delay_xms(100);

	EA = 0;
	tmp[1] = 0x4b;
	tmp[2] = 0;
	tmp[3] = pre[7];
	cam_send_command(tmp);
	EA = 1;
	delay_xms(100);

	EA = 0;
	tmp[1] = 0x4d;
	tmp[2] = 0;
	tmp[3] = 0;
	cam_send_command(tmp);
	EA = 1;
	delay_xms(100);
}

unsigned char code cam_inq_zoom_pos_[] = { 0xc5,0x36,0x00,0x00,0x00,0x00};
unsigned char code cam_inq_focu_pos_[] = { 0xc5,0x37,0x00,0x00,0x00,0x00};

void cam_inq_zoom_pos(void)
{
	cam_send_command(cam_inq_zoom_pos_);
}

extern void cam_set_preset(void)
{
	EA = 0;

	cam_send_command(cam_inq_focu_pos_);
	cam_inquiry_state();
	seq[8] = seq[42];
	seq[9] = seq[43];
	
	delay_xms(20);
	
	cam_inq_zoom_pos();
	cam_inquiry_state();
	seq[5] = seq[42];
  	seq[6] = seq[43];
	seq[7] = seq[44];
	
	EA = 1;

	set_curlimit(1);
/*
	if (seq[44])
		set_curlimit(16);
	else
	    set_curlimit(((seq[42] << 8) | seq[43]) / ZOOM_POS);
*/
}

unsigned char code cam_read_id_[]   = {0xc5,0xcc,0x00,0x00,0x00,0x00};
unsigned char code cam_power_on_[]	= {0xc5,0x3a,0x00,0x00,0x00,0x00};
unsigned char code cam_power_off_[]	= {0xc5,0x3e,0x00,0x00,0x00,0x00};
unsigned char code cam_zoom_stop_[]	= {0xc5,0x5f,0x0c,0x00,0x00,0x00};
unsigned char code cam_zoom_tele_[]	= {0xc5,0x5f,0x01,0x00,0x00,0x00};
unsigned char code cam_zoom_wide_[]	= {0xc5,0x5f,0x03,0x00,0x00,0x00};
unsigned char code cam_d_zoom_on_[]	= {0xc5,0xaa,0x6e,0x01,0x00,0x00};
unsigned char code cam_d_zoom_off_[] = {0xc5,0xaa,0x6e,0x00,0x00,0x00};
unsigned char code cam_focus_stop_[]	= {0xc5,0x5f,0x0c,0x00,0x00,0x00};
unsigned char code cam_focus_far_[]		= {0xc5,0x5f,0x38,0x00,0x00,0x00};
unsigned char code cam_focus_near_[]	= {0xc5,0x5f,0x39,0x00,0x00,0x00};
unsigned char code cam_focus_auto_[]	= {0xc5,0xaa,0x73,0x00,0x00,0x00};
unsigned char code cam_focus_manu_[]	= {0xc5,0xaa,0x73,0x01,0x00,0x00};
unsigned char code cam_iris_up_[]	    = {0xc5,0x5f,0x42,0x00,0x00,0x00};
unsigned char code cam_iris_down_[]		= {0xc5,0x5f,0x43,0x00,0x00,0x00};
unsigned char code cam_wb_auto_[]	    = {0xc5,0xaa,0x65,0x00,0x00,0x00};
unsigned char code cam_wb_manu_[]		= {0xc5,0xaa,0x65,0x04,0x00,0x00};
unsigned char code cam_ae_auto_[] 		= {0xc5,0xaa,0x60,0x00,0x00,0x00};
unsigned char code cam_ae_manu_[]		= {0xc5,0xaa,0x60,0x02,0x00,0x00};
unsigned char code cam_backlight_on_[] = {0xc5,0xaa,0x6d,0x01,0x00,0x00};
unsigned char code cam_backlight_off_[]= {0xc5,0xaa,0x6d,0x00,0x00,0x00};
unsigned char code cam_reverse_on_[]	= {0xc5,0xaa,0x7f,0x01,0x00,0x00};
unsigned char code cam_reverse_off_[]	= {0xc5,0xaa,0x7f,0x00,0x00,0x00};
unsigned char code cam_picture_off_[]	= {0xc5,0xaa,0x71,0x01,0x00,0x00};
unsigned char code cam_picture_bw_[]	= {0xc5,0xaa,0x71,0x00,0x00,0x00};
unsigned char code cam_display_on_[]	= {0xc5,0xaa,0x64,0x24,0x00,0x00};
unsigned char code cam_display_off_[]	= {0xc5,0xaa,0x64,0x00,0x00,0x00};
//maybe use
//unsigned char code cam_set_digi_[] = {0xc5,0x52,0x06,0x00,0x00,0x00};

extern void cam_focus_auto()		{cam_send_command(cam_focus_auto_);}
extern void cam_focus_manu()		{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_);delay_xms(12);cam_send_command(cam_zoom_stop_);}
extern void cam_iris_close()		{cam_send_command(cam_iris_down_);delay_xms(12);cam_send_command(cam_zoom_stop_);}
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()		{}
extern void 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_get_id(void)
{
	unsigned char tmp1,tmp2;
	unsigned char t = 10;

	cam_send_command(cam_read_id_);
	cam_inquiry_state();
	tmp1 = seq[42];
	delay_xms(50);

    while(t--)
	{
		cam_send_command(cam_read_id_);
		cam_inquiry_state();
		tmp2 = seq[42];
		delay_xms(50);

		if (tmp1 == tmp2)
		{
			cam_id = tmp1;
			return;
		}
		tmp1 = tmp2;
	}

	while(1);
}

extern void cam_icr_set(void)
{
}

extern void set_level_limit(void)
{
	set_curlimit(1);
/*	
	EA = 0;
	cam_inq_zoom_pos();
	cam_inquiry_state();
	EA = 1;

	if (seq[44])
		set_curlimit(16);
	else
	    set_curlimit(((seq[42] << 8) | seq[43]) / ZOOM_POS);
*/
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -