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

📄 p_vcl.c

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

unsigned char idata data2,data3;
bit power_fg = 1;  

void (code *rr)(unsigned char rc);
void word1(unsigned char rc);
void word2(unsigned char rc);
void word3(unsigned char rc);

void word1(unsigned char rc) using 1
{	
	if(rc == (id | 0x80))rr = word2;			
}

void word2(unsigned char rc) using 1
{	
	if((rc & 0x80) != 0x0)rr = word1;    
    data2 = rc & 0x7f;
	switch (data2)
 	{
		case 0x3c:
            focu_near_fg = 1;
			rr = word1;
			break;			
		case 0x2c:
			focus_need_stop = 1;
            rr = word1;
			break;
		case 0x3d:
			focu_far_fg = 1;
            rr = word1;
			break;
		case 0x2d:
			focus_need_stop = 1;
            rr = word1;
			break;
        case 0x3e:
			iris_open_fg = 1;
            rr=word1;
			break;
		case 0x3f:
			iris_close_fg = 1;
            rr = word1;
			break;
		case 0x3a:
			zoom_tele_fg = 1;
            rr = word1;
			break;
		case 0x2a:
            zoom_need_stop = 1;
            rr = word1;
			break;
		case 0x3b:
			zoom_wide_fg = 1;
            rr = word1;
			break;
		case 0x2b:
            zoom_need_stop = 1;
            rr = word1;
			break;
        case 0x42:			
        case 0x47:                	
        case 0x4c:                	
        case 0x4e:                	
        case 0x52:                	
        case 0x55:
        	rr = word3;
            break;
		case 0x6c:
            seq[12] = 0;
			cont_fg = 1;
            rr = word1;
            break;
        case 0x6e:
            seq[12] = 0;
			cont_fg = 1;
            rr = word1;
            break;
        case 0x72:
            seq[12] = 0;
			cont_fg = 1;
            rr = word1;
            break;
        case 0x75:
            seq[12] = 0;
			cont_fg = 1;
            rr = word1;
            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;
            rr = word1;		
			break;
	} //end (switch (data2))
} //end

void word3(unsigned char rc) using 1
{
	rr = word1;
	if((rc & 0x80) != 0x0)rr = word1;
    data3 = rc & 0x7f;	
	run_swing_fg = 0;
	run_swing2_fg = 0;
	run_seq2_fg = 0;
	switch(data2)
		{
        	case 0x47:
            	set_pre_fg = 1;
				seq[15] = data3;
                break;
			case 0x42:
				call_pre_fg = 1;
				seq[15] = data3;
				break;
			case 0x52: //right
				cont_fg = 1;
                seq[12] = 2;
                seq[13] = data3;
                seq[14] = 0;
                break;
			case 0x4c: //left
				cont_fg = 1;
				seq[12] = 4;
				seq[13] = data3;
				seq[14] = 0;
				break;
  			case 0x55: //up
				cont_fg = 1;
				seq[12] = 8;
				seq[13] = 0;
				seq[14] = data3;
				break;
			case 0x4e: //down
				cont_fg = 1;
				seq[12] = 16;
				seq[13] = 0;
				seq[14] = data3;
				break;
			default:								
				break;
		} //end (switch(data3))
} //end

extern void init_serial(void)
{
		PCON = 0x00;SCON = 0xd4;
		TH2 = 0xff; RCAP2H = 0xff;
	#ifdef FOCS_40M
		TL2 = 0x7e; RCAP2L = 0x7e;
	#else
		TL2 = 0xb8; RCAP2L = 0xb8;
	#endif
		T2CON = 0x34;
		SM2 = 1;
		rr = word1;
}

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


extern bit do_set_addon(unsigned char no)
{  
		#if (1)
			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;
			}
	#else
		no = no;
		return 0;
	#endif
}

/* 用调用预置点的方法来实现附加功能*/
extern bit do_call_addon(unsigned char no)
{
		#if (1)
			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;
					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 + -