红外遥控系统之二:GPIO模拟红外遥控发射

(1)NEC码的发射完整波形图诠释如下(接收与发射反向):

                   

 

(2)用一个GPIO口模拟IR,来输出到另一个接收端,程序如下:
void Simulate_IR_Init(void) //GPIO初始化
{
       MFT4MOD=0;
       PTDIR0_4=1;   //设置输出
       IR_LINE=1;   //默认为高,IR脚的默认电平也是为高
}
void  T_560US(void)
{
        BusWait(_560us); //使用一定的机器时间来耗时,精度可以用示波器来测出
}
void  T_1680US(void)   //3个560US
{
        T_560US();
        T_560US();
        T_560US();
}
void T_500US(void)
{
        BusWait(_500_us);
}
void  T_1MS(void)
{
        T_500US();
        T_500US(); 
}
void T_9MS(void)    //开始码
{
        T_1MS();
        T_1MS();
        T_1MS();
        T_1MS();
        T_1MS();
        T_1MS();
        T_1MS();
        T_1MS();
        T_1MS();
}
void T_4_5_MS(void)    //结果码
{
        T_1MS();
        T_1MS();
        T_1MS();
        T_1MS();
        T_500US();
}
void send_d0(void)       //发数据0,参照上述图示反向
{
        IR_LINE=0;
        T_560US();
        IR_LINE=1;
        T_560US();
}
void send_d1(void) //发数据1,参照上述图示反向
{
        IR_LINE=0;
        T_560US();
        IR_LINE=1;
        T_1680US();
}
void send_ir_byte(uchar tp)   //发送一个字节
{
        uchar i;
        for(i=0;i<8;i++)
        {
                if(tp&0x80)
                {
                       send_d1();
                }
                Else
                {
                       send_d0();
                }
                tp<<=1;      //从高位往低位发送
        }
}
void ir_start(void)         //NEC遥控码起始条件
{
        IR_LINE=0;
        T_9MS();
        IR_LINE=1;
        T_4_5_MS();
}
void send_ir_key(uchar key)    //发送单个遥控码的完整程序
{
        Simulate_IR_Init();          //初始化GPIO
        ir_start();                        //NEC起始


        send_ir_byte(IR_USER_CODE);    //客户码
        send_ir_byte(~IR_USER_CODE);   //客户码反码
        send_ir_byte(key);                      //数据码
        send_ir_byte(~key);                    //数据码反码


        IR_LINE=0;
        T_560US();   //为了跟最后一个数据位区别开来,如上图所示


        IR_LINE=1; //恢复默认的高
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值