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

📄 p_star_2.c

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

/*

history;
  V 1.00 build 2003.05.24 by zh
  V 2.00 build 2003.06.21 by zh
  V 2.01 build 2003.06.27 by zh

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

//unsigned char data data4,data5,data6,data7,data8,data9,datax;
unsigned char data pp = 0; // for seq point
bit start_set_fg = 0;

//void (code * rr)(unsigned char rc);
void (code *ext)(unsigned char rc);
void b01_word1(unsigned char rc);
void b01_word2(unsigned char rc);
void b01_word3(unsigned char rc);
void b01_word4(unsigned char rc);
void b01_word5(unsigned char rc);
void b01_word6(unsigned char rc);
void b01_word7(unsigned char rc);
void b01_word8(unsigned char rc);
void b01_word9(unsigned char rc);
void b01_word10(unsigned char rc);
void b01_word11(unsigned char rc);
void b01_word11x(unsigned char rc);
void b01_word12(unsigned char rc);
void b01_word12x(unsigned char rc);
void b01_word1s(unsigned char rc);

void b01_word1(unsigned char rc) using 1
{
	if (rc == 0xa0) rr = b01_word2;
	if (rc == 0xfa)
	{ 
		rr = alarm_word2;
		rs = b01_word1;
	}
}

void b01_word2(unsigned char rc) using 1
{
	if (rc != id ) 
		rr = b01_word1;
	else
	{
		rr = b01_word3;
		datax = rc;
	}
}

void b01_word3(unsigned char rc) using 1
{
	datax += rc;
	rr = b01_word4;
}

void b01_word4(unsigned char rc) using 1
{
	data4 = rc;
	datax += rc;
	rr = b01_word5;
}

void b01_word5(unsigned char rc) using 1
{
	data5 = rc;
	datax += rc;
	if ((data5 & 0x01) == 0x01)
	{
		if (data5 == 0x23)
		    ext = b01_word1s;
		else if (data4)
			ext = b01_word12x;
		else
		    ext = b01_word11x;
	}
	else
	{
		if (data4)
			ext = b01_word12;
		else
			ext = b01_word11;
	}
	rr = b01_word6;
}

void b01_word6(unsigned char rc) using 1
{
	data6 = rc;
	datax += rc;
	rr = b01_word7;
}

void b01_word7(unsigned char rc) using 1
{
	data7 = rc;
	datax += rc;
	rr = b01_word8;
}

void b01_word8(unsigned char rc) using 1
{
	data8 = rc;
	datax += rc;
	rr = b01_word9;
}

void b01_word9(unsigned char rc) using 1
{
	data9 = rc;
	datax += rc;
	rr = b01_word10;
}

void b01_word10(unsigned char rc) using 1
{
	if (rc != 0xaf) 
		rr = b01_word1;
	else
	{
		datax = ~datax;
		rr = ext;//word11;
	}
}

void b01_word11(unsigned char rc) using 1
{
	rr = b01_word1;

	if (rc == datax)
 	{
		{
			switch (data5)
			{
				case 2:
				case 4:
				case 8:
				case 16:
				case 10:
				case 18:
				case 12:
				case 20:
					cont_fg = 1;
					run_swing_fg = 0;
					run_swing2_fg = 0;
					run_seq_fg = 0;
					seq[12] = data5;	//dir
					seq[13] = data6;	//x_speed
					seq[14] = data7;	//y_speed
					break;
				case 0x20:
					//len_fg = 1;
					zoom_tele_fg = 1;
					zoom_need_stop = 1;
					break;
				case 0x40:
					//len_fg = 1;
					zoom_wide_fg = 1;
					zoom_need_stop = 1;
					break;
				default:
					if (_testbit_(zoom_need_stop)) 	{zoom_stop_fg = 1;}//len_fg = 1;
					if (_testbit_(focus_need_stop)) {focu_stop_fg = 1;}//len_fg = 1;
					seq[12] = 0;
					cont_fg = 1;
					break;
			}
		}
		SIGNAL = 0;
	}
}

void b01_word12(unsigned char rc) using 1
{
	rr = b01_word1;

	if (rc == datax)
	{
		//if (data4)
		{
			switch (data4)
			{	
				case 1:
					focu_far_fg = 1;
					//len_fg = 1;
					focus_need_stop = 1;
					break;
				case 2:
					focu_near_fg = 1;
					//len_fg = 1;
					focus_need_stop = 1;
					break;
				case 8:
					//len_fg = 1;
					iris_close_fg = 1;
					break;
				case 16:
					//len_fg = 1;
					iris_open_fg = 1;
					break;						
			}
		}
		SIGNAL = 0;
	}
}

// for ext command
void b01_word11x(unsigned char rc) using 1
{
	rr = b01_word1;

	if (rc == datax)
	{
		{
			run_swing_fg = 0;
			run_swing2_fg = 0;
			run_seq_fg = 0;
			switch (data5)
			{
				case 03:
						set_pre_fg = 1;							
						seq[15] = data6+1;		  //preset_no
					break;
				case 0x05:
					del_pre_fg = 1;
					seq[15] = data6 + 1;
					break;
				case 07:
					call_pre_fg = 1;
					seq[15] = data6+1;
					break;
				case 0x11:
					if (data7 != 0x33)
					{
						run_swing_fg = 1;
						seq[17] = data7+1;		 //first_no
						seq[18] = data8+1;  		 // second no
					}
					else
						run_swing2_fg = 1;	
					break;
				case 0x19:
					if (data7 == 0x01)
					{
						set_pre_fg = 1;
						seq[15] = F_SCAN_START;					
						seq[17] = F_SCAN_START;			//start point
					}
					if (data8 == 0x02)
					{
						set_pre_fg = 1;
						seq[15] = F_SCAN_END;
						seq[18] = F_SCAN_END;			//end point
					}
					if (data6 == 0x33)
					{
						run_swing2_fg = 1;
					}
					if(data6 == 0xff)
					{
						run_swing2_fg = 0;
					}
					break;
				case 0x1b:
					run_swing2_fg = 1;
					break;
				case 0x1f:	
					run_swing_fg = 0;
					run_swing2_fg = 0;
					break;
				case 0x21:
					run_seq3_fg = 1;
					seq[48] = data6+1;	   //seq_no
					break;
				case 0x23:	
					if (data7 == 0x80)
					{
						seq[48] = data6+1;
						start_set_fg = 1;
						pp = 0;
					}
					else if (data7 == 0x40)
					{
						set_seq_fg = 1;
						if (pp != 48) seq[pp] = 0;
						pp = 0;
					}
					else
					{
						if (_testbit_(start_set_fg)) pp = 0;
						seq[pp] = data7+1;                                
						pp++;
						seq[pp] = data8;
						pp++;
						seq[pp] = data9;
						pp++;
					}
					break;
					/*
				case 0x23:
					switch (data7)
					{
						case 0x80:
							seq[48] = data6+1;
							pp = 0;
							break;
						case 0x40:
							set_seq_fg = 1;
							if (pp != 48) seq[pp] = 0;
							pp = 0;
							break;
						default:
							seq[pp] = data7+1;                                
							pp++;
							seq[pp] = data8;
							pp++;
							seq[pp] = data9;
							pp++;
							break;
					}
					break;
					*/
				case 0x43:
					if (data6)
						disp_on_fg = 1;
					else
						disp_off_fg = 1;
					break;
				case 0x6f:
					if (data6)
						power_on_fg = 1;
					else
						power_off_fg = 1;
					break;
			}
		}
		SIGNAL = 0;
	}
}

