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

📄 p_san450.c

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

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

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:			//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;
#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
}

unsigned char recv_code;
unsigned char rr;
unsigned char idata word2,word3,word6,word7,word8,word9,wordx,wordy;
unsigned char idata word4,word5;
unsigned char idata xsp;//,ysp;//for alec

void serial_int(void) interrupt 4 using 1
//void po_san450_g2(void) using 1
{ 
	ES = 0;

	if (_testbit_(RI))
	{									
		recv_code = SBUF;
		rr++;
		switch (rr)
		{
		case 1:
			if ((recv_code & 0xc0) != 0xc0)rr = 0;
			if ((recv_code & 0x03) != ((id >>6) & 0x03))rr = 0;
			wordx = recv_code;			
			break;
		case 2:
			if ((recv_code & 0xc0) != 0x80)rr = 0;
			if (recv_code != (id & 0x3f | 0x80))rr = 0;
			wordx += recv_code;			
			break;
		case 3:
			if ((recv_code & 0x80) != 0x0)rr = 0;
			word3 = recv_code;
			wordx += word3;
			wordy = wordx;			
			(recv_code > 0x49 ) ? (rr = 4) : (rr = 3);			
			break;
		case 4:
			rr = 0;
			if (recv_code == ((~wordx)&0x7f))
				{ 
						run_swing_fg = 0;
						run_swing2_fg = 0;
						switch (word3)
 			    			{
 			    			case 0x01: 			    				
 			    			case 0x02: 			    						    			
 			    			case 0x03:
							case 0x04:
 			    			case 0x05:
								seq[12] = 0;								
								cont_fg = 1; 			    				
 			    				if (_testbit_(zoom_need_stop)) zoom_stop_fg = 1;
 			    				if (_testbit_(focus_need_stop)) focu_stop_fg = 1;
								break;
 			    			case 0x08:
 			    				iris_open_fg = 1;
 			    				break;
 			    			case 0x09:
 			    				iris_close_fg = 1;
 			    				break;
 			    			case 0x0a:
 			    				focu_near_fg = 1;
							focus_need_stop = 1;
 			    				break;
 			    			case 0x0b:
 			    				focu_far_fg = 1;
							focus_need_stop = 1;							
 			    				break;
 			    			case 0x0c:
 			    				zoom_wide_fg = 1;
							zoom_need_stop = 1;
 			    				break;
 			    			case 0x0d:
 			    				zoom_tele_fg = 1;
							zoom_need_stop = 1;
							break;
 			    			case 0x12:
 			    				addon_fg = 1;		//camera digital off
	 							//seq[10] = A_DIGI;
	 							//seq[11] = ON; 			    				
								break;
 			    			case 0x13:
 			    				addon_fg = 1;		//camera digital off
	 							//seq[10] = A_DIGI;
	 							//seq[11] = OFF; 			    				
								break;
 			    			case 0x20:
 			    				run_swing_fg = 0;
 			    				seq[12] = 0;								
								cont_fg = 1; 			    				
 			    				break; 			    					
							case 0x1e:
 			    				power_on_fg = 1;
 			    				break;
 			    			case 0x1f:
 			    				power_off_fg = 1;
 			    				break;
 			    			case 0x32:
						case 0x34:
							run_swing_fg = 1;
							break;
						case 0x31:
						case 0x33:
						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;
							}	
					}
			 break;
		case 5:
			if ((recv_code & 0x80) != 0x0)rr = 0;
			word4 = recv_code;			
			wordy += word4;
			xsp = word4 * 10;
			break;
		case 6:
			rr = 0;
			if (recv_code == ((~wordy)&0x7f))
 			    		{
 			    		run_swing_fg = 0;
						run_swing2_fg = 0;
						run_seq_fg = 0;	
						switch (word3)
 			    			{
 			    			case 0x50:
 			    				cont_fg = 1;
								seq[12] = 0x08;//dir
								seq[14] = xsp;//x_speed
								seq[13] = 0x00;																						
 			    				break;
 			    			case 0x51:
 			    				cont_fg = 1;
								seq[12] = 0x10;//dir
								seq[14] = xsp;//x_speed
								seq[13] = 0x00;
								break;
 			    			case 0x52:
 			    				cont_fg = 1;
								seq[12] = 0x04;//dir 			    				
								seq[14] = 0x00;
								seq[13] = xsp;//y_speed
 			    				break;
 			    			case 0x53:
 			    				cont_fg = 1;
								seq[12] = 0x02;//dir 			    				
								seq[14] = 0x00;
								seq[13] = xsp;//y_speed
 			    				break;
 			    			case 0x58: 			    				
 			    				set_pre_fg = 1;								
								seq[15] = word4;
 			    				break;
 			    			case 0x59:
 			    				call_pre_fg = 1;																
								seq[15] = word4;
 			    				break;
 			    			case 0x60:								
								run_swing_fg = 1;							
 			    				break;
						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;	
 			    			} 			    		
 			    	}
			 break;
		default:
			rr = 0;
			break;
		}		
		}
	ES = 1;
}

⌨️ 快捷键说明

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