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

📄 iomod.c

📁 对遥控器PT2262编码芯片进行解码的源程序。已经在多个产品中使用。
💻 C
字号:
/****************************************************************************
【文  件  名  称】IOMOD.C
【功  能  描  述】输入输出程序
【程  序  版  本】1.0
****************************************************************************/

//***************************************************************************

#include <REG2051.H>
#include "INC\SM89516A.H"
#include "INC\DECLARE.H"
#include "INC\EXTERN.H"
#include "INC\24C16.H"	 
#include "INC\V24INT.H"
#include <intrins.h>
//***************************************************************************

//***************************************************************************/


/****************************************************************************
名称:    Int0_Interrupt
参数:    无
返回值:   无
描述:   
创建日期:
修改日期:
****************************************************************************/
/*void x0_interrupt()               interrupt X0_VECT   using X0_REG_BANK
{
	
} ?*/

/****************************************************************************
名称:    Int0_Interrupt
参数:    无
返回值:   无
描述:   
创建日期:
修改日期:
****************************************************************************/
/*void x1_interrupt()                 interrupt X1_VECT   using X1_REG_BANK
{
	
}    */                         
          
/****************************************************************************
函数名   :Delay_10   
函数参数 :    
返回值   :   
功能描述 :   
创建日期 :
修改日期 :
****************************************************************************/
void Delay_Nms(WORD n)
{
 	WORD i,j;
	for(j=0;j< n;j++)
	{
		for(i=0;i<220;i++);
		//Watchdog_Reset();
	}
}
/****************************************************************************
函数名   : Get_Sp_Byte1  
函数参数 : addr   
返回值   :   
功能描述 :   
创建日期 :
修改日期 :
****************************************************************************/
BYTE Get_SP_Byte1(BYTE addr)
{
	BYTE temp1,temp2,temp3;
	temp1 = Get_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr    );
	temp2 = Get_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr+80 );
	temp3 = Get_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr+160);

	if((temp1==temp2)&&(temp1==temp3))
	{
		return temp1;
	}
	else
	{
		if(temp1==temp2)
		{
			EEPROM_ENB;
			Delay_Nms(3);
			Save_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr+160,temp1);
			EEPROM_DIS;
			return temp1;
		}
		else if(temp1==temp3)
		{
			EEPROM_ENB;
			Delay_Nms(3);
			Save_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr + 80,temp1);
			EEPROM_DIS;
			return temp1;
		}
		else if(temp2==temp3)
		{
			EEPROM_ENB;
			Delay_Nms(3);
			Save_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr    ,temp2);
			EEPROM_DIS;
			return temp2;
		}
		else
		{
			return 0xFF;	
		}
	}
}	  

/****************************************************************************
函数名   : Save_SP_Byte1  
函数参数 :    
返回值   :   
功能描述 :   
创建日期 :
修改日期 :
****************************************************************************/
void  Save_SP_Byte1(BYTE addr,BYTE val)
{
	 Save_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr    ,val);
	 Save_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr+80 ,val);
	 Save_SP_Byte(TX_NVRAM_SLAV_ADDR1,addr+160,val);
}  

   
/****************************************************************************
函数名   :  Write_Code 
函数参数 :    
返回值   :   
功能描述 :   
创建日期 :
修改日期 :
****************************************************************************/
void Write_Code()
{
	BYTE temp_addr;
	//遥控器学习
	if ((Work_Mode > 0) && (Work_Mode < 21))
	{			
		temp_addr = (Work_Mode-1) *3 + YK1_SP;
		EEPROM_ENB;
		Delay_Nms(3);
		Save_SP_Byte1(temp_addr  ,Receive_Code[0]);
		Save_SP_Byte1(temp_addr+1,Receive_Code[1]);
		Save_SP_Byte1(temp_addr+2,Receive_Code[2]);	
		EEPROM_DIS;

		if((Get_SP_Byte1(temp_addr)==Receive_Code[0]))	 	
		{  
			Send_Str("**81");
			Send_Byte((Work_Mode)/10+ '0');
			Send_Byte((Work_Mode)%10+ '0');
			Send_Byte(0x0D);
			Send_Byte(0x0A);
		}
	}
}	

