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

📄 cam_cnb.c

📁 这是监视器行业常见摄像头与球机通讯协议的C语言源代码
💻 C
字号:
/* 	
	Library for control c&b camera 
	V 1.00 build 2003.05.08
	support camera list:
	16X:
	18X:
		CNB-AP200 CST1
*/
#include <REG54.H>
#include <INTRINS.H>
#include "jmq.h"
#include "camera.h"

unsigned char data cam_id =0x00;
unsigned char data cam_data[9];
unsigned char data sd[9];
unsigned char data s_data[6];
unsigned char data cr[9];

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];
}


#ifndef _CONFIG
	sfr WDTC = 0x8f;
	sbit ARXD = P1^2;
	sbit ATXD = P1^3;
#endif



void cam_bit_delays(void)
{
	register unsigned char j;
	
	for (j=0;j<27;j++);
	_nop_();
}

void cam_bit_delayr(void)
{
	register unsigned char j;
	
	for (j=0;j<28;j++);
	_nop_();
}

void half_bit_delay(void)	
{
	register unsigned char j;
	
	for (j=0;j<14;j++);
}


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();

	delay_xms(2);	// add 2003.08.16
}

unsigned char cam_get_cs(unsigned char count)
{
	unsigned char tmp,i;

	tmp = 0;
	for (i=0;i<count;i++) tmp += cam_data[i];
//	return tmp&0xff;
	return tmp;
    
}
	
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;
}


bit bw_fg = 0;


void cam_send_command(unsigned char *p)
{
	unsigned char i;
	for (i = 0;i < 7;i++)
	{
		sd[i] = *p;
		p ++;
	}
	sd[1] = hex2aschi(cam_id);
	sd[2] = hex2asclo(cam_id);

	sd[8] = 0;
	for (i = 0;i < 7;i++)
	{
		sd[8] += sd[i];
	}

	sd[7] = hex2aschi(sd[8]);
	sd[8] = hex2asclo(sd[8]);

	for (i = 0;i < 9;i ++) cam_send_byte(sd[i]);
}

void cam_send_command2(unsigned char *p)
{
	unsigned char i = 0;
	unsigned char tmp;

//	while (*p != 0x2a)
	while (i < 7);
	{		
		cam_send_byte(*p);
		cam_data[i] = *p;
		i++;
		p++;
	}
	
	tmp = cam_get_cs(9);
	cam_send_byte(hex2aschi(tmp));
	cam_send_byte(hex2asclo(tmp));
	//cam_send_byte(hex2aschi(cam_get_cs(9)));
	//cam_send_byte(hex2asclo(cam_get_cs(9)));	
		/*
	s_data[0] = cam_data[0];
	s_data[1] = asc2hex2(cam_data[1],cam_data[2]);
	s_data[2] = asc2hex2(cam_data[3],cam_data[4]);
	s_data[3] = asc2hex2(cam_data[5],cam_data[6]);
	s_data[4] = asc2hex2(cam_data[7],cam_data[8]);
	s_data[5] = cam_get_cs(9)&0xff;	
	for (cam_point = s_data;cam_point<s_data+6;cam_point++)
		{
		cam_send_byte(* cam_point);
		}*/
		}
/*
void cam_send_command(unsigned char *p)
{		
	while (*p != 0x2A)
	{
		cam_send_byte(*p);		
		p++;
	}	
	
}
*/
/*
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};
*/

unsigned char code cam_zoom_stop_[]	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x39,0x30,0x30};
unsigned char code cam_zoom_tele_[]	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x32,0x30,0x30};
unsigned char code cam_zoom_wide_[]	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x34,0x30,0x30};
//unsigned char code cam_d_zoom_on_[]	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x39,0x30,0x30};
//unsigned char code cam_d_zoom_off_[] 	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x39,0x30,0x30};
unsigned char code cam_focus_stop_[]	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x39,0x30,0x30};
unsigned char code cam_focus_far_[]	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x35,0x30,0x30};
unsigned char code cam_focus_near_[]	= {0x2a,0x30,0x30,0x37,0x35,0x30,0x36,0x30,0x30};
unsigned char code cam_focus_auto_[]	= {0x2a,0x30,0x30,0x34,0x3E,0x30,0x30,0x30,0x30};
unsigned char code cam_focus_manu_[]	= {0x2a,0x30,0x30,0x34,0x3F,0x30,0x30,0x30,0x30};
unsigned char code cam_iris_up_[]	= {0x2a,0x30,0x30,0x37,0x35,0x32,0x3E,0x30,0x30};
unsigned char code cam_iris_down_[]	= {0x2a,0x30,0x30,0x37,0x35,0x32,0x3F,0x30,0x30};
unsigned char cam_read_id_[]  = {0x2a,0x30,0x30,0x37,0x33,0x30,0x30,0x30,0x30};

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()		{
/*cam_send_command(cam_icrshot_on_);

#ifdef CAM_SONY_LP
  if (!bw_fg) 
  {
  	delay_xms(20);
  	cam_send_command(cam_picture_bw_);
  }
#endif
*/
}
extern void cam_icrshot_off()		{
/*cam_send_command(cam_icrshot_off_);

#ifdef CAM_SONY_LP
  if (!bw_fg) 
  {
  	delay_xms(20);
  	cam_send_command(cam_picture_off_);
  } 
#endif
*/
}

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()  	{}//bw_fg = 0;cam_send_command(cam_picture_off_);}
extern void cam_picture_bw()   	{}//bw_fg = 1;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)
{
	register unsigned char i,j = 30;	
	cam_send_command(cam_read_id_);
	while ((j--) && (cam_receive_byte() != 0x2a));
	for (i=0;i<3;i++) cr[i] = cam_receive_byte();		
	cam_id = asc2hex2(cr[1],cr[2]);	
}

//extern void cam_icr_set(void)
//{
/*
    cc_icr ++;
	if (cc_icr != 0xffff) return; 
	if (manual_fg) return;
	if (cont_fg) return;
	if (icr_manu_fg) return;

	cam_send_command(cam_inq_gain_pos_);
	cam_inquiry_state();
	delay_xms(20);
	if (seq[42] || seq[43] || seq[44]) goto icr_off; 
	if (seq[45] >= 0x06)
	{	
		if (_testbit_(icr_need_fg))
		{
			cam_icrshot_on();
			icr_fg = 1;
			delay_xms(20);
			cam_icrshot_on();
		}
		else if (!icr_fg)
			icr_need_fg = 1;
	}
	else
	{
icr_off:
		icr_need_fg = 0;
		if (_testbit_(icr_fg)) 
		{
			cam_icrshot_off();
			delay_xms(20);
			cam_icrshot_off();
		}
	}
*/
//}

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);
	//seq[5] = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
	//seq[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);
	//seq[7] = ((seq[42] << 4) & 0xf0) | (seq[43] & 0x0f);
	//seq[8] = ((seq[44] << 4) & 0xf0) | (seq[45] & 0x0f);			
}*/

⌨️ 快捷键说明

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