1 / 59
文档名称:

红外遥控器解码程序.doc

格式:doc   大小:585KB   页数:59
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

红外遥控器解码程序.doc

上传人:allap 2016/9/2 文件大小:585 KB

下载得到文件列表

红外遥控器解码程序.doc

文档介绍

文档介绍:... 红外遥控解码实验一. 实验目的 1. 了解红外遥控编码并用单片机捕捉信号及解码 2. 熟悉 LCD1602 的驱动. 二. 红外遥控器编码遥控器编码分好几种,常见的 32 位编码码和 42 位编码码,目前我手中遥控器就是 42 位编码,如图 1 所示,当有按键时就会产一个 低电平和 高电平的起始码,紧接着是 26 位系统码,此系统码能区别不同的电器设备,防止不同机种遥控码互相干扰,接下来是 8 位数据码和 8 位数据反码, 间隔 23ms 的高电平后,再发一个与启始码完全一样的结束码本文来自电子工程师之家:?tid=5893 以脉宽为 、间隔 、周期为 的组合表示二进制的“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 char x; for(x=y;x>0;x--); }. void delay_ms(uint z)// 延时子程序 1ms { uint x,y; for(x=z;x>0;x--) for(y=113;y>0;y--); } void init(void)///// 初始化{ ir=1; // 红外端口写 1 led_cs=0; // 关闭 LED EA=1; // 开总中断 TMOD=0x02; // 定时器 0 ,模式 2,8 位自动装载模式