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

📄 p_apple.c

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

/*

history;
	V 1.00 build 2003.06.04 by xsh


*/

#include <REG54.H>
#include <INTRINS.H>
#include "protocol.h"
#include "kernel.h"
#include "config.h"

unsigned char data rr = 0;
unsigned char data recv_code;

//unsigned char data datad0;
//unsigned char data data23;
//unsigned char data data00;
//unsigned char data data1,data2,data3;
unsigned char data data4,data5,data6;
//unsigned char bdata word5;
//sbit ext_fg = word5^0;

//unsigned char data pp = 0; // for seq point
bit start_set_fg = 0;
bit power_fg = 1;
//bit manu_fg = 0;
//bit need_stop_fg = 0;
/* 返回值为1则不当做预置点功能,返回值为0则是预置点功能 */
/* 用设置预置点的方法来实现附加功能*/
extern bit do_set_addon(unsigned char no)
{
	switch (no)
	{
	case F_SCAN_START:   
	case F_SCAN_END:   
	case F_SEQ_SET:
		no = no;
		return 0;
	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:			//diaplay off
		disp_off_fg = 1;
		return 1;
	case F_DIGI_OFF:
		addon_fg = 1;		//camera digital off
	 	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;
	  default:
		no = no;
		return 0;
	}

}

/* 用调用预置点的方法来实现附加功能*/
extern bit do_call_addon(unsigned char no)
{
	switch (no)
	{
	case F_SCAN_RUN://51
	    run_swing_fg = 1;
		seq[17] = F_SCAN_START;			//start point
		seq[18] = F_SCAN_END;			//end point
		return 1;
	case F_SCAN_STOP://52
		run_swing_fg = 0;
		return 1;
	case F_SEQ_RUN://53
	    run_seq2_fg = 1;		//运行轨迹标志,调用第一至第十六个预置点
		return 1;
	case F_CAM_POWER://54
		power_fg = !power_fg;
		power_on_fg = power_fg;
		power_off_fg = !power_fg;
	    return 1;
	case F_BLC_ON:	//55		//背光补偿开
		addon_fg = 1;
		seq[10] = A_BLC;
		seq[11] = ON;
		return 1;
	case F_ZERO_ON:		//56	//低照度开
		addon_fg = 1;
		seq[10] = A_ZERO;
		seq[11] = ON;
		return 1;
	case F_MENU_ON:	//57		//屏显开
		disp_on_fg = 1;
		return 1;
	case F_DIGI_ON:	//58		//数字变倍开
		addon_fg = 1;
	 	seq[10] = A_DIGI;
	 	seq[11] = ON;
	 	return 1;
	 case F_FOCU_AUTO://59
	    addon_fg = 1;
	  	seq[10] = A_FOCU;		//聚焦自动
	  	seq[11] = AUTO;
	  	return 1;
	  case F_IRIS_AUTO://60			// 光圈自动
	  	addon_fg = 1;
	  	seq[10] = A_IRIS;
	  	seq[11] = AUTO;
	  	return 1;
	  case F_WB_AUTO://61			// 白平衡自动
	  	addon_fg = 1;
	  	seq[10] = A_WB;
	  	seq[11] = AUTO;
	  	return 1;
	  case F_COLOR:	//64		//黑白模式
	  	addon_fg = 1;
	  	seq[10] = A_BLACK;
	  	seq[11] = ON;
	  	return 1;
	  case F_FREEZE_ON:	//62		//图象冻结
	  	addon_fg = 1;
	  	seq[10] = A_FRZE;
	  	seq[11] = ON;
	  	return 1;
	  case F_MIRRO_ON:	//63		//镜像开
	  	addon_fg = 1;
	  	seq[10] = A_MIRR;
	  	seq[11] = ON;
	  	return 1;
	default:
		no = no;
		return 0;
	}

}

unsigned char data id_hi,id_lo,h5,h6,h7,l3,l4,l5;
extern void init_serial(void)
{	
	id_hi = id / 10;
	id_lo = id % 10;
	
	h5 = id_hi*5 + 1;
	h6 = id_hi*6 + 1;
	h7 = id_hi*7 + 1;

	l3 = id_lo + 3;
	l4 = id_lo + 4;
	l5 = id_lo + 5;
	
	PCON = 0x00;SCON = 0x50;
	TH2 = 0xff; RCAP2H = 0xff;
#ifdef FOCS_40M
	TL2 = 0x7d; RCAP2L = 0x7d;
#else // for 22.1184
	TL2 = 0xb8; RCAP2L = 0xb8;
#endif
	T2CON = 0x34;
}

