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

📄 main.c

📁 显示及鼠标、键盘切换程序。使用STC单片机
💻 C
📖 第 1 页 / 共 2 页
字号:
/*		切换程序主程序文件			*/
/*			张亚成				*/
/*			2006.4.29			*/
/*			版本 V1.0			*/

#include <STC12C5410AD.H>
#include <DATA.H>
#include <CODE.H>
#include <absacc.h>
#include <intrins.h>
/**************************************/
/*当有通讯板时由通讯板决定输出状态,1为有通讯板*/
#define		HAVECOM		0
extern unsigned char zcrmtime,zcrktime;
bit time_js;
/**************************************/

void init_sys(void);
void check_key( void );
void check_powerm( void );
void time_pro( void );
void code_pro( void );
void mread_data( void );
void kread_data( void );
void mwrite_data( void );
void kwrite_data( void );

extern mread_data1( void );
extern kread_data1( void );
extern mwrite_data1( void );
extern kwrite_data1( void );

extern cmwrite_data( void );
extern  cmread_data( void );
extern ckwrite_data( void );
extern ckread_data( void );
void ps2sr_pro( void );
void mk_rw(void);
void mk_time( void );

void main( void )
{
init_sys();
while( 1 )
	{
	check_powerm();
	code_pro();
	check_key();
	mk_time();
	send_aa00_time++;
	if( send_aa00_time > 1000 )
		{
		kcutcode = 0;
		}
	}
}
void mk_time( void )
{
if( mrtime > 240 )
	{
	mclkin = 1;
	mdatain = 1;
	mroption = 0;
	msoption = 0;
	mrtime = 0;
	ms_now = 0;
	}
if( krtime > 240 )
	{
	kclkin = 1;
	kdatain = 1;
	kroption = 0;
	ksoption = 0;
	krtime = 0;
	ks_now = 0;
	}
if( krtime1 > 240 )
	{
	kclkin1 = 1;
	kdatain1 = 1;
	ksoption1 = 0;
	kroption1 = 0;
	krtime1 = 0;
	k1s_now = 0;
	}
if( mrtime1 > 240 )
	{
	mclkin1 = 1;
	mdatain1 = 1;
	msoption1 = 0;
	mroption1 = 0;
	mrtime1 = 0;
	m1s_now = 0;
	}
if( cmwcodenum != 0)
	{
	if( cutime > 220 )
		{
		if( cmwoption != 100 )
			{
			cutime = 0;
			cmclk = 1;
			cmdata = 1;
			cmwcodenum --;
			cmwoption = 0;
			} 
		}
	}
else
	{
	if( zcrmtime > 230 )
		{
		if( time_js == 1 )
			{
			time_js = 0;
			zcrmtime = 0;
			cmdata = 1;
			cmclk = 0;
			cmroption = 8;
			}
		else
			{
			time_js = 1;
			}
		}
	}
if( ckwcodenum != 0 )
	{
	if( cuktime > 220 )
		{
		if( ckwoption != 100 )
			{
			cuktime = 0;
			ckclk = 1;
			ckdata = 1;
			ckwcodenum --;
			ckwoption = 0;
			} 
		}
	}
else
	{
	if( zcrktime > 230 )
		{
		zcrktime = 0;
		ckdata = 1;
		ckclk = 1;
		ckroption = 8;
		}
	}
}
void init_sys(void)
{
/*		系统时钟分频			*/
CLK_DIV = 0x00;
/*		看门狗				*/
//EN_WDT = 0;
/*		定时器分频设置			*/
/*定时器0 时钟采用晶振频率*/
/*定时器1 时钟采用12分频后的时钟*/
AUXR = 0x80;
/*		定时器初始化			*/
TMOD = 0x12;
/*		定时器初值			*/
/*1us定时*/
/*TH0 = 0xDF;
TL0 = 0xDF;*/
TH0 = 0x5B;
TL0 = 0x5B;
/*10ms定时*/
/*TH1 = 0x93;
TL1 = 0x7F;*/
TH1 = 0xFE;
TL1 = 0xB5;
/*		打开中断			*/
ET0 = 1;
ET1 = 0;
EA = 1;
/*		初始化端口			*/
P2M0 &= 0xf7;
P2M1 |= 0x08;
/*		打开定时器			*/
TR0 = 1;
TR1 = 1;
/*		初始化数据			*/
job_code = 0;

#if	HAVECOM

#else
state = 0;
bxpout = 0;
bxout = state;
/*leda = state;
ledb = ~state;*/
#endif
vi = 1;
avcc = 0;
bvcc = 0;
/*声音计时时间*/
usetime1 = 0;
/*按键滤波次数*/
usetime = 0;
send_aa00_time = 0;
ms_pluse = 0;
}

