Arduino红外解码程序By乌龟

Arduino红外解码程序By乌龟
Arduino红外解码程序By乌龟

Arduino 红外解码程序

——By 乌龟

我上网找过很多红外解码的程序,都看起来挺麻烦的。后来才发现原来早有人编好了红外编码解码的函数库了。在此感谢极客工坊的弘毅大神,还有编写这个库的那位大神。

详细资料在:https://www.360docs.net/doc/121013176.html,/一个台湾人的blog,大陆需翻墙才能看到,里面关于红外解码还有发射红外信号写的非常详细,还有相关代码,有需要的可以翻墙看看,随便找个在线代理就可以了。

关于红外编码解码的原理网上太多了,我就不写在这了。直入正题!

首先,arduino IDE本来就有红外线IRremote的函数库,没有的可以去官网下。但是arduino1.0版本的不能直接用这个函数库(一开始还把我搞糊涂了,自带的IRremote 里面的Example都不能编译成功),需要改点东西。

首先进入arduino文件夹,然后进入libraries文件夹,然后进入IRremote文件夹,修改IRremoteInt.h 里面的这行:

#include

改成这样子:

#if ARDUINO >= 100

#include

#else

#include

#endif

改完之後,不管是Arduino 1.0 或Arduino-0023 甚至更早期的版本应该都可以work。

然后就是解码程序,我直接引用blog里面的。

#include

int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11

IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号

decode_results results; //解码结果放在decode_results构造的对象results里void setup()

{

Serial.begin(9600);

irrecv.enableIRIn(); // 启动红外解码

}

void loop() {

if (irrecv.decode(&results)) { // 解码成功,收到一组红外线信号Serial.print("irCode: ");

Serial.print(results.value, HEX); // 输出红外线解码结果(十六进制)

//results.value 是unsigned long型,头文件有介绍Serial.print(", bits: ");

Serial.println(results.bits); // 红外线码元位数

irrecv.resume();

}

}

原理介绍:irrecv.enableIRIn()启动红外解码后,这时候IRrecv对象会在后台接收红外线信号。接着就可以利用decode()函数持续检查,看看有没有解码成功。irrecv.decode(&results) 解码成功,这个函数会返回true,并把结果放在results 里面,在解码一个红外线信号之后,要运行resume()函数,这样才会持续接收下一组信号。

可以先利用这个程序解析出所使用遥控的编码,然后根据所得到的编码,修改程序实现所需的功能。解析出的编码数值是unsigned long,注意一下,在判决的时候用0xFFA25D判定是否是某个按键。最后面附上我写的程序。

出现FFFFFFFF应该是按键码之后出现的重复码,这个可以通过判断语句

if(results.value != (-1))去掉,也有的解码出来是0,或者其他的,这个就自己解决吧。

最后附上本人写的程序

#include

int RECV_PIN = 11; //红外线接收器OUTPUT端接在pin 11

IRrecv irrecv(RECV_PIN); // 定义IRrecv 对象来接收红外线信号

decode_results results; //解码结果放在decode_results构造的对象results里void irdisplay(unsigned long value) // 按下按键后,显示本人遥控对应的按键{

switch(value){ //判定按下的是哪个按键

case 0xFFA25D: Serial.println("CH-");break;

case 0xFF629D: Serial.println("CH");break;

case 0xFFE21D: Serial.println("CH+");break;

case 0xFF22DD: Serial.println("PREV");break;

case 0xFF02FD: Serial.println("NEXT");break;

case 0XFFC23D: Serial.println("PLAY/PAUSE");break;

case 0xFFE01F: Serial.println("-");break;

case 0xFFA857: Serial.println("+");break;

case 0xFF906F: Serial.println("EQ");break;

case 0xFF6897: Serial.println("0");break;

case 0xFF9867: Serial.println("100+");break;

case 0xFFB04F: Serial.println("200+");break;

case 0xFF30CF: Serial.println("1");break;

case 0xFF18E7: Serial.println("2");break;

case 0xFF7A85: Serial.println("3");break;

case 0xFF10EF: Serial.println("4");break;

case 0xFF38C7: Serial.println("5");break;

case 0xFF5AA5: Serial.println("6");break;

case 0xFF42BD: Serial.println("7");break;

case 0xFF4AB5: Serial.println("8");break;

case 0xFF52AD: Serial.println("9");break;

}

}

