📄 nec_ir.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 + -