void state_cutab( INT8U a_b )
{
if( a_b == 0 )
	{
	state = 0;
	leda = state;
	ledb = ~state;
	bxout = state;
	/*****************************************************/
	/*			切换后先发送复位命令,让上位机复位设置,保证正常工作			*/
	msoption = 0;
	mroption = 0;
	ksoption = 0;
	kroption = 0;
	mcodenum = 2;
	mcode[1] = 0xAA;
	mcode[0] = 0x00;
	kcodenum = 1;
	kcode[0] = 0xAA;
	mclkin = 1;
	mdatain = 1;
	kclkin = 1;
	kdatain = 1;
	/*****************************************************/
	}
else if( a_b == 1 )
	{
	state = 1;
	bxout = state;
	/*****************************************************/
	/*			切换后先发送复位命令,让上位机复位设置,保证正常工作			*/
	msoption1 = 0;
	mroption1 = 0;
	ksoption1 = 0;
	kroption1 = 0;
	mcodenum1 = 2;
	mcode1[1] = 0xAA;
	mcode1[0] = 0x00;
	kcodenum1 = 1;
	kcode1[0] = 0xAA;
	mclkin1 = 1;
	mdatain1 = 1;
	kclkin1 = 1;
	kdatain1 = 1;
	/********************************************************/
	}
}
void check_key( void )
{
/*************************************/
/* 指示灯闪烁切换
/*************************************/
led_time ++;
if( led_time == 0 )
	{
	if( state == 1 )
		{
		ledb = !ledb;
		leda = 1;
		}
	else
		{
		leda = !leda;
		ledb = 1;
		}
	}
if( ctl_cs == 0 )
	{
	bxout = 1;
	_nop_();
	if( bxout == 0 )
		{
		if( state != 0 )
			{
			state_cutab( 0 );
			}
		}
	else
		{
		if( state != 1 )
			{
			state_cutab( 1 );
			}
		}
	viout = 0;
	if( cut_p_time >150 )
		{
		ctl_ou = 1;
		}
	cut_p_time ++;
	}
else
	{
	if( key1 == 0)
		{
		usetime ++;
		if( key1out == 0 )
			{
			if( usetime > 100 )
				{
				if( state == STATE_B )
					{
					state_cutab( 0 );
					}
				vi = 1;
				key1out = 1;
				}
			}
		}
	else
		{
		key1out = 0;
		}
	if( key2 == 0)
		{
		usetime ++;
		if( key2out == 0 )
			{
			if( usetime > 100 )
				{
				if( state == STATE_A )
					{
					state_cutab( 1 );	
					}
				vi = 1;
				key2out = 1;	
				}
			}
		}
	else
		{
		key2out = 0;
		}
	if( key1 == 1 && key2 == 1 )
		{
		usetime = 0;
		}
	if( vi == 1 )
		{
		if( usetime1 > 250 )
			{
			vi = 0;
			viout = 0;
			usetime1 = 0;
			}
		else
			{
			viout = 1;
			usetime1++;
			}
		}
	}
}

/*				鼠标上电检测程序				*/
/*				张亚成						*/
/*				2006.4.29					*/
void check_powerm( void )
{

if( bvcc == 0 && avcc == 0 )
	{
	if( amvcc == 1 )
		{
		state = 0;
		bxout = state;
		vi = 1;
		avcc = 1;
		ctl_ou = 0;
		cut_p_time = 0;
		}
	else if( bmvcc == 1 )
		{
		state = 1;
		bxout = state;
		vi = 1;
		bvcc = 1;
		ctl_ou = 0;
		cut_p_time = 0;
		}
	}
if( amvcc == 0)
	{
	avcc = 0;
	}
if( bmvcc == 0 )
	{
	bvcc = 0;
	}

if( state == 0)
	{
	if( bmvcc == 1 && avcc == 1 && bvcc == 0)
		{
		msoption1 = 0;
		mroption1 = 0;
		ksoption1 = 0;
		kroption1 = 0;
		bvcc = 1;
		mcodenum1 = 2;
		mcode1[1] = 0xAA;
		mcode1[0] = 0x00;
		kcodenum1 = 1;
		kcode1[0] = 0xAA;
		}
	}
else if( state == 1 )
	{
	if( amvcc == 1 && bvcc ==1 && avcc == 0)
		{
		msoption = 0;
		mroption = 0;
		ksoption = 0;
		kroption = 0;
		avcc = 1;
		mcodenum = 2;
		mcode[1] = 0xAA;
		mcode[0] = 0x00;
		kcodenum = 1;
		kcode[0] = 0xAA;
		}
	}
}

/*				命令处理程序					*/
/*				张亚成						*/
/*				2006.5.8					*/	

