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

📄 cam_sanyo.c

📁 这是监视器行业常见摄像头与球机通讯协议的C语言源代码
💻 C
字号:
#include "config.h"

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


#ifdef FOCS_40M

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

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

void half_bit_delay(void)	
{
	register unsigned char j;
	
	for (j=0;j<30;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_wdog();	
	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;
}

//#define DIS_327
#define ZOOM_POS	0x0200 // for 327
//#define ZOOM_POS    0x0200 // for 122

bit icr_fg = 0;
bit icr_need_fg = 0;
bit icr_manu_fg = 0;
bit iris_manu_fg = 0;
//bit fg = 1;
//bit bw_fg = 0;
unsigned char idata cam_id;
//unsigned char data cam_id;
//unsigned char data cr[9];

extern void cam_send_command(unsigned char *p)
{
	unsigned char cs = 0;
	while ((*p != 0xff) && (*(p+1) != 0xff))
	{
		cam_send_byte(*p);
		cs += *p;
		p++;
	}
	cs = 0x100 - cs;
	cam_send_byte(cs);
	cam_send_byte(0xff);
}

/*void cam_inquiry_state(void)
{
	register unsigned char i;
	
	for (i=39;i<47;i++) 
		seq[i] = cam_receive_byte();
}*/


//unsigned char code cam_power_on_[]	   	= {0xa0,0x01,0x04,0x00,0x00,0xff};
//unsigned char code cam_power_off_[]	   	= {0xa0,0x01,0x04,0x00,0x00,0xff};
unsigned char code cam_zoom_stop_[]	   	= {0xa0,0x02,0x07,0x00,0xff};
unsigned char code cam_zoom_tele_[]		= {0xa0,0x02,0x05,0x00,0xff};
unsigned char code cam_zoom_wide_[]		= {0xa0,0x02,0x06,0x00,0xff};
unsigned char code cam_d_zoom_on_[]		= {0xa0,0x02,0x18,0x04,0x00,0xff};
unsigned char code cam_d_zoom_off_[] 	= {0xa0,0x02,0x18,0x00,0x00,0xff};
unsigned char code cam_icrshot_on_[] 	= {0xa0,0x28,0x01,0x00,0xff};
unsigned char code cam_icrshot_off_[] 	= {0xa0,0x28,0x00,0x00,0xff};
unsigned char code cam_focus_stop_[]	= {0xa0,0x03,0x07,0x00,0xff};
unsigned char code cam_focus_far_[]		= {0xa0,0x03,0x05,0x00,0xff};
unsigned char code cam_focus_near_[]	= {0xa0,0x03,0x06,0x00,0xff};
unsigned char code cam_focus_auto_[]	= {0xa0,0x03,0x00,0x00,0xff};
unsigned char code cam_focus_manu_[]	= {0xa0,0x03,0x01,0x00,0xff};
unsigned char code cam_iris_up_[]	    = {0xa0,0x05,0x15,0x00,0xff};
unsigned char code cam_iris_down_[]		= {0xa0,0x05,0x16,0x00,0xff};
unsigned char code cam_wb_auto_[]	    = {0xa0,0x04,0x00,0x00,0xff};
unsigned char code cam_wb_manu_[]		= {0xa0,0x04,0x01,0x00,0xff};
unsigned char code cam_ae_auto_[] 		= {0xa0,0x05,0x00,0x00,0xff};
unsigned char code cam_ae_manu_[]		= {0xa0,0x05,0x01,0x00,0xff};
unsigned char code cam_backlight_on_[] 	= {0xa0,0x06,0x33,0x00,0xff};
unsigned char code cam_backlight_off_[]	= {0xa0,0x06,0x00,0x00,0xff};
unsigned char code cam_reverse_on_[]	= {0xa0,0x0d,0x01,0x00,0xff};
unsigned char code cam_reverse_off_[]	= {0xa0,0x0d,0x00,0x00,0xff};
/*unsigned char code cam_freeze_on_[]		= {0xa0,0x01,0x04,0x62,0x00,0xff};
unsigned char code cam_freeze_off_[]	= {0xa0,0x01,0x04,0x62,0x00,0xff};*/
/*unsigned char code cam_picture_off_[]	= {0xa0,0x28,0x00,0x00,0xff};
unsigned char code cam_picture_bw_[]	= {0xa0,0x28,0x01,0x00,0xff};
unsigned char code cam_display_on_[]	= {0xa0,0x01,0x04,0x15,0x00,0xff};
unsigned char code cam_display_off_[]	= {0xa0,0x01,0x04,0x15,0x00,0xff};*/
unsigned char code cam_inq_zoom_pos_[]	= {0x80,0x02,0x09,0x00,0xff};
unsigned char code cam_inq_focus_pos_[] = {0x80,0x03,0x09,0x00,0xff};
//unsigned char code cam_inq_gain_pos_[] = {0x80,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_ae_manu();
	delay_xms(30);
	cam_send_command(cam_iris_up_);
}

