使用AT89S51单片机制作红外遥控器原理与代码

5星 · 超过95%的资源 需积分: 10 214 下载量 130 浏览量 更新于2024-11-17 收藏 127KB DOC 举报
"这篇资源主要介绍了如何使用AT89S51单片机制作红外电视遥控器,包括硬件原理图和C语言程序代码。" 在红外遥控系统中,AT89S51单片机被用作核心处理器,用于生成符合特定编码规则的红外信号。遥控器的红外发射部分采用脉冲幅度调制(PAM),即将编码后的串行数据通过38kHz的载频进行调制。这个过程涉及到两个关键点:脉宽调制(PWM)和38kHz的方波生成。 脉宽调制是表示二进制数据的主要方式。对于二进制的"0",其脉冲宽度为0.565ms,间隔0.56ms,周期1.125ms;而对于二进制的"1",脉冲宽度不变,但间隔增加到1.685ms,周期变为2.25ms。这些特定的脉宽组合形成了32位的二进制码,其中前16位是设备识别码,后16位是操作码和反码,用于确保数据传输的准确性。 在实际的红外发射过程中,发射器首先发送一个9ms的起始码,然后是4.5ms的停止码,紧接着是具体的32位遥控编码。这个编码序列会通过红外发射二极管以38kHz的频率进行调制,产生红外光束。 在提供的C语言程序中,可以看到以下几个关键部分: 1. 定义了几个局部变量,如`OP`用于控制红外发射管的开关,`count`和`endcount`作为延时计数器,`flag`作为发送标志。 2. `SendIRdata`函数可能是用于发送红外数据的核心函数,它接收一个字符型参数`p_irdata`,可能是包含编码信息的数据。 3. `delay`函数应该是实现微秒级延迟的函数,这对于精确控制脉冲宽度和间隔至关重要。 4. `main`函数初始化了相关寄存器,设置了中断允许,并设定了时器0和1为16位模式1,这通常用于生成定时脉冲。 整个系统的工作流程可能如下:用户按下遥控器的按键,对应的键值被编码并存储在`iraddr1`和`iraddr2`中。然后,`SendIRdata`函数会被调用,将这些编码数据转换成上述脉冲序列,通过控制`OP`状态来开启或关闭红外发射二极管,从而发送38kHz的红外信号。 接收端通常使用像TL0038这样的红外接收器,当检测到38kHz的信号时,其输出端会变为低电平,从而可以进一步解码并执行相应的操作。 这个资源提供了基于AT89S51单片机的红外发射器设计基础,包括硬件电路原理和C语言编程实例,对于理解和构建红外遥控系统非常有帮助。