void code_pro( void )
{
if( mcoderok )
	{
	mcoderok = 0;
	if( mrcode == 0xFF )
		{
		mcodenum = 3;
		mcode[2] = 0xFA;
		mcode[1] = 0xAA;
		mcode[0] = 0x00;
		}
	else if ( mrcode == 0xF2 )
		{
		mcodenum = 2;
		mcode[1] = 0xFA;
		mcode[0] = 0x00;
		}
	else if( mrcode == 0xe9 )
		{
		mcodenum = 1;
		mcode[0] = 0x00;
		}
	else
		{
		mcodenum = 1;
		mcode[0] = 0xFA;
		}
	}
if( kcoderok )
	{
	kcoderok = 0;
	if (krcode == 0xFF )
		{
		kcodenum = 2;
		kcode[1] = 0xFA;
		kcode[0] = 0xAA;
		}
	else if( krcode == 0xF2 )
		{
		kcodenum  = 2;
		kcode[1] = 0xFA;
		kcode[0] = 0xAB;
		}
	else 
		{
		kcodenum  = 1;
		kcode[0] = 0xFA;
		}
	}
if( mcoderok1 )
	{
	mcoderok1 = 0;
	if( mrcode1 == 0xFF )
		{
		mcodenum1 = 3;
		mcode1[2] = 0xFA;
		mcode1[1] = 0xAA;
		mcode1[0] = 0x00;
		}
	else if ( mrcode1 == 0xF2 )
		{
		mcodenum1 = 2;
		mcode1[1] = 0xFA;
		mcode1[0] = 0x00;
		}
	else if( mrcode1 == 0xe9 )
		{
		mcodenum1 = 1;
		mcode1[0] = 0x00;
		}
	else
		{
		mcodenum1 = 1;
		mcode1[0] = 0xFA;
		}
	}
if( kcoderok1 )
	{
	kcoderok1 = 0;
	if (krcode1 == 0xFF )
		{
		kcodenum1 = 2;
		kcode1[1] = 0xFA;
		kcode1[0] = 0xAA;
		}
	else if( krcode1 == 0xF2 )
		{
		kcodenum1  = 2;
		kcode1[1] = 0xFA;
		kcode1[0] = 0xAB;
		}
	else 
		{
		kcodenum1  = 1;
		kcode1[0] = 0xFA;
		}
	}
}


/*					命令接收发送程序			*/
/*					张亚成					*/
/*					2005.5.8				*/
void ps2sr_pro( void )
{
if( kcodenum != 0 )
	{
	if( ms_now == 0 )
		{
		kwrite_data();
		}
	}
else
	{
	ks_now = 0;
	kread_data();
	}
if( mcodenum != 0 )
	{
	if( ks_now == 0 )
		{
		mwrite_data();
		}
	}
else
	{
	ms_now = 0;
	mread_data();
	}
if( kcodenum1 != 0 )
	{
	if( m1s_now == 0 )
		{
		kwrite_data1();
		}
	}
else
	{
	k1s_now = 0;
	kread_data1();
	}
if( mcodenum1 != 0 )
	{
	if( k1s_now == 0 )
		{
		mwrite_data1();
		}
	}
else
	{
	m1s_now = 0;
	mread_data1();
	}
}
void mk_rw(void)
{

	if( cmwcodenum != 0)
		{
		cmwrite_data();
		}
	else 
		{
		cmread_data();
		}
	if( ckwcodenum != 0 )
		{
		ckwrite_data();
		}
	else
		{
		ckread_data();
		}
}
void mread_data( void )
{

switch( mroption )
	{
	case 0:
		{
		if( mclkin == 0 && mdatain == 0)
			{
			mroption = 1;
			}
		break;
		}
	case 1:
		{
		if( mclkin == 1 )
			{
			mroption = 2;
			}
		break;
		}
	case 2:
		{
		if( mdatain == 0 )
			{
			mroption = 3;
			mrtime = 0;
			mrnum  = 8;
			}
		else
			{
			mroption = 0;
			}
		break;
		}
	case 3:
		{
		if( mrtime >= Twe_us )
			{
			mrtime = 0;
			mclkin = 0;
			mroption = 4;
			}
		break;
		}
	case 4:
		{
		if( mrtime >= Foy_us )
			{
			mrtime = 0;
			mclkin = 1;
			mroption = 5;
			}
		break;
		}
	case 5:
		{
		if( mrtime >= Twe_us )
			{
			mrtime = 0;
			mrcode /= 2;
			if( mdatain == 1 )
				{
				mrcode |= 0x80;
				}
			mrnum --;
			if( mrnum == 0 )
				{
				mroption = 6;
				}
			else
				{
				mroption = 3;
				}
			}
		break;
		}
	case 6:
		{
		if( mrtime >= Twe_us )
			{
			mrtime = 0;
			mclkin = 0;
			mroption = 7;
			}
		break;
		}
	case 7:
		{
		if( mrtime >= Foy_us )
			{
			mrtime = 0;
			mclkin = 1;
			mroption = 8;
			}
		break;
		}
	case 8:
		{
		if( mrtime >= Twe_us )
			{
			mrtime = 0;
			mcheckbit = mdatain;
			mroption = 9;
			}
		break;
		}
	case 9:
		{
		if( mrtime >= Twe_us )
			{
			mrtime = 0;
			mclkin = 0;
			mroption = 10;
			}
		break;
		}
	case 10:
		{
		if( mrtime >= Foy_us )
			{
			mrtime = 0;
			mclkin = 1;
			mroption = 11;
			}
		break;
		}
	case 11:
		{
		if( mrtime >= Twe_us )
			{
			mroption = 12;
			}
		break;
		}
	case 12:
		{
		if( mdatain  == 1 )
			{
			mrtime = 0;
			mroption = 13;

⌨️ 快捷键说明

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