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

📄 protocol.c

📁 这是监视器行业常见的键盘与球机通讯协议的C语言源代码
💻 C
字号:

#include "config.h"




void (code *rr)(unsigned char rc);

unsigned char data data1,data3,data5,data6,data7,data8,data9,datax;

unsigned char bdata data2;
sbit ext_fg = data2^0;
bit reset_fg = 0;
bit ptn_stop_fg;

unsigned char bdata data3;
sbit sense_fg1       = data3^7;
sbit swing_fg1       = data3^4;
//sbit power_fg       = data3^3;
sbit iris_close_fg1 	= data3^2;
sbit iris_open_fg1 	= data3^1;
sbit focus_near_fg1 	= data3^0;

unsigned char bdata data4;
sbit focus_far_fg1 = data4^7;
sbit zoom_wide_fg1 = data4^6;
sbit zoom_tele_fg1 = data4^5;
sbit down_fg      = data4^4;
sbit up_fg        = data4^3;
sbit left_fg      = data4^2;
sbit right_fg     = data4^1;
sbit ext_fg2      = data4^0;

bit power_fg = 1;
bit ti_fg = 0;

extern void init_alarm(void)
{
	TH2 = 0xff; RCAP2H = 0xff;
	TL2 = 0x7e; RCAP2L = 0x7e;
	rr = alarm_word1;
	PCON = 0x00;SCON = 0x50; 
	T2CON = 0x34;	
}     

extern void init_serial(void)
{
	unsigned char tmp;

	tmp = 0;
	PRO_HI = 1;
	_nop_();
	_nop_();
	_nop_();
	if (PRO_HI)
		tmp = 0;
	else
		tmp = 2;

	PRO_LO = 1;
	_nop_();
	_nop_();
	_nop_();
	if (!PRO_LO) tmp ++;
	test_fg = 0;

	switch (tmp)
	{
	case 0: //P24	 	
		TH2 = 0xfd; RCAP2H = 0xfd;
		TL2 = 0xf7; RCAP2L = 0xf7;
		rr = p24_word1;
		rs = p24_word1;
		break;
	case 1: //P48
		TH2 = 0xfe; RCAP2H = 0xfe;
		TL2 = 0xfc; RCAP2L = 0xfc;
		rr = p96_word1;
		rs = p96_word1;
		break;
	case 2: //P96	
		TH2 = 0xff; RCAP2H = 0xff;
		TL2 = 0x7e; RCAP2L = 0x7e;
		rr = p96_word1;
		rs = p96_word1;
		break;
	default: //test
		#ifndef EYEVIEW_D
			test_fg = 1;
		#else
			TH2 = 0xff; RCAP2H = 0xff;
			TL2 = 0x7e; RCAP2L = 0x7e;
			rr = b01_word1;
			rs = b01_word1;
		#endif
		break;
	}
	PCON = 0x00;SCON = 0x50; 
	T2CON = 0x34;	
}

void serial_int(void) interrupt 4 using 1
{
	ES = 0;
	SIGNAL = 1;
	
	if (_testbit_(RI)) (*rr)(SBUF);
	//SIGNAL = 0;
	if (_testbit_(TI))
	{
		ti_fg = 1;
		SIGNAL = 1;
	}
	ES = 1;
}

extern bit do_set_addon(unsigned char no)
{
//#ifndef DIS660
	switch (no)
	{
	case F_SCAN_START:   		
	case F_SCAN_END:   
		no = no;
		return 0;
	
	case F_SEQ2_SET:
	case F_SEQ_SET:
		run_seq_fg = 0;
		run_seq2_fg = 0;
		return 1;
		
#ifndef DIS660
	case F_CAM_RESET:			//camera reset
		addon_fg = 1;
		seq[10] = A_RESET;
		seq[11] = ON;
		return 1;
	case F_BLC_OFF:			
		addon_fg = 1;   
		seq[10] = A_BLC;
		seq[11] = OFF;
		return 1;
	case F_ZERO_OFF:			
		addon_fg = 1;
		seq[10] = A_ZERO;
		seq[11] = OFF;
		return 1;
	case F_MENU_OFF:			
		disp_off_fg = 1;
		return 1;
	case F_DIGI_OFF:
		addon_fg = 1;		
	 	seq[10] = A_DIGI;
	 	seq[11] = OFF;
	 	return 1;
	 case F_FOCU_MANU:
	 	addon_fg = 1;
	  	seq[10] = A_FOCU;		
	  	seq[11] = MANU;
	  	return 1;
	  case F_IRIS_MANU:		
	  	addon_fg = 1;
	  	seq[10] = A_IRIS;
	  	seq[11] = MANU;
	  	return 1;
	  case F_WB_MANU:			
	  	addon_fg = 1;
	  	seq[10] = A_WB;
	  	seq[11] = MANU;
	  	return 1;
	  case F_BLACK:			
	  	addon_fg = 1;
	  	seq[10] = A_BLACK;
	  	seq[11] = OFF;
	  	return 1;
	  case F_FREEZE_OFF:			
	  	addon_fg = 1;
	  	seq[10] = A_FRZE;
	  	seq[11] = OFF;
	  	return 1;
	  case F_MIRRO_OFF:			
	  	addon_fg = 1;
	  	seq[10] = A_MIRR;
	  	seq[11] = OFF;
	  	return 1;
	  case F_RESET2:
		addon_fg = 1;
		seq[10] = A_RESET2;
		return 1;
	  case F_ICR:
		addon_fg = 1;
		seq[10] = A_ICR;
		seq[11] = MANU;
		return 1;
	#ifdef EYEVIEW_D
	  case F_MENU:
		addon_fg = 1;
		seq[10] = A_MENU;
		seq[11] = OFF;
		return 1;
	#endif
#endif
	  default:
		no = no;
		return 0;
	}
}

