文档介绍:电子工程师之家
红外遥控解码实验
1. 了解红外遥控编码并用单片机捕捉信号及解码
2. 熟悉 LCD1602 的驱动
遥控器编码分好几种,常见的 32 位编码码和 42 位编码码,目前我手中遥控器就是 42 位编码,如图 1
所示,当有按键时就会产一个 低电平和 高电平的起始码,紧接着是 26 位系统码,此系
统码能区别不同的电器设备,防止不同机种遥控码互相干扰,接下来是 8 位数据码和 8 位数据反码,
间隔 23ms 的高电平后,再发一个与启始码完全一样的结束码
以脉宽为 、间隔 、周期为 的组合表示二进制的“0”;以脉宽为 、间隔
、周期为 的组合表示二进制的“1”,其波形如图 2 所示。
图 2
再回头看图 1,大家不难看出,图 1 是遥控器按键 1 的一串编码
一线工人
电子工程师之家
接收电咱我们使用一化红外接红外接收管 1838,不需要任何外接无件,就能完成从红外线接收到输出
与 TTL 电平信号兼容的所有工作,实物如图所示
电路图如下:
以上我们了解了红外遥控的编码及硬件连接,现在就对其进行解码,所谓解码就是能用单片机把以不
同宽度的脉冲区别开来,一种比较好思路就是计算两次下降沿间隔时间,当单片机外部中断 1 口有下
降沿时中断一次,并启动定时器,定时器定 50us,当下次下降沿到来时我们计算定时器中断的次数,这
样我们就能很好的区分不同宽度的脉冲了。
一线工人
电子工程师之家
大家可能已经迫不急待的要开始解码了,别急,我们先把注意事项先讲一下,实际上,我们红外接收头
收到的信号的是有毛刺的,放大后就如下图,所以在下降沿中断触发后,要做延时去抖处理
*************************************以下是完整解码程序********************************
/*********************************************
**项目: 红外遥控解码(EE01 学习板演示程序)
**作者:一线工人
**网站:电子工程师之家
**本程序适合 42 位码遥控器,即 26 位系统码,16 位
数据码,如:57L5,55K2,54B4,KD-29,55K8,5Z26A,
等型号的遥控器,转贴请保持代码的完整性
*********************************************/
#include<>
#define uint unsigned int
#define uchar unsigned char
sbit ir=P3^3;//红外端口
sbit dm=P1^4;//数码管段码控制位
sbit wm=P1^5;//数码管位码控制位
sbit led_cs=P1^6;//LED 控制位
sbit rs=P3^5;//1602 数据命令选择端
sbit en=P3^4;//1602 使能信号
一线工人
电子工程师之家
uchar num;
uchar key_code=0;//遥控键值
uchar new_code=0;//有无新按键
uint buf_key_code=0;//键值暂存
uchar key_bit_count=0;//键编码脉冲计数
uint count=0;//定时中断次数计数
uint buf_count=0;//定时中断计数暂存
mon_code_count=0;//前导码脉冲计数
uchar ir_status=0;//脉冲接收器所处的状态,0:无信号,1:系统码接收区,2:数据编码接收区
uchar code table[]="EE01 DEMO:IR";
uchar code table1[]="code:";
uchar code table2[]={'0','1','2','3','4','5','6','7','8','9',};
void delay_10us(unsigned char y)///延时子程序 10us
{
unsigned ch