void setup()

{

Serial.begin(9600);

irrecv.enableIRIn(); //启动红外解码

}

void loop() {

if (irrecv.decode(&results)) { //解码成功,收到一组红外线信号

/* if(results.value != (-1)){

Serial.print("irCode: ");

Serial.print(results.value, HEX); //输出红外线解码结果(十六进制)

//results.value 是unsigned long型,头文件有介绍

Serial.print(", bits: ");

Serial.println(results.bits);} // 红外线码元位数*/

irdisplay(results.value);

irrecv.resume();

}

}

写入后按下按键,串口显示对应按键

基于51单片机的红外遥控器解码设计论文

第1章红外解码系统分析 第1节设计要求 整个控制系统的设计要求:被控设备的控制实时反应,从接收信号到信号处理及对设备控制反映时间应小于1s;整个系统的抗干扰能力强,防止误动作;整个系统的安装、操作简单,维护方便;成本低。 红外载波、编码电路设计要求:单片机定时器精确产生38KHz红外载波;根据控制系统要求能对红外控制指令信号精确编码并迅速发送。 红外解码电路设计要求:精确接收红外信号,并对所接收信号进行解码、放大、整形、解调等处理,最后输出TTL电平信号;对非红外光及边缘红外光抗干扰能力强。 设备扩展模块设计要求:直流控制交流;抗干扰能力强;反应迅速不产生误动作;能承受大电流冲击。 第2节总体设计方案 2.1 方案论证 驱动和开关 方案一:采用晶闸管直接驱动。 其优点是体积小,电路简单,外围元件少。但控制电流小,大电流晶闸管成本高,并且隔离性能差。 方案二:采用三极管驱动继电器。 其体积大,外围元件多。优点是控制电流大,隔离性能好。 根据实际情况,拟采用方案二。 2.2 总体设计框图 经过上述方案的分析选择,得出系统硬件由以下几部分组成:电视红外遥控器,51单片机最小系统,接收放大于一体集成红外接收头,1602液晶显示驱动电路。 整体设计思路为:根据扫描到不同的按键值转至相对应的ROM表读取数据。确认设备及菜单选择键后AT89S2将从ROM读取出来的值,按照数据处理要求从P2.5输出控制脉冲和T0产生的38KHz的载波(周期是26.3μs)进行调制,经NPN三极管对信号放大驱动红外发光管将控制信号发送出去。红外数据接收则是采用HS0038一体化红外接收头,内部集成红外接收、数据采集、解码的功能,只要在接收端INT0检测头信号低电平的到来,就可完成对整个串行的信号进行分析得出当前控制指令的功能。然后根据所得的指令去操作相应的用电器件工作,如图1-1所示。

红外遥控信号的解码

红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成。应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图1 红外线遥控系统框图 2 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、V CD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。

图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反) 上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。 图3 遥控信号编码波形图 UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。 图4 遥控连发信号波形 当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个引导码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据

基于单片机的红外解码.温度及液晶显示

中国矿业大学徐海学院 技能考核培训 姓名:顾嘉诚学号: 22110818 专业:信息11-2班 题目:基于单片机的红外解码.温度及液晶显示专题:红外解码 指导教师:宥鹏老师翟晓东老师 设计地点:电工电子实验室 时间: 2014 年 4 月

通信系统综合设计训练任务书 学生姓名顾嘉诚专业年级信息11-2班学号22110818 设计日期:2014年4 月5日至2014 年4 月10 日 同组成员:姜怀修,刘剑桥,顾嘉诚,彭传锁,何子豪,王业飞 设计题目: 基于单片机的红外无线控制 设计专题题目: 红外解码 设计主要内容和要求: 1.主要内容: 2. 单片机内部结构 红外遥控解码 C语言程序设 Ds18b20的使用 Lcd1602的使用 2. 功能扩展要求 环境温度液晶显示 指导教师签字:

目录 正文 (5) 1.概述 (5) 1.1功能描述 (5) 1.2单片机资源 (5) 2.1管脚图 (5) 3.1. 使用资源 (5) 2.原理篇 (6) 2.1红外发送及接收 (6) 2.1.1红外接收概述 (6) 2.1.2硬件及原理图 (7) 2.1.3红外中断接收部分程序 (8) 2.2温度原理 (9) 2.2.1 DS18B20 的主要特性 (9) 2.2.2原理图与硬件 (10) 2.2.3 DS18B20时序和程序 (10) 2.3 QC1602A (12) 2.3.1 1602外部结构及管脚说明 (12) 2.3.2 写命令/数据时序与部分程序 (13) 3.效果图 (15) 4.软件篇 (15) 4.1程序框图 (15) 4.1.1 Main函数 (15) 4.1.2 中断 (16) 4.1.3 60ms定时中断 (16) 4.2 完整程序 (16) 4.2.1 Project.c文件 (16) 4.2.2 onewire.c 文件 (23) 5.参考文献 (26)

最简单详细的红外解码程序

#include //包含头文件名 sbit IRIN=P3^2; //定义红外接收头的外部接口,即外部中断0 sbit BEEP=P1^5; //定义蜂鸣器接口,我的在P1^5 unsigned char IRCOM[7]; //定义数组,用来存储红外接收到的数据 void delay(unsigned char x) { //延时子程序unsigned char i; //延时约x*0.14ms while(x--) //不同遥控器应设置不同的参数

{for(i=0;i<13;i++){}} //参数的选择咱们先不管,先看这个 } void beep() { unsigned char i; //蜂鸣器发声子程序 for(i=0;i<100;i++) { delay(4); //这个得看你的蜂鸣器内部是否有振荡源 BEEP=~BEEP; } //如果没有振荡源就应该输入脉冲信号 BEEP=1; }

void IR_IN() interrupt 0 using 0 //外部中断0程序 { unsigned char j,k,n=0; //先定义变量,记住n=0 EX0=0; //禁止中断,以免再次进入中断 delay(15); //延时0.14ms*15=2.1ms if(IRIN==1) //如果在这期间有高电平说明 { //信号不是来自遥控的,返回主程序 EX0=1; return; } while(!IRIN){delay(1);} //死循环,等待9ms前导低电平信号的结束for(j=0;j<4;j++) //一共有4组数据

红外线遥控系统原理及软件解码实例

红外线遥控系统原理及软件解码实例 简介:红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功 关键字:红外 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1、红外遥控系统 通用红外遥控系统由发射和接收两大部分组成。应用编解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED 红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图1 红外线遥控系统框图 2 、遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125 ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25 ms的组合表示二进制的“1”,其波形如图2所示。 图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反)

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。 图3 遥控信号编码波形图 UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。U PD6121G最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108 ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。 图4 遥控连发信号波形 当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个引导码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8 位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码(2.25ms)组成。 图5 引导码图6连发码 3 、遥控信号接收 接收电路可以使用一种集红外线接收和放大于一体的一体化红外线接收器,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。 接收器对外只有3个引脚:Out、GND、Vcc与单片机接口非常方便,如图7所示。

红外遥控原理及解码程序

红外遥控系统原理及单片机 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成。应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 图1 红外线遥控系统框图 2 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC 的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周

期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。 图2 遥控码的“0”和“1” (注:所有波形为接收端的与发射相反)上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3示。 图3 遥控信号编码波形图 UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。

红外解码程序详解

//此程序为网上下载后修改,要弄懂的话,可以去看看HT6221的时序图。当然也欢迎在这里留言。 ///C51的红外解码程序,可以根据需要自己修改: //11.0592Mhz #include //根据自己的接线来改 sbit IRIN = P3^2; //红外接收器数据线 sbit led = P3^7; //指示灯 //////////////////////////////////////////// //定义数组IRCOM,分别装解码后得到的数据 //IRCOM[0] 低8位地址码 //IRCOM[1] 高8位地址码 //IRCOM[2] 8位数据码 //IRCOM[3] 8位数据码的反码 ///////////////////////////////////////////// #define uchar unsigned char #define uint unsigned int uchar IRCOM[4]=0; bit flag=0; /********************/ void delay014ms(unsigned char x); //x*0.14MS void IR_init(void); void delay014ms(unsigned char x) //x*0.14MS STC10F04延时约0.15MS { unsigned char i; while(x--) { for (i = 0; i<125; i++) //13 {;} } } /////////////// //初始化 //////////// void IR_init(void) { EA=1; EX0=1; //允许总中断中断,使能 INT0 外部中断 IT0=1; //触发方式为脉冲负边沿触发 IRIN=1; //I/O口初始化

