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

📄 p_pwt.c

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

unsigned char data1,data3,data4,datax;
unsigned char data2,data5,data6;

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 word1(unsigned char rc) using 1
{
	if ((rc == 0xfc) || (rc == 0xfa))
	{
		data1 = rc;
		datax = rc;
		rr = word2;
	}
}

void word2(unsigned char rc) using 1
{
	data2 = rc;	
	datax += rc;
	rr = word3;
}

void word3(unsigned char rc) using 1
{
	data3 = rc;
	datax += rc;
	data3 <<= 5;
	data3 ++;
	rr = word4;
}

void word4(unsigned char rc) using 1
{
	data4 = rc;
	datax += rc;
	if ((data3 == 0x31) && (data4 == 0))
	{
		if (id == 0)
			rr = word5;
		else
			rr = word1;
	}
	else if ((data3 == 0x21) && (data4 == 0))
	{
		rr = word5;
	}
	else
	{	
		data4 ++;
		data4 += data3;
		if (data4 == id)		
			rr = word5;
		else
			rr = word1;
	}
}

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

void word6(unsigned char rc) using 1
{
	data6 = rc;
	datax += rc;
	datax &= 0x7f;
	rr = word7;
}

void word7(unsigned char rc) using 1
{
	rr = word1;
	if (rc == datax)
	{
		if (data1 == 0xfa)
		{
			switch(data2)
			{
			case 0x01:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 8;
					seq[13] = 0;									
					seq[14] = data5/3;
				}
				break;
			case 0x02:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 16;
					seq[13] = 0;									
					seq[14] = data5/3;
				}
				break;
			case 0x03:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 4;
					seq[13] = data5/3;									
					seq[14] = 0;
				}
				break;
			case 0x04:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 2;
					seq[13] = data5/3;									
					seq[14] = 0;
				}
				break;
			case 0x05:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 12;
					seq[13] = data5/3;									
					seq[14] = data5/3;
				}
				break;
			case 0x06:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 12;
					seq[13] = data5/3;									
					seq[14] = data5/3;
				}
				break;
			case 0x07:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 10;
					seq[13] = data5/3;									
					seq[14] = data5/3;
				}
				break;
			case 0x08:
				if (data5 == 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;								
				}
				else
				{
					cont_fg = 1;
					run_seq2_fg = 0;
					run_swing_fg = 0;
					run_seq_fg = 0;
					seq[12] = 18;
					seq[13] = data5/3;									
					seq[14] = data5/3;
				}
				break;
			case 0x09:
				iris_open_fg = 1;
				break;
			case 0x0a:
				iris_close_fg = 1;
				break;
			case 0x0b:
				focu_far_fg = 1;
				focus_need_stop = 1;
				break;
			case 0x0c:
				focu_near_fg = 1;
				focus_need_stop = 1;
				break;
			case 0x0d:
				zoom_tele_fg = 1;
				zoom_need_stop = 1;
				break;
			case 0x0e:
				zoom_wide_fg = 1;
				zoom_need_stop = 1;
				break;
			case 0x0f:	
				set_pre_fg=1;
				run_swing_fg = 0;
				run_seq2_fg = 0;
				seq[15] = 51;
				break;
			case 0x13:
				set_pre_fg=1;
				run_swing_fg = 0;
				run_seq2_fg = 0;
				seq[15] = 52;
				break;
			case 0x10:
				run_swing_fg = 1;
				seq[17] = 51;
				seq[18] = 52;
				break;
			case 0x11:
				run_seq2_fg = 1;
				break;
			}															
		}
		else	
		{
				
		}
	}
}


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;
	id ++;
}


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)
{  
//#ifndef DIS660
	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;
#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;
#endif
	  default:
		no = no;
		return 0;
	}
/*
#else
    no = no;
	return 0;
#endif
*/
}


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;
#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;
#endif
	default:
		no = no;
		return 0;
	}
//#else
//    no = no;
//	return 0;
//#endif
}



extern bit do_call_addon(unsigned char no)
{
//#ifndef DIS660
	switch (no)
	{
	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;
#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;
#endif
	default:
		no = no;
		return 0;
	}
//#else
//    no = no;
//	return 0;
//#endif
}


⌨️ 快捷键说明

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