#define IR_SEND P14
void Delay_Us(unsigned int timer)
{
_nop_();
while (--timer);
}
void Ir_Out_Frame(unsigned char dat)
{
unsigned char num = 0;
for (num=0; num<8; num++) //循环8次移位
{
IR_SEND=0;Delay_Us(560); //560us低
if(dat&0x01) //if为1
{
//输出1.65ms 高
IR_SEND=1;Delay_Us(1650);
}
else //否则
{
//输出0.56ms 高
IR_SEND=1;Delay_Us(560);
}
dat >>= 1; //右移一位
}
}
void Ir_Send(unsigned char addr,unsigned char dat)
{
//起始码,9ms低+4.5ms高
IR_SEND = 0; Delay_Us(9000);
IR_SEND = 1; Delay_Us(4500);
//1:560us低+1650us高;0:560us低+560us高
/*发送用户码和用户补码*/
Ir_Out_Frame(addr);
Ir_Out_Frame(~addr);
/*发送键值和键值补码*/
Ir_Out_Frame(dat);
Ir_Out_Frame(~dat);
/*发送结束码*/ //输出0.65ms低 //输出40ms高
IR_SEND = 0; Delay_Us(650);
IR_SEND = 1;
}
模拟NEC红外发射
最新推荐文章于 2022-11-29 16:55:01 发布