extern void cam_iris_close()		
{
	cam_ae_manu();
	delay_xms(30);
	cam_send_command(cam_iris_down_);
}
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_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_get_id(void)
{
	cam_id = 1;
}

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_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_off(void)
{
	cam_send_command(cam_icrshot_off_);
}
extern void cam_icrshot_auto(void)
{
	//cam_send_command(cam_icrshot_off_);
}
extern void cam_reset2()            {}

extern void cam_icrshot_on()		
{
	cam_send_command(cam_icrshot_on_);
}
extern void cam_inq_zoom_pos()		
{
	register unsigned char j = 50;
	register unsigned char i= 0;
	do
	{
		cam_send_command(cam_inq_zoom_pos_);
	}while((j--) && (cam_receive_byte() != 0xc0));
	if (j != 0)
	{
		for (i=40;i<47;i++) 
			seq[i] = cam_receive_byte();
	}
}
extern void cam_inq_focus_pos()	
{
	register unsigned char j = 30;
	register unsigned char i= 0;
	do
	{
		cam_send_command(cam_inq_focus_pos_);
	}while((j--) && (cam_receive_byte() != 0xc0));
	for (i=40;i<47;i++) 
		seq[i] = cam_receive_byte();
}
extern void cam_icr_set(void)
{/*unsigned char cr[8];
	cam_focus_manu();									
	delay_xms(500);

	cr[0] = 0xa0;
	cr[1] = 0x03;
	cr[2] = 0x09;
	cr[3] = pre[8];
	cr[4] = pre[9];
	cr[5] = pre[10];
	cr[6] = 0x00;
	cr[7] = 0xff;
	cam_send_command(cr);
	delay_xms(500);*/}
extern void set_level_limit(void)
{
	
}
extern void cam_zoom_focus_direct(void)
{
	unsigned char cr[8];
	cr[0] = 0xa0;
	cr[1] = 0x02;
	cr[2] = 0x09;
	cr[3] = pre[5] & 0x0f;
	cr[4] = pre[6] & 0x0f;
	cr[5] = pre[7] & 0x0f;
	cr[6] = 0x00;
	cr[7] = 0xff;
	cam_send_command(cr);
	delay_xms(30);

	cam_focus_manu();									
	delay_xms(50);

	cr[0] = 0xa0;
	cr[1] = 0x03;
	cr[2] = 0x09;
	cr[3] = pre[8] & 0x0f;
	cr[4] = pre[9] & 0x0f;
	cr[5] = pre[10] & 0x0f;
	cr[6] = 0x00;
	cr[7] = 0xff;
	cam_send_command(cr);
	delay_xms(50);
}
extern void cam_set_preset(void)
{	cam_inq_zoom_pos();									// read zoom position
	//cam_inquiry_state();
	pre[5] = seq[42];
	pre[6] = seq[43];
	pre[7] = seq[44];
	
	delay_xms(50);
	
	cam_inq_focus_pos();                               // read focus position
	//cam_inquiry_state();
	pre[8] = seq[42];
  	pre[9] = seq[43];
	pre[10] = seq[44];

}

extern void cam_re_reset()
{
}
extern void cam_menu_on()
{}
extern void cam_menu_off()
{}

⌨️ 快捷键说明

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