void b01_word1s(unsigned char rc) using 1
{
	rr = b01_word1;

	if (rc == datax)
	{
				switch (data7)
					{
						case 0x80:
							//seq[48] = data6+1;
							pp = 0;
							break;
						case 0x40:
							set_seq_fg = 1;
							if (pp != 48) seq[pp] = 0;
							pp = 0;
							break;
						default:
							seq[pp] = data7+1;                                
							pp++;
							seq[pp] = data8;
							pp++;
							seq[pp] = data9;
							pp++;
							break;
					}
		SIGNAL = 0;
	}
}

void b01_word12x(unsigned char rc)	using 1
{
	rr = b01_word1;

	if (rc == datax)
	{
		//if (data4)
		{
			addon_fg = 1;
			seq[10] = data6;
			seq[11] = data7;
		}
	SIGNAL = 0;
	}
}

/*
extern void init_serial(void)
{
	PCON = 0x00;SCON = 0x50;
	TH2 = 0xff; RCAP2H = 0xff;
#ifdef FOCS_40M
	TL2 = 0x7e; RCAP2L = 0x7e;
#else // for 22.1184
	TL2 = 0xb8; RCAP2L = 0xb8;
#endif
	T2CON = 0x34;
	
	rr = b01_word1;
}


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

⌨️ 快捷键说明

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