extern bit do_call_addon(unsigned char no)
{
//#ifndef DIS660
switch (no)
	{
	case 0x22:
		seq[15] = 1;
		call_pre_fg = 1;
		return 1;
	case 0x62:
	case 0x61:
	case 0x63:
		run_seq_fg = 0;
		run_swing_fg = 0;
		run_swing2_fg = 1;
		return 1;
	case 0x60:
		run_seq_fg = 0;
		run_swing_fg = 0;
		run_swing2_fg = 0;
		return 1;
	case 0x5d:
		seq[15]  = 51;
		set_pre_fg = 1;
		return 1;
	case 0x5e:
		seq[15]  = 52;
		set_pre_fg = 1;
		return 1;
	case 0x64:
		reset_fg = 1;
		return 1;
	case F_SCAN_RUN:
	    run_swing_fg = 1;
		seq[17] = F_SCAN_START;			//start point
		seq[18] = F_SCAN_END;			//end point
		return 1;
	case F_SCAN_STOP:
		run_swing_fg = 0;
		run_swing2_fg = 0;
		return 1;
	case F_SEQ_RUN:
	    run_seq_fg = 1;	
		run_seq2_fg = 1; 	
		return 1;
	case F_SEQ2_RUN:
		run_seq2_fg = 1;
		return 1;
#ifndef DIS660
	case F_CAM_POWER:
		power_fg = !power_fg;
		power_on_fg = power_fg;
		power_off_fg = !power_fg;
	    return 1;
	case F_BLC_ON:			
		addon_fg = 1;
		seq[10] = A_BLC;
		seq[11] = ON;
		return 1;
	case F_ZERO_ON:			
		addon_fg = 1;
		seq[10] = A_ZERO;
		seq[11] = ON;
		return 1;
	case F_MENU_ON:			
		disp_on_fg = 1;
		return 1;
	case F_DIGI_ON:			
		addon_fg = 1;
	 	seq[10] = A_DIGI;
	 	seq[11] = ON;
	 	return 1;
	 case F_FOCU_AUTO:
	    addon_fg = 1;
	  	seq[10] = A_FOCU;		
	  	seq[11] = AUTO;
	  	return 1;
	  case F_IRIS_AUTO:			
	  	addon_fg = 1;
	  	seq[10] = A_IRIS;
	  	seq[11] = AUTO;
	  	return 1;
	  case F_WB_AUTO:			
	  	addon_fg = 1;
	  	seq[10] = A_WB;
	  	seq[11] = AUTO;
	  	return 1;
	  case F_COLOR:			
	  	addon_fg = 1;
	  	seq[10] = A_BLACK;
	  	seq[11] = ON;
	  	return 1;
	  case F_FREEZE_ON:			
	  	addon_fg = 1;
	  	seq[10] = A_FRZE;
	  	seq[11] = ON;
	  	return 1;
	  case F_MIRRO_ON:			
	  	addon_fg = 1;
	  	seq[10] = A_MIRR;
	  	seq[11] = ON;
	  	return 1;
	  case F_RESET2:
		addon_fg = 1;
		seq[10] = A_RE;
		seq[11] = 0;
		return 1;
	  case F_ICR:
		addon_fg = 1;
		seq[10] = A_ICR;
		seq[11] = AUTO;
		return 1;
	#ifdef EYEVIEW_D
	  case F_MENU:
		addon_fg = 1;
		seq[10] = A_MENU;
		seq[11] = ON;
		return 1;
	#endif
#endif
	default:
		no = no;
		return 0;
	}
//#else
//    no = no;
//	return 0;
//#endif
}

extern void init_watchdog(void)
{
	#ifdef SYNCMOS
		WDTC = 0x87;
	#else
		#ifdef STC89C54RD
			WDTC = 0x06;
		#else
			WDTC = 0x86;
		#endif
	#endif
}
extern void reset_wdog(void)
{
#ifdef SYNCMOS	
	WDTC |= 0x40;
#else
	#ifdef STC89C54RD
		WDTC |= 0x10;
	#else
		WDTC |= 0x40;
	#endif
#endif
	_nop_();
}

⌨️ 快捷键说明

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