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

📄 p_two.c

📁 这是监视器行业常见的键盘与球机通讯协议的C语言源代码
💻 C
字号:
//#include <REG54.H>

#include <SST89x5x4.H>
#include <INTRINS.H>
#include "protocol.h"
#include "kernel.h"
#include "config.h"
unsigned char data1,data3,data4,datax,data5,data6;
unsigned char bdata data2;
sbit ext_fg = data2^0;
bit manu_need_stop = 0;

void (code *rr)(unsigned char rc);
void word1(unsigned char rc);
void word2(unsigned char rc);
void word3(unsigned char rc);
void word4(unsigned char rc);
void word5(unsigned char rc);
void word6(unsigned char rc);
void word7(unsigned char rc);
void word8(unsigned char rc);

// for b01
void word9(unsigned char rc);
void word10(unsigned char rc);
void word11(unsigned char rc);
void word12(unsigned char rc);
void word13(unsigned char rc);
void word14(unsigned char rc);
void word15(unsigned char rc);
void word16(unsigned char rc);
void word17(unsigned char rc);

void word1(unsigned char rc) using 1
{
	if (rc == 0xa0)
	{
		datax = rc;
		rr = word2;
	}
}

void word2(unsigned char rc) using 1
{
	if (rc != (id - 1)) 
		rr = word1;
	else if (rc == id)
	{
		rr = word9;
		datax = rc;
	}
	else
	{
		rr = word3;
		datax = datax^rc;
	}
}

void word3(unsigned char rc) using 1
{
	data1 = rc;
	datax = datax^data1;
	rr = word4;
}

void word4(unsigned char rc) using 1
{
	data2 = rc;
	datax = datax^data2;
	rr = word5;
}

void word5(unsigned char rc) using 1
{
	data3 = rc;
	datax = datax^data3;
	rr = word6;
}

void word6(unsigned char rc) using 1
{
	data4 = rc;
	datax = datax^data4;
	rr = word7;
}

void word7(unsigned char rc) using 1
{
	if (rc != 0xaf) 
		rr = word1;
	else
	{
		datax = datax^0xaf;
		rr = word8;
	}
}

void word8(unsigned char rc) using 1
{
	rr = word1;
	if (rc == datax)
	{
		if(ext_fg)
		{	
			switch(data2)
			{
			case 0x03:	
				set_pre_fg=1;
				run_swing_fg=0;
				run_seq2_fg=0;
				seq[15]=data4;
				break;
			case 0x07:
				call_pre_fg=1;
				run_swing_fg=0;
				run_seq2_fg=0;
				seq[15]=data4;
				break;
			}															
		}
		else		
		{
			//if (data1)
			{
				switch(data1 & 0x03)
				{
					case 0:
						if (_testbit_(focus_need_stop))
							focu_stop_fg = 1;
						break;
					case 1:		//focu far
						focu_far_fg = 1;
						focus_need_stop = 1;
						break;
					case 2:		//focu near
						focu_near_fg = 1;
						focus_need_stop = 1;
						break;
					default:
						break;
				}

				switch (data1 & 0xc0)
				{
					case 0:
						break;
					case 4: 	//iris open
						iris_open_fg = 1;
						break;
					case 8:		//iris close
						iris_close_fg = 1;
						break;
					default:
						break;						
				}						
			}
			//else
			{
				switch(data2 & 0x1e)
				{
					case 2:		//pan turn right
					case 4:		//pan turn left
					case 8:		//tilt up
					case 0x10:	//tilt down
					case 0x0a:	//tilt up and pan turn right
					case 0x0c:	//tilt up and pan left
					case 0x12:	//tilt down and pan right
					case 0x14:	//tilt down and pan left
						cont_fg = 1;
						run_seq2_fg = 0;
						run_swing_fg = 0;
						run_seq_fg = 0;
						seq[12] = data2;
						seq[13] = data3;									
						seq[14] = data4;
						break;
					case 0:
						
					default:
						//seq[12] = 0;				
						//cont_fg = 1;	
						//break;
						if (_testbit_(manu_need_stop))
								{
								seq[12] = 0;
								cont_fg = 1;
								}
						break;
				}
				switch (data2 & 0x60)
				{
					case 0x20:	//zoom tele
						zoom_tele_fg = 1;
						zoom_need_stop = 1;
						break;
					case 0x40:	//zoo wide
						zoom_wide_fg = 1;
						zoom_need_stop = 1;
						break;							
					case 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;	
						break;
					default:
						break;														
				}
			}					
		}
	}
}

void word9(unsigned char rc) using 1
{
	datax += rc;  // send id
	rr = word10;
}

void word10(unsigned char rc) using 1
{
	datax += rc; // data1
	data1 = rc;
	rr = word11;
}

