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

📄 p_kony.c

📁 这是监视器行业常见的键盘与球机通讯协议的C语言源代码
💻 C
字号:
/*
A01 protocol
  V 1.00 build 2003.05.24 by ssln
*/

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

unsigned char data data3,data4,data5;
unsigned char data pp = 0; // for seq point
unsigned char bdata dir_fg = 0;
sbit r_fg = dir_fg^1;
sbit l_fg = dir_fg^2;
sbit u_fg = dir_fg^3;
sbit d_fg = dir_fg^4;

unsigned char idata q[48];

unsigned char asc2hex(unsigned char asc)
{
	return ((asc < 0x3a) ? (asc - 0x30) : (asc - 0x37));
}


/* 返回值为1则不当做预置点功能,返回值为0则是预置点功能 */
/* 用设置预置点的方法来实现附加功能*/
extern bit do_set_addon(unsigned char no)
{
	no = no;
	return 0;
}

/* 用调用预置点的方法来实现附加功能*/
extern bit do_call_addon(unsigned char no)
{
	no = no;
	return 0;
}

extern void init_serial(void)
{
	PCON = 0x00;SCON = 0xd0;	
#ifdef FOCS_40M	
 // for 4800
/*
    TH2 = 0xfe; RCAP2H = 0xfe;
	TL2 = 0xfc; RCAP2L = 0xfc;  
*/
	AD9 = 1;
	if (AD9)
	{
		// for 20.8k
		TH2 = 0xff; RCAP2H = 0xff;
		TL2 = 0xc4; RCAP2L = 0xc4;
	}
	else
	{
		// for 19.2k
		TH2 = 0xff; RCAP2H = 0xff;
		TL2 = 0xbe; RCAP2L = 0xbe;   
	}   
#else   // for 22.1184	
/*
	TH2 = 0xff; RCAP2H = 0xff;
	TL2 = 0x70; RCAP2L = 0x70;
*/
	AD9 = 1;
	if (AD9)
	{
		// for 20.8k
		TH2 = 0xff; RCAP2H = 0xff;
		TL2 = 0xde; RCAP2L = 0xde;
	}
	else
	{
		// for 19.2k
		TH2 = 0xff; RCAP2H = 0xff;
		TL2 = 0xdc; RCAP2L = 0xdc;   
	} 
#endif
	T2CON = 0x34;
	{
		unsigned char i;
		for (i=0;i<48;i++) q[i] = 0;
	}
	SM2 = 1;
}

