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

📄 nec_ir.c

📁 NEC红外编码
💻 C
字号:
#include <reg52.h>
#include <intrins.h>

sbit IR_OUT = P1^0;

bdata unsigned char addr=0x00;
bdata unsigned char keyi;

sbit addr0 = addr^0;
sbit addr1 = addr^1;
sbit addr2 = addr^2;
sbit addr3 = addr^3;
sbit addr4 = addr^4;
sbit addr5 = addr^5;
sbit addr6 = addr^6;
sbit addr7 = addr^7;

sbit keyi0 = keyi^0;
sbit keyi1 = keyi^1;
sbit keyi2 = keyi^2;
sbit keyi3 = keyi^3;
sbit keyi4 = keyi^4;
sbit keyi5 = keyi^5;
sbit keyi6 = keyi^6;
sbit keyi7 = keyi^7;

void NEC_IR_Simulation(unsigned char);
void Delay_4ms5();
void Ir_logic_1();
void Ir_logic_0();

//---------------------------------------------------------------
void NEC_IR_Simulation(unsigned char key)
{

	keyi = key;		//code
		
	IR_OUT = 1;		//leader code
	Delay_4ms5();
	Delay_4ms5();
	IR_OUT = 0;
	Delay_4ms5();	
	
	if(addr0)		//address code  ,LSB first
		Ir_logic_1();	//logic 1  
	else
		Ir_logic_0();	//logic 0
	if(addr1)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(addr2)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(addr3)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(addr4)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(addr5)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(addr6)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(addr7)
		Ir_logic_1();
	else
		Ir_logic_0();

	if(addr0)		//address code 反码
		Ir_logic_0();	//logic 0
	else
		Ir_logic_1();	//logic 1
	if(addr1)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(addr2)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(addr3)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(addr4)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(addr5)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(addr6)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(addr7)
		Ir_logic_0();
	else
		Ir_logic_1();

	if(keyi0)		//user code
		Ir_logic_1();	//logic 1
	else
		Ir_logic_0();	//logic 0
	if(keyi1)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(keyi2)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(keyi3)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(keyi4)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(keyi5)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(keyi6)
		Ir_logic_1();
	else
		Ir_logic_0();
	if(keyi7)
		Ir_logic_1();
	else
		Ir_logic_0();

	if(keyi0)		//user code 反码
		Ir_logic_0();	//logic 0
	else
		Ir_logic_1();	//logic 1
	if(keyi1)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(keyi2)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(keyi3)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(keyi4)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(keyi5)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(keyi6)
		Ir_logic_0();
	else
		Ir_logic_1();
	if(keyi7)
		Ir_logic_0();
	else
		Ir_logic_1();
		
	IR_OUT = 1;
}

//--------------------------------------------------------------------------
void Ir_logic_0()
{
	unsigned char i,j,k;

	for(i=0;i<22;i++)	//22 pulse = 560us
	{
		IR_OUT	= 1;		//high = 8.77us
		for(j=0;j<5;j++);
		IR_OUT = 0;		//low = 26.3us	
		for(k=0;k<10;k++);
	}
	IR_OUT = 0;		//no signal time =560us
	for(i=0;i<18;i++)
	{
		for(j=0;j<14;j++)
		_nop_();
	}
}
//--------------------------------------------------------------------------
void Ir_logic_1()
{
	unsigned char i,j,k;

	for(i=0;i<22;i++)	//22 pulse = 560us
	{
		IR_OUT	= 1;		//high = 8.77us
		for(j=0;j<5;j++);
		IR_OUT = 0;			//low = 26.3-8.77=17.53us	
		for(k=0;k<10;k++);
	}
	IR_OUT = 0;		//no signal time =560us * 3
	for(i=0;i<20;i++)
	{
		for(j=0;j<14;j++)
		_nop_();
	}
	for(i=0;i<20;i++)
	{
		for(j=0;j<14;j++)
		_nop_();
	}
	for(i=0;i<20;i++)
	{
		for(j=0;j<14;j++)
		_nop_();
	}
}
//--------------------------------------------------------------------------
void Delay_4ms5()
{
	unsigned char k,i,j;
	
	for(k=0;k<7;k++)
	{
		for(i=0;i<21;i++)
		{
			for(j=0;j<14;j++)
			_nop_();
		}
	}
}	
//--------------------------------------------------------------------------
void main()
{
	IR_OUT=1;
	while(1)
		NEC_IR_Simulation(0x0b);
}

⌨️ 快捷键说明

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