void word11(unsigned char rc) using 1
{
	datax += rc; // data2
	data2 = rc;
	rr = word12;
}

void word12(unsigned char rc) using 1
{
	datax += rc; // data3
	data3 = rc;
	rr = word13;
}

void word13(unsigned char rc) using 1
{
	datax += rc; // data4
	data4 = rc;
	rr = word14;
}

void word14(unsigned char rc) using 1
{
	datax += rc; // data5
	data5 = rc;
	rr = word15;
}

void word15(unsigned char rc) using 1
{
	datax += rc; // data6
	data6 = rc;
	rr = word16;
}

void word16(unsigned char rc) using 1
{
	if (rc != 0xaf)
		rr = word1;
	else
	{
	 	rr = word17;
		datax = ~datax;
	}
}

void word17(unsigned char rc) using 1
{
	rr = word1;

	if (rc != datax) return;

	if (ext_fg)
	{
		if (data1)
		{
			addon_fg = 1;
			seq[10] = data3;
			seq[11] = data4;
		}
		else
		{
			run_swing_fg = 0;
			run_seq_fg = 0;
			switch (data2)
			{
				case 03:
					set_pre_fg = 1;							
					seq[15] = data3+1;		  //preset_no
					break;
				case 07:
					call_pre_fg = 1;
					seq[15] = data3+1;
					break;
				case 0x11:
					run_swing_fg = 1;
					seq[17] = data4+1;		 //first_no
					seq[18] = data5+1;  		 // second no
					break;
				
				case 0x1f:
					run_swing_fg = 0;
					break;
				case 0x43:
					if (data3)
						disp_on_fg = 1;
					else
						disp_off_fg = 1;
					break;
				case 0x6f:
					if (data3)
						power_on_fg = 1;
					else
						power_off_fg = 1;
					break;
				}
			}
		}
		else
		{
		//	if (word4)
			{
				switch (data1 & 0x1b)
				{	
				case 1:
					focu_far_fg = 1;
					focus_need_stop = 1;
					break;
				case 2:
					focu_near_fg = 1;
					focus_need_stop = 1;
					break;
				case 8:
					iris_close_fg = 1;
					break;
				case 16:
					iris_open_fg = 1;
					break;
				default:
					if (_testbit_(focus_need_stop))
						focu_stop_fg = 1;
					break;						
				}
			}
			//else
			{
				switch (data2 & 0x1e)
				{
				case 2:
				case 4:
							case 8:
							case 16:
							case 10:
							case 18:
							case 12:
							case 20:
								cont_fg = 1;
								run_swing_fg = 0;
								run_seq_fg = 0;
								seq[12] = data2;	//dir
								seq[13] = data3;	//x_speed
								seq[14] = data4;	//y_speed
								manu_need_stop = 1;
								break;
							default:
								if (_testbit_(manu_need_stop))
								{
								seq[12] = 0;
								cont_fg = 1;
								}
								break;
					}
					switch (data2 & 0x60)
					{
							case 0x20:
								zoom_tele_fg = 1;
								zoom_need_stop = 1;
								break;
							case 0x40:
								zoom_wide_fg = 1;
								zoom_need_stop = 1;
								break;
							case 0:
							    if (_testbit_(zoom_need_stop)) zoom_stop_fg = 1;
								break;
							default:
								
								//if (_testbit_(focus_need_stop)) focu_stop_fg = 1;
                                //b01_speed_fg = 1;
                               // seq[12] = 0;
								//cont_fg = 1;
								break;
							}
						}
					}
}



extern void init_serial(void)
{
	PCON = 0x00;SCON = 0x50;  
	TH2 = 0xff; RCAP2H = 0xff;
#ifdef FOCS_40M
	TL2 = 0x7e; RCAP2L = 0x7e;
#else
	TL2 = 0xb8; RCAP2L = 0xb8;
#endif
	T2CON = 0x34;

	rr = word1;
}

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

bit power_fg = 1;
extern bit do_set_addon(unsigned char no)
{
	switch (no)
	{
	case F_SCAN_START:   		
	case F_SCAN_END:   
		no = no;
		return 0;
	case F_SEQ_SET:
		run_seq_fg = 0;
		run_seq2_fg = 0;
		return 1;
	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;
	  default:
		no = no;
		return 0;
	}
}

extern bit do_call_addon(unsigned char no)
{
switch (no)
	{
	case 0x60:
	case 0x61:
	case 0x63:
		run_seq_fg = 0;
		run_swing_fg = 0;
		run_swing2_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_seq2_fg = 1;		
		return 1;
	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;
	default:
		no = no;
		return 0;
	}
//#else
//    no = no;
//	return 0;
//#endif
}

⌨️ 快捷键说明

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