unsigned char data rc;
unsigned char data rr = 0;

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

		switch (rr)
		{
		case 1:
			if ((rc != id) && (rc != 0)) rr = 0;
			break;
		case 2:
			if (rc != 0x77) rr = 0;
			break;	
		case 3:
			data3 = rc;
			rr = 0;
			switch (rc)
			{	 
	   		case '1':
			case '2':
			case '3':
			case '4':
				dir_fg = 0;
				rr = 3;// for manual control
				break;
	    	case '5':
				iris_open_fg = 1;
				break;
			case '6':	
				iris_close_fg = 1;
				break;
			case '7':
				zoom_wide_fg = 1;
				zoom_tele_fg = 0;
				zoom_change_fg = 0;
				zoom_need_stop = 1;
				break;
			case '8':
				zoom_tele_fg = 1;
				zoom_wide_fg = 0;
				zoom_change_fg = 0;
				zoom_need_stop = 1;				
				break;
			case '9':
				focu_far_fg = 1;
				focus_need_stop = 1;
				break;
			case 'A':
				focu_near_fg = 1;
				focus_need_stop = 1;
				break;
			case 'B':
				power_on_fg = 1;
				break;
			case 'C':
				power_off_fg = 1;
				break;
			case 'M':
				disp_on_fg = 1;
				break;
			case 'N':
				disp_off_fg = 1;
				break;
			case 'F':
				run_swing2_fg = 1;
				break;		
			case 'G':
				run_swing2_fg = 0;
				break;			
			case 0x80:
				if (_testbit_(zoom_need_stop)) 
				{
					zoom_stop_fg = 1;
					zoom_wide_fg = 0;
					zoom_tele_fg = 0;
				}
				if (_testbit_(focus_need_stop)) focu_stop_fg = 1;					
				seq[12] = 0;
				cont_fg = 1;
				break;			
			case 0x59:
			case 0x4c:
				rr = 5; // for preset
				break;		 						    	
			case 0x5a:
				pp = 0;
				rr = 7; // for seq
				break;
			case 'W':
				//rr = 12; // for add on
				break;
			}
			break;
		case 4:
			data4 = rc;
			if (data4 > 0x4a)
			{
				r_fg = 1; // right
				data4 -= 0x4a;
				//data4 -= 0x12;
			}
			else if (data4 > 0x0a) // && data4 < 0x13)
			{
				l_fg = 1; // left
				data4 -= 0x0a;
				//data4 += 0x3e;
				//data4 += 0x2e;
			}
			else
				data4 = 0;

			data4 <<= 3;
			break;
		case 5:
			rr = 0;
	 
			data5 = rc;
			if (data5 > 0x8a)
			{
				d_fg = 1; // down
				//data5 -= 0x62;
				data5 -= 0x8a;
			}
			//else if (data5 > 0x0a && data5 < 0x13)
			else if (data5 > 0x0a)
			{
				u_fg = 1; // up
				data5 -= 0x0a;
				//data5 += 0x2e;
				//data5 += 0x1e;
			}
			else 
				data5 = 0;
			
			data5 <<= 3;
			
			run_swing_fg = 0;
			run_swing2_fg = 0;
			run_seq_fg = 0;
			cont_fg = 1;
			seq[13] = data4;
			seq[14] = data5;
			seq[12] = dir_fg;
			break;
		case 6:
			data4 = asc2hex(rc);
			break;
		case 7:
			data5 = asc2hex(rc);
			seq[15] = (data4 *10) + data5;
			if (data3 == 0x4c)
				call_pre_fg = 1;
			else
				set_pre_fg = 1;
			rr = 0;
			break;
		case 8:
			data4 = asc2hex(rc);
			break;
		case 9:
			data5 = asc2hex(rc);
			//seq[pp] 
			q[pp] = (data4 *10) + data5;
			//if ((seq[pp] == 0) || (pp >= 48))
			if ((q[pp] == 0) || (pp >= 48))
			{
				run_seq_fg = 1;
				//seq[48] = 1;
				rr = 0;
			}
			else
			{
				pp ++;
			}
			break;
		case 10:
			//seq[pp] = asc2hex(rc);
			q[pp] = asc2hex(rc);
			//if ((seq[pp] == 0) || (pp >= 48))
			if ((q[pp] == 0) || (pp >= 48))
			{
				run_seq_fg = 1;
				//seq[48] = 1;
				rr = 0;
			}
			else
			{
				pp ++;
			}
			break;
		case 11:
			data4 = asc2hex(rc);
			break;
		case 12:
			data5 = asc2hex(rc);
			//seq[pp] = (data4 *10) + data5;
			q[pp] = (data4 *10) + data5;
			//if ((seq[pp] == 0) || (pp >= 48))
			if ((q[pp] == 0) || (pp >= 48))
			{
				run_seq_fg = 1;
				//seq[48] = 1;
				rr = 0;
			}
			else
			{
				pp ++;
				rr = 7;
			}
			break;
		case 13:
			data4 = rc;
			break;
		case 14:
			
			data5 = rc;
#ifndef DIS_560
			seq[11] = data5;
			switch (data4)
			{
			case 1:
				addon_fg = 1;
				seq[10] = A_RESET;
				seq[11] = ON;
				break;
			case 2:
				addon_fg = 1;
				seq[10] = A_BLC;			
				break;
			case 3:
				addon_fg = 1;
				seq[10] = A_FRZE;
				break;
			case 4:
				addon_fg = 1;
				seq[10] = A_MIRR;
				break;
			case 5:
				if (data5)
				  disp_on_fg = 1;
			   	else
				  disp_off_fg = 1;
				 break;
			case 6:
				addon_fg = 1;
				seq[10] = A_DIGI;
				break;
			case 7:
				addon_fg = 1;
				seq[10] = A_FOCU;
				seq[11] = !seq[11];
				break;
			case 8:
				addon_fg = 1;
				seq[10] = A_ZERO;
				break;
			case 10:
				addon_fg = 1;
				seq[10] = A_IRIS;
				if (data5 == 1) 
					seq[11] = 0;
				else
					seq[11] = 1;
				break;
			}
#endif
		//	break;
		default:
			rr = 0;
			break;
		}

	if (rr == 0)
		SM2 = 1;
	else
		SM2 = 0;
	}
	ES = 1;
}

⌨️ 快捷键说明

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