[技术问答]

清晰解读红外遥控系统之二:GPIO模拟红外遥控发射

[复制链接]
1512|2
手机看帖
扫描二维码
随时随地手机跟帖
jerow|  楼主 | 2018-8-29 12:29 | 显示全部楼层
(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; //恢复默认的高
}

使用特权

评论回复
萧洛毫| | 2018-8-29 12:37 | 显示全部楼层
支持下,谢谢分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

520

帖子

3

粉丝