红外遥控器与红外一体化接收头仿真:带程序实现

红外遥控器+红外一体化接收头部分的仿真 带程序 红外线编码是数据传输和家用电器遥控常用的一种通讯方法,其实质是一种脉宽调制的串行通讯。 家电遥控中常用的红外线编码电路有μPD6121G型HT622型和7461型等。 这里就以这些电路的编码格式来仿真怎样使用单片机的捕获中断功能来实现其解码。 红外线通讯的发送部分主要是把待发送的数据转换成一定格式的脉冲,然后驱动红外发光管向外发送数据。 接收部分则是完成红外线的接收、放大、解调,还原成同步发射格式相同(但高、低电位刚好相反的脉冲信号)。 这些工作通常由一体化的接收头来完成,主要输出TTL兼容电平。 最后通过解码把脉冲信号转换成数据,从而实现数据的传输。 本单元就是来完成一体化接收头接受到的红外遥控器编码后的输出数据,所以只要单片机完成本单元的解码任务,并成功实现之后,只要将IR引脚接上红外接收头之后就可以实现红外遥控的功能了。 这是我积累前人经验和自己实践的成果,并且已经有硬件的成功案例,并非只是理论.

大家好,今天咱们来聊聊红外遥控器和红外一体化接收头部分的仿真,还会带上相关程序,让大家更直观地理解其中的原理。

红外遥控器+红外一体化接收头部分的仿真 带程序 红外线编码是数据传输和家用电器遥控常用的一种通讯方法,其实质是一种脉宽调制的串行通讯。 家电遥控中常用的红外线编码电路有μPD6121G型HT622型和7461型等。 这里就以这些电路的编码格式来仿真怎样使用单片机的捕获中断功能来实现其解码。 红外线通讯的发送部分主要是把待发送的数据转换成一定格式的脉冲,然后驱动红外发光管向外发送数据。 接收部分则是完成红外线的接收、放大、解调,还原成同步发射格式相同(但高、低电位刚好相反的脉冲信号)。 这些工作通常由一体化的接收头来完成,主要输出TTL兼容电平。 最后通过解码把脉冲信号转换成数据,从而实现数据的传输。 本单元就是来完成一体化接收头接受到的红外遥控器编码后的输出数据,所以只要单片机完成本单元的解码任务,并成功实现之后,只要将IR引脚接上红外接收头之后就可以实现红外遥控的功能了。 这是我积累前人经验和自己实践的成果,并且已经有硬件的成功案例,并非只是理论.

红外线编码在数据传输和家用电器遥控领域可是相当常用的一种通讯方法。其实它本质上就是一种脉宽调制的串行通讯。在家电遥控里,有不少常用的红外线编码电路,像μPD6121G型、HT622型和7461型等。咱们就以这些电路的编码格式为基础,来仿真一下怎样利用单片机的捕获中断功能实现解码。

红外线通讯原理

红外线通讯分为发送和接收两部分。发送部分的工作是把待发送的数据转换成特定格式的脉冲,然后驱动红外发光管将数据向外发送。接收部分则要完成红外线的接收、放大、解调,最后还原成和同步发射格式相同,但高、低电位刚好相反的脉冲信号。这些工作一般由一体化的接收头来完成,它主要输出TTL兼容电平。最后再通过解码把脉冲信号转换成数据,这样就实现了数据的传输。

本单元任务

咱们这个单元的主要任务就是处理一体化接收头接收到的红外遥控器编码后的输出数据。只要单片机完成解码任务并且成功实现,之后把IR引脚接上红外接收头,就能实现红外遥控的功能啦。这可是我积累前人经验再加上自己实践的成果,而且已经有硬件成功案例,可不是纸上谈兵哦!

代码实现与分析

下面是一段简单的基于51单片机的代码示例,用于实现红外解码:

#include <reg51.h>

sbit IR=P3^2;  // 定义红外接收引脚

unsigned int time;  // 用于记录脉冲时间
unsigned char code_data[4];  // 存储解码后的数据
unsigned char i,j;

// 外部中断0服务函数
void ex0() interrupt 0 {
    time = TH0 * 256 + TL0;  // 读取定时器0的值
    TH0 = 0;
    TL0 = 0;  // 定时器0清零
    // 这里可以根据时间判断是引导码、数据码等
    if (time > 10000 && time < 13000) {  // 判断引导码
        i = 0;
        j = 0;
    } else if (time > 500 && time < 700) {  // 判断数据0
        code_data[i] = code_data[i] >> 1;
    } else if (time > 1400 && time < 1600) {  // 判断数据1
        code_data[i] = (code_data[i] >> 1) | 0x80;
    }
    j++;
    if (j == 8) {
        i++;
        j = 0;
    }
}

void main() {
    TMOD = 0x01;  // 定时器0工作在模式1
    TH0 = 0;
    TL0 = 0;  // 定时器0初始化
    IT0 = 1;  // 外部中断0下降沿触发
    EX0 = 1;  // 使能外部中断0
    EA = 1;  // 全局中断使能
    TR0 = 1;  // 启动定时器0
    while(1) {
        // 可以在这里处理解码后的数据
        if (i == 4) {
            // 解码完成,处理数据
            // 例如可以将数据显示在数码管上
            i = 0;
        }
    }
}

代码分析

  • sbit IR=P3^2;:定义了红外接收引脚,这里我们把它接到了P3.2口。
  • unsigned int time;:用于记录脉冲的时间,通过定时器0来测量。
  • unsigned char code_data[4];:用来存储解码后的数据,一般红外遥控编码会有4个字节的数据。
  • 外部中断0服务函数ex0():当红外接收引脚有下降沿信号时,会触发这个中断。在中断里,我们先读取定时器0的值,也就是脉冲的时间。然后根据时间来判断是引导码、数据0还是数据1。引导码的时间范围大概在10000 - 13000个定时器计数,数据0的时间在500 - 700,数据1的时间在1400 - 1600。每接收8位数据就存到一个字节里。
  • main()函数:初始化定时器0、外部中断0和全局中断,然后启动定时器0。在主循环里,当i等于4时,表示4个字节的数据都接收完了,就可以对解码后的数据进行处理了。

通过这样的仿真和代码实现,我们就能更好地理解红外遥控器和红外一体化接收头的工作原理啦。希望这篇文章能对大家有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值