/****************************************************************************
函数名   : Analyse_Code  
函数参数 : **911(05-20)   
返回值   :   
功能描述 :   
创建日期 :
修改日期 :
****************************************************************************/
void Analyse_Code()
{
	BYTE i,code_num[3];
	
    if((Receive_Code[0] == 0xff)
	 &&(Receive_Code[1] == 0xff)
	 &&(Receive_Code[2] == 0xff))
	{
		;
	}else{
		for(i=0;i<5;i++)
		{
			code_num[0]= Get_SP_Byte1(YK1_SP+i*3  );
			code_num[1]= Get_SP_Byte1(YK1_SP+i*3+1); 	
		
			if((Receive_Code[0] == code_num[0])
			&& (Receive_Code[1] == code_num[1]))
			{
			 	if((Receive_Code[2]== 0xC0)||(Receive_Code[2]== 0x30)
			  	||(Receive_Code[2]== 0x0C)||(Receive_Code[2]== 0x03))
				{ 
				
			 		Send_Str("**93");		 
			 		if	(Receive_Code[2]== 0xC0)  Send_Byte('1');
			 		if  (Receive_Code[2]== 0x30)  Send_Byte('2');
			 		if	(Receive_Code[2]== 0x0C)  Send_Byte('3');
			 		if	(Receive_Code[2]== 0x03)  Send_Byte('4');
			 		Send_Str("\r\n");
					Delay_Nms(400);
			 		return;
				}
			}
		}
		
		for(i=5;i<20;i++)
		{
			code_num[0]= Get_SP_Byte1(YK1_SP+i*3  );
			code_num[1]= Get_SP_Byte1(YK1_SP+i*3+1);
			code_num[2]= Get_SP_Byte1(YK1_SP+i*3+2);

			if((Receive_Code[0] == code_num[0])
			&& (Receive_Code[1] == code_num[1])
			&& (Receive_Code[2] == code_num[2]))
			{
			 	Send_Str("**91");				 
			 	Send_Byte((i-4)/10+'0');
			 	Send_Byte((i-4)%10+'0');
			 	Send_Str("\r\n");
				Delay_Nms(600);
			 	return;
			}
		}		
	}

}
/****************************************************************************
函数名   :Get_All_Data   
函数参数 :    
返回值   :   
功能描述 :   
创建日期 :
修改日期 :
****************************************************************************/
/*void Get_All_Data()
{
	BYTE i;
	for(i=0;i<255;i++)
	{
		Send_Byte(Get_SP_Byte(TX_NVRAM_SLAV_ADDR1,i));
	}
}*/	   
/****************************************************************************
函数名   :Handle_Mcu1_Data  
函数参数 : 
返回值   :   
功能描述 : *#81(01-20)学习编码,*#820总清,*#82(01-20)清除,*#886退出学习模式,
创建日期 :
修改日期 :
****************************************************************************/
void Handle_Mcu1_Data()
{
	BYTE i,temp_addr,temp;
	if(Data_Rec_Temp[3]=='1')
	{
		temp =(Data_Rec_Temp[4]-'0')*10 + (Data_Rec_Temp[5]-'0');
		if (temp<21)Work_Mode = temp; 	
	}

	if(Data_Rec_Temp[3]=='2')
	{
		temp = (Data_Rec_Temp[4]-'0')*10 + (Data_Rec_Temp[5]-'0');
		if (temp==0) 
		{
			if(Data_Rec_Temp[6]=='1')
			{
				EEPROM_ENB;
			 	Delay_Nms(3);
			 	for(i=0;i<15;i++)
			 	{
			 		Save_SP_Byte1(YK1_SP+i,0xFF);			
			 	}
			 	EEPROM_DIS;  	
			 	Send_Str("**82001\r\n");
			}

			if(Data_Rec_Temp[6]=='2')
			{
				EEPROM_ENB;
			 	Delay_Nms(3);
			 	for(i=15;i<60;i++)
			 	{
			 		Save_SP_Byte1(YK1_SP+i,0xFF);			
			 	}
			 	EEPROM_DIS;  	
			 	Send_Str("**82002\r\n");
			}
		}
		else if(temp<21)
		{
			temp_addr = (temp-1)*3 + YK1_SP;
			EEPROM_ENB;
			Delay_Nms(3); 		
			Save_SP_Byte1(temp_addr+0,0xFF);
			Save_SP_Byte1(temp_addr+1,0xFF);
			Save_SP_Byte1(temp_addr+2,0xFF);			
			EEPROM_DIS;	
			Send_Str("**82");
			Send_Byte(Data_Rec_Temp[4]);
			Send_Byte(Data_Rec_Temp[5]);
			Send_Str("\r\n");
		}		
	}

	if((Data_Rec_Temp[3]=='8')&&(Data_Rec_Temp[4]=='6')) Work_Mode = 0;
		
}  




⌨️ 快捷键说明

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