51单片机红外解码程序

51单片机红外解码程序 1、红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。 发射部分包括键盘矩阵、编码调制、LED红外发送器; 接收部分包括光、电转换放大器、解调、解码电路。 下面,我们将使用下面两种设备: 另外,使用51单片机进行解码。 2、原理图

从原理图看出,IR的data脚与51的PD2(P3.2)相连。 2、红外发射原理 要对红外遥控器所发的信号进行解码,必须先理解这些信号。 a) 波形 首先来看看,当我们按下遥控器时,红外发射器是发送了一个什么样的信号波形,如下图: 由上图所示,当一个键按下超过22ms,振荡器使芯片激活,将发射一组108ms 的编码脉冲(由位置1所示)。如果键按下超过108ms仍未松开,接下来发射的 代码(连发代码由位置3所示)将仅由起始码(9ms)和结束码(2.5ms)组成。 下面把位置1的波形放大:

由位置1的波形得知,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(用户编码)(9ms~18ms),高8位地址码(用户编码)(9ms~18ms),8位数据码(键值数据码)(9ms~18ms)和这8位数据的反码(键值数据码反码)(9ms~18ms)组成。 b) 编码格式 遥控器发射的信号由一串0和1的二进制代码组成.不同的芯片对0和1的编码有所不同。通常有曼彻斯特编码和脉冲宽度编码。XS-091遥控板的0和1采用PWM方法编码,即脉冲宽度调制。下图为一个发射波形对应的编码方法: 放大0和1的波形如下图: 这种编码具有以下特征:以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”。 3、红外接收原理 a) 波形 红外接收头将38K载波信号过虑,接收到的波形刚好与发射波形相反:

红外线遥控器解码程序

资料整理自互联网,版权归原作者! 欢迎访问 https://www.360docs.net/doc/121013176.html, 新势力单片机,嵌入式
专业技术论坛:https://www.360docs.net/doc/121013176.html,
红外线遥控器解码程序
Wang1jin 收藏. 交流论坛: https://www.360docs.net/doc/121013176.html,/ 推荐网站: https://www.360docs.net/doc/121013176.html, 个人博客: https://www.360docs.net/doc/121013176.html,
红外线遥控是目前使用最广泛的一种通信和遥控手段.由于红外线遥控装置具有体积小,功耗低,功能强,成本低等特点,因 而,继彩电,录像机之后,在录音机,音响设备,空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控.工业设备中, 在高压,辐射,有毒气体,粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰.
1 红外遥控系统
通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图 1 所示.发射部分 包括键盘矩阵,编码调制,LED 红外发送器;接收部分包括光,电转换放大器,解调,解码电路.
2 遥控发射器及其编码
遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明, 现以日本 NEC 的 uPD6121G 组成发射电路为例说明编码原理.当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码 也不同.这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为 0.565ms,间隔 0.56ms,周期为 1.125ms 的组合表示二进制的"0";以脉宽为 0.565ms, 间隔 1.685ms,周期为 2.25ms 的组合表示二进制的"1",其波形如图 2 所示.
个人博客:https://www.360docs.net/doc/121013176.html,
电子综合站点:https://www.360docs.net/doc/121013176.html,

红外遥控解码原理

红外线遥控器解码原理 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 2 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。 上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。

UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G 最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。 当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码 (9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。 代码格式(以接收代码为准,接收代码与发射代码反向) ①位定义 ②单发代码格式 ③连发代码格式 注:代码宽度算法: 16位地址码的最短宽度:1.12×16=18ms 16位地址码的最长宽度: 2.24ms×16=36ms 易知8位数据代码及其8位反代码的宽度和不变:(1.12ms+2.24ms)×8=27ms ∴32位代码的宽度为(18ms+27ms)~(36ms+27ms)

红外解码思路

红外解码 一,程序设计思路 第一步:首先要了解编码规则,既引导码,用户码和数据码的脉冲长度。 第二步:利用PCA计数器,设定初始值,得到溢出周期为固定的溢出中断,这样可以利用在溢出中断中计数来测量脉冲长度。 第三部:计算脉冲长度,进行数据解码,得到实际数据。

二,信号采集 第一:初始化PCA(计数器初值,外部触发中断,计数器溢出中断,工作始终选择) 第二:采集数据,由于红外编码为下降沿起始,所以使用下降沿外部触发中断,然后对PCA 计数器进行赋初值,这样可以保证在下降沿来临时,计数器刚好开始计数,这样溢出的次数更接近于脉冲宽度(在第二个下降沿来临时,可能计数器不溢出,这样的话就造成了脉冲宽度丢失。 第三:利用在溢出中断里的编制为进行解码,具体代码如下: sbit P_IR_RX = P1^1; //定义红外接收输入端口 bit B_IR_Sync; //已收到同步标志,接收到引导码的标志 unsigned char IR_BitCnt; //编码位数 unsigned char IR_UserH; //用户码(地址)高字节 unsigned char IR_UserL; //用户码(地址)低字节 unsigned char IR_data; //数据原码 unsigned char IR_DataShit; //数据反码 unsigned char Pulsecount; bit B_IrUserErr; //用户码错误标记 bit B_IR_Press; //遥控按下标记 unsigned char IR_code; //红外键码 extern unsigned char IR_SampleCnt; extern bit Up_Down_Flag_Enable; extern bit Down_INTIR;

单片机实现红外接收解码

单片机实现红外接收解码 摘要:接收到红外遥控器的脉冲波形,并通过解析其波形得到红外遥控器的相应解码,实习对相应设备的控制。本文详细接受红外遥控技术原理并如何通过C51单片机实现红外遥控。关键字:单片机,红外遥控,解码 1.引言 遥控器相信大家不会陌生,日常生活中会使用到各种各样的遥控器,比如电视机、DVD 机、空调、机顶盒甚至音响、热水器等都用到遥控器,其实红外技术已经走进与人们的生活并且与人们的生活息息相关了。 红外遥控器作为设备的输入控制具有操作简便、价格便宜等诸多好处。您可以根据您公司产品需要和遥控器提供商协商定制遥控器,包括遥控器键盘布局、每个按键的键码等。 遥控器键盘上每个按键的键码是一个小于256的一个数值,按键后通过遥控器红外管产生脉冲发送出去,红外接收器接收到脉冲后,对脉冲流进行分析,提取键码值,并按照键码值实现其遥控目的。 2.红外接收原理 红外遥控信号接收: 红外接收电路可以使用集成接收器,接收器包括红外接收管及信号处理IC,接收器对外只有三个引脚,一个接电源的Vcc脚、一个接地的GND脚、一个脉冲信号输出脚,当然脉冲信号输出脚直接接单片机的某个可以使用的IO脚就可以了。

3.脉冲波形分析: 每次按键,红外接收器这边会收到一串脉冲宽度不等的脉冲波形流,其脉冲流由35个脉冲波形构成: 前导码:第1个脉冲波形 用户码1:第2到第9个脉冲波形 用户码2:第10到第17个脉冲波形 键码:第18到第25个脉冲波形 键码反码:第26到第33个脉冲波形 连续按键脉冲:第34和第35个脉冲为结束脉冲(也即连续按键脉冲),在每次按键结束后会有两个结束脉冲,如果一直按键不放的话,会一直发送连续按键脉冲,并可以认为在收到10个连续按键脉冲后是下一个按键。 注意:不同的遥控器产生的用户码值可能不一样,笔者碰到两种不同的用户码:0x00,0xFF及0x04,0x7F。 脉冲流中有四种不同的脉冲波形宽度: 其中前导码脉宽为:40(4ms) < 脉冲宽度< 50(5ms) 连续按键脉宽为:21(2.1ms) < 脉冲宽度< 25(2.5ms) bit "0" 脉宽为:3(0.3ms) < 脉冲宽度< 7(0.7ms) bit "1" 脉宽为:14(1.4ms) < 脉冲宽度< 19(1.9ms) 在收到一串脉冲流后,就要对其进行分析,先要检测第一个脉冲波形是不是前导码,如果不是,则继续检测前导码,如果是则检测如下32个脉冲波形: 用户码1为1字节,由8个脉冲波形组成(其中一个脉冲波形表示字节中1 bit); 用户码2为1字节; 键值为1字节; 键值反码为1字节,键值反码为键值取反值。 先判断所收到用户码是否正确,如果不正确则丢弃此次所收键码,如果正确则利用键值反码取反与键值比较,判断收码是否正确,如果不正确则丢弃所收键码。 如下图所示:

红外解码数码管显示

基于STC89C54单片机设计的红外解码数码管显示 1.红外解码原理 红外遥控器发送数据时,是将二进制数据调制成一系列的脉冲信号红外发射管发射出去,红外载波为频率38KHz的方波,红外接收端在收到38KHz的载波信号时,会输出低电平,否则输出高电平,从而可以将“时断时续”的红外光信号解调成一定周期的连续方波信号,再经过1838一体化红外接收头解调便可以恢复出原数据信号。如图所示, 我们可以通过单片机的定时器给红外接收管接收的每个点电平计时,并把每个点电平的时间存起来。根据时间的不同来分辨是引导码、“0”还是“1”。下面是我做的实验原理图 上图式数码管显示原理图,下面是红外接收管与单片机的连接原理图。

注:上图的J27是和单片机的P3^2相连的。 程序中用到的定时器1、定时器0和外部中断0. 下面是实验的C语言程序: /*----------------------------------------------- 名称:遥控器红外解码数码管晶显示 论坛:无 编写:yang-baoan 日期:2011.10 修改:无 内容:按配套遥控器按键,液晶显示4组码值,分别是用户码用户码数据码数据反码 显示如下:

1E1E00FF ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外接口标志 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char Tab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char TempWei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /*------------------------------------------------

红外接收解码汇编

;遥控器控制显示123456789数据保持 ;*************************************************************************** ;* gehuiwy@https://www.360docs.net/doc/121013176.html, Create by :葛辉* ;*************************************************************************** REC_DATA EQU 20H ;数码管段选的数据存放在片内RAM 20H单元 REC_DATA1 EQU 21H ;数码管段选的数据存放在片内RAM 21H单元 ORG 0000H SJMP MAIN ORG 0003H ;外部中断0引脚链接红外接收头输出 LJMP INT0_SERVICE ORG 0030H MAIN: MOV IE,#10000001B ;外部中断使能,全局中断使能 MOV REC_DATA,#00000000B ;数码管灭 MOV REC_DATA,#7EH ;数码管亮 MOV REC_DATA1,#7EH ;数码管亮 MOV P1,#11111110B ;选中左边的数码管 MOV P3,#0FFH LOOP: LCALL DISPLAY ;MOV REC_DATA,#0FFH ;数码管亮 ;MOV P2,REC_DATA ;段选送P2,P2链接数码管驱动244的输入 SJMP LOOP ;循环显示 INT0_SERVICE: ;中断0服务程序 SETB P1.0 SETB P1.1 MOV R4,#8 ;8毫秒为高电平错误 SBA: MOV R5,#250 SBB: JB P3.2,SXB1 DJNZ R5,SBB DJNZ R4,SBA MOV R4,#2 JMP SBC SXB1: MOV R5,#5 SXB2: ;去掉20US的尖峰干扰信号 JNB P3.2,SBB DJNZ R5,SXB2

红外解码程序详解

红外遥控解码程序设计 ——————基于uPD6121红外编码制式 红外传感系统是目前应用最为广泛的遥控系统,一个红外遥控系统可分为发射和接收两部分组成,发射端称之为红外遥控器,一般由矩阵键盘,红外编码调制芯片和红外发射管组成;接收端用一体化红外接收头即可,这个东东内置光电放大器和解调部分,信号接收之后一般很微弱须放大后才可解码,为有效发射出去得先托付在载波上所以需经历调制、解调的过程,其实对于发射部分主要工作在于编码,而对于编码方式只有几种主流方式,而目前国内大部分均为uPD6121编码方式(日本NEC公司搞出来的。。),所以我们只须弄清楚这种编码的时序,即可写出万能的红外解码程序,只要是基于这种编码方式的遥控器(家里的电视、空调、电扇遥控器)都可以用该程序来解码(这点也充分证明了C语言的高移植性啊。。) 这种编码的格式其实很简单,开头是一个引导码,人家芯片在编码时将其设计成9ms的高电平和4.5ms的低电平,也就是说你必须跳过这段引导码之后才会接收到数据,第一个问题来了:为什么要加这段引导码?因为红外传感是非常容易受到干扰的,如果直接传送数据很可能并非发送端的信号,很可能来自其他辐射,后面设计程序时会遇到这个问题。所以我们在写程序时在引导码时可以加入检测代码,如果是引导码则继续接收,否则跳出。第二个问题就是:接收数据时我们用外部中断接收,这是考虑到CPU 的执行效率,如果你在主函数里接收数据,就好比CPU一直在问:你接收到数据没? 你接收到没?..很明显不靠谱,和串口通信一样,接收数据用中断这是经验,有利于单片机的执行效率。第三个要注意的就是红外接收端和编码发送的数据是反向的!这点很重要,我看很多资料没有写明这点,让很多童鞋疑惑不解,也就是说引导码编码时确实是9ms高电平和4.5ms 的低电平,但是到了接收端是9ms的低电平和4.5ms的高电平,所以我们在解码时就得注意引导码高电平出现的顺序。对于编码格式,引导码后接了4个字节的数据,前两个字节为用户码和用户反码,简单点说就是器件地址;后两字节为操作码和操作反码,就是我们真正需要的数据。图为发送端编码格式,注意接收到的已反向!

c单片机红外解码程序汇编版和c语言版

c单片机红外解码程序汇编版和c语言版 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

纯软件解码 --- 汇编版 利用程序判电平和时间进行解码,缺点是浪费系统软件资源;优点是对系统硬件要求稍低 ORG 0000H T0ZD BIT 20H.2 XH BIT P3.3 ;红外接收头数据接口 RS BIT P2.3 RW BIT P2.4 E BIT P2.5 BB BIT P3.6 ORG 0000H ; AJMP MAIN ORG 000BH ;T0中断入口 LJMP T0ZDCX ORG 0100H ;主程序首地址 MAIN: LCALL CSH MOV DPTR,#TAB ;总查表 SETB EA ;T0中断设定 SETB ET0 MOV TMOD,#01H DDXH: ;信号接收前准备 SETB P2.0 ;关信号指示灯 MOV P0,#0FFH CLR TR0 ;关T0中断 CLR T0ZD ;接收信号时间判断 MOV R5,#4 ;延时计数 MOV TH0,#00H MOV TL0,#00H ;================解码主要过程===========关键 ============================================================ JB XH,$ ;等待电平变低,解码从这开始 CLR P2.0 ;开信号指示灯,表示正在接收信号 MOV P0,#8EH SETB TR0 ;开T0中断 LCALL YS3MS JB XH,DDXH ;干扰检测 LCALL YS3MS

红外解码C语言程序

#include #define uchar unsigned char #define uint unsigned int sbit SM0038 = P3^3; sbit LED = P1^0; uchar data IRcode[4]; //定义一个4字节的数组用来存储代码 uchar CodeTemp,charsend,i,j,k; //编码字节缓存变量 /**********************************2us延时******************************/ void delay(uint k) { while(k --); } /**********************************************************/ void delay0_14MS(unsigned char x) //x*0.14MS { unsigned char i; while(x--) { for (i = 0; i<13; i++) {} } } /******************************外部中断1初始化**************************/ void Outside_Init(void) { EX1= 1;//开外部中断1 IT1 = 1;//负边沿触发 EA = 1; //开总中断 } /******************************中断处理**************************************/ void Outside_Int(void) interrupt 2 using 0 { uchar N = 0; EX1 = 0; delay(500);//延时1ms if(SM0038 == 1) { EX1 =1; return; } //确认IR信号出现 while(!SM0038); //跳过9ms低电平

红外编码和解码原理

一、编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如下图所示。 上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射。编码数据,载波,发射,接收解码如下图所示: UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,发射波形图如下图所示。 当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束

C红外解码程序

C红外解码程序Prepared on 21 November 2021

2007-01-3011:02:21 #include? #include? sfr?p0=0x80; sfr?p3=0xb0; sbit?p32=p3^2; unsignedchardm,i,j,k; unsignedchardataa[4];//定义4个数组,用来存储代码void?ds0_9ms(void) { unsignedcharj,k; for(j=18;j>0;j--) for(k=20;k>0;k--) } void?ds1ms(void) { unsignedchari,j; for(i=2;i>0;i--) for(j=230;j>0;j--) } void?ds4_5ms(void) { unsignedchari,j; for(i=10;i>0;i--) for(j=225;j>0;j--) } void?ds2s(void) {

unsignedchari,j,k; for(i=200;i>0;i--) for(j=200;j>0;j--) for(k=10;k>0;k--) } void?main() { IT0=1; EX0=1; EA=1; dm=0; ds2s(); p0=0; while(1); } voidt0(void)interrupt0using2//外部中断0的函数{ EA=0; for(k=0;k<10;k++) { ds0_9ms(); if(p32==1){k=10;break;} elseif(k==9) { while(p32==0); ds4_5ms(); for(i=0;i<4;i++) { for(j=1;j<=8;j++) {

红外解码方案

红外解码方案 1. 红外发射的原理 遥控器部分的工作原理较为简单,主要就是编码IC 通过三极管进行放大调变,然后将此电信号(脉冲波)经有红外发射管(940nm 波长)转变为光信号发射出去。现在国产遥控器的电路主要有:455kHz 晶振,编码IC ,放大三极管,发射管等主要几个电子原件组成; 通常使用38kHz 载波,这样可以提高红外线的抗干扰能力,避免大气中的红外线干扰。调制载波频率一般在30kHz 到60kHz 之间,大多数使用的是38kHz ,占空比1/3的方波,这是由发射端所使用的455kHz 晶振所决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455kH z÷12≈37.9kH z≈38kHz 。 2. 红外接收的原理 红外接收头内部结构主要由光电二极管+红外接收IC 组成,工作原理为:光 电二极管(俗称接收管)其接收到红外发射管发射出的光信号后转换为电信号(为 微安级的电流),此电信号输入到接收IC 内部经过放大--增益--滤波--解调变--整形还原,还原遥控器给出的原始编码,通过接收头信号输出脚输入到后面的代码 3. 几种编码格式 3.1 NEC 制 NEC 制的数据格式分为引导码、16位用户码(地址码)、8位数据码、8位数据反码构成。

用户码或数据码中的每一个位可以是位‘1’,也可以是位‘0’。区分‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式(PPM)(注意NEC每一位的长度不一样,1.125ms或者2.25ms)。 按键保持按下状态时每发送完整的一帧数据后,再发送重复码,再到按键被松开。此芯片用两种不同的重复码,当用户码的C0位为1时用一种,C0位为0时使用另一种。

简单的红外解码程序

简单的红外解码程序(不用中断)#ifndef __IR_H__ #define __IR_H__ #include #include "delay.h" #define uchar unsigned char//8位 #define uint unsigned int//16位 sbit IR_IN=P3^2;//信号接收 IR_JS();//无线接收程序 #endif #include "IR.h" uchar data dat_IR[3]; //写缓存 //==========红外接收程序================= IR_JS()// { uchar r1,r2,dat,dat1,dat2; if(IR_IN!=0){return 0;}//无信号退出 delay_ms(1); if(IR_IN!=0){return 0;}//干扰退出 r2=0; while(IR_IN ==0)//等高电平 { delay_ms(1);

r2++; } if(r2<5){return 0;}//检测是否有同步头// delay_ms(4);//跳过同步码的高电平 do{delay_100us(1);r2++;if(r2>20){return 0;}}//防卡死 while(IR_IN ==1);//开始解码 for(r1=0;r1<8;r1++)//接收8位数(系统码1) { r2=0; while(IR_IN ==0); delay_100us(6); dat=dat<<1; if(IR_IN ==1)dat=dat+1; //读数据位,接收的数据位放入retc中 do{delay_100us(1);r2++;if(r2>20){return 0;}}//防卡死 while(IR_IN ==1); } for(r1=0;r1<8;r1++)//接收8位数(系统码2) { r2=0; while(IR_IN ==0); delay_100us(6);// dat1=dat1<<1; if(IR_IN ==1)dat1=dat1+1; //读数据位,接收的数据位放入retc中 do{delay_100us(1);r2++;if(r2>20){return 0;}}//防卡死

相关文档
最新文档