void serial_int(void) interrupt 4 using 1
{ 
	
	ES = 0;
	
	if(_testbit_(RI)) 
	{
		
		recv_code = SBUF;
		rr++;
		
		switch(rr)
		{
			case 1:
				//datad0 = recv_code;
				//if(datad0 != 0xd0) rr = 0;
				if (recv_code != 0xd0) rr = 0;
				break;
			case 2:
				//data23 = recv_code;
				//if(data23 != 0x23) rr = 0;
				if (recv_code != 0x23) rr = 0;
				break;
			case 3:
				//data00 = recv_code;
			/*	if(data00 == 0xd1)
				{	
					if(manu_fg == 0)
					{
					
					}
					else
					{
						rr = 0;
						manu_fg = 0;
						seq[12] = 0;
						seq[13] = 0;
						seq[14] = 0;
						cont_fg = 1;
						zoom_stop_fg = 1;
						focu_stop_fg = 1; 
					}
				}*/
				//if(data00 != 0x00) rr = 0;
				if (recv_code != 0x00) rr = 0;
				break;
			case 4:
				//data1 = recv_code;
				//if((data1 != h5) && (data1 != h6) && (data1 != h7)) rr = 0;
				if((recv_code != h5) && (recv_code != h6) && (recv_code != h7)) rr = 0;
				break;
			case 5: 
				//data2 = recv_code;
				//data2 = recv_code / 16;
				//if((data2 != l3) && (data2 != l4) && (data2 != l5)) rr = 0;
				recv_code >>= 4;
				if((recv_code != l3) && (recv_code != l4) && (recv_code != l5)) rr = 0;
				//break;
			case 6:
				//data3 = recv_code;
				break;
			case 7:
				//data4 = recv_code;
				//if(data4)
				if (recv_code)
				{
					data4 = recv_code;
					switch(data4)
					{
							
					/*	case 1: //left
						case 2: //right
						case 3:	//down
						case 4: //up
						case 5: //left_down
						case 6: //left_up
						case 7: //right_down
						case 8: //right_up
							cont_fg = 1;
							seq[12] = data4; //dir
							run_seq_fg = 0;
							run_swing_fg = 0;
							break; */
						case 9://far
							focu_far_fg = 1;
							focus_need_stop = 1;
//							manu_fg = 1;
							rr = 0;
							break;
						case 10://near
							focu_near_fg = 1;
							focus_need_stop = 1;
//							manu_fg = 1;
							rr = 0;
							break;
						case 11://close
							iris_close_fg = 1;
							rr = 0;
							break;
						case 12://open
							iris_open_fg = 1;
							rr = 0;
							break;
						case 13://tele
							zoom_tele_fg = 1;
							zoom_need_stop = 1;
//							manu_fg = 1;
							//need_stop_fg = 1;
							rr = 0;
							break;
						case 14://wide
							zoom_wide_fg = 1;
							zoom_need_stop = 1;
//							manu_fg = 1;
							//need_stop_fg = 1;
							rr = 0;
							break;
					/*	case 55:
							set_pre_fg = 1;
						case 57:
							call_pre_fg = 1;*/
						//default:
						/*	if(_testbit_(zoom_need_stop)) zoom_stop_fg = 1;
							if(_testbit_(focus_need_stop)) focu_stop_fg = 1;
							seq[12] = 0;
							cont_fg = 1;*/
						//	break;
					}//end switch
				}//end if
				else		//(data4 == 0 conditon)
				{	//if(data3 == 0)
					//{
						if(_testbit_(zoom_need_stop)) zoom_stop_fg = 1;
						if(_testbit_(focus_need_stop)) focu_stop_fg = 1;
						seq[12] = 0;
						cont_fg = 1;
						rr = 0;
					//}
				}
				break;
			case 8:
				data5 = recv_code;
				switch(data4)
				{	
					case 1://left
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 4;
						seq[13] = data5 >> 1;
						seq[14] = 0x00;
						break;
					case 2://right
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 2;
						seq[13] = data5 >> 1;    //x_sp
						seq[14] = 0x00;       //y_sp
						break; 
					case 3://down
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 16;
						seq[13] = 0x00;
						seq[14] = data5 >> 1;
						break;
					case 4://up
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 8;
						seq[13] = 0x00;
						seq[14] = data5 >> 1; //y_sp
						break;
					case 0x37:
						set_pre_fg = 1;
						seq[15] = data5; //pre_no
						rr = 0;
						break;
					case 0x39:
						call_pre_fg = 1;
						seq[15] = data5;
						rr = 0;
						break;
					default:
						break;
				}
				break;
			case 9:
				data6 = recv_code;
				switch(data4)		
				{
					case 5://down_left
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 18; //dir
						seq[13] = data5 >> 1; // x_sp
						seq[14] = data6 >> 1; // y_sp
						break;
					case 6://up_left
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 12; //dir
						seq[13] = data5 >> 1; // x_sp
						seq[14] = data6 >> 1; // y_sp
						break;
					case 7://down_right
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 20; //dir
						seq[13] = data5 >> 1; // x_sp
						seq[14] = data6 >> 1; // y_sp
						break;
					case 8://up_rignt
						cont_fg = 1;
//						manu_fg = 1;
						//need_stop_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						seq[12] = 10; //dir
						seq[13] = data5 >> 1; // x_sp
						seq[14] = data6 >> 1; // y_sp
						break;
					default:
						break;
				}
					break;
			default:
				rr = 0;
				break;
		}//end switch(rr)
	}//end if(_testbit_(RI))
	ES = 1;
}

⌨️ 快捷键说明

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