红外遥控器按键编码测试

合集下载

红外遥控解码实验报告(3篇)

红外遥控解码实验报告(3篇)

第1篇一、实验目的本次实验旨在通过搭建红外遥控系统,了解红外遥控的基本原理,掌握红外遥控信号的编码和解码方法,并利用单片机实现对红外遥控信号的解码,实现对红外遥控器的控制。

二、实验原理红外遥控技术是一种无线通信技术,通过发射端发送特定编码的红外信号,接收端接收该信号并进行解码,从而实现对电器的控制。

红外遥控系统主要由发射端和接收端两部分组成。

1. 发射端:由按键矩阵、编码调制电路和红外发射器组成。

按键矩阵根据按键的不同产生不同的编码信号,编码调制电路将这些信号调制在38kHz的载波上,红外发射器将调制后的信号发射出去。

2. 接收端:由红外接收器、前置放大电路、解调电路和指令信号检出电路组成。

红外接收器接收发射端发射的红外信号,前置放大电路对信号进行放大,解调电路将38kHz的载波信号去除,指令信号检出电路从解调后的信号中提取出指令信号。

三、实验设备1. 红外遥控发射器2. 红外接收模块3. 单片机开发板4. 连接线5. 电源6. 红外遥控解码程序四、实验步骤1. 搭建红外遥控系统:将红外接收模块连接到单片机开发板的相应引脚上,确保连接正确无误。

2. 编写红外遥控解码程序:根据红外遥控协议,编写解码程序,实现对红外信号的解码。

3. 程序烧录与调试:将解码程序烧录到单片机中,连接电源,进行程序调试。

4. 测试与验证:使用红外遥控器对单片机进行控制,观察单片机是否能够正确解码红外信号,并实现相应的控制功能。

五、实验结果与分析1. 红外遥控系统搭建成功:通过连接红外接收模块和单片机开发板,成功搭建了红外遥控系统。

2. 解码程序编写与调试:根据红外遥控协议,编写解码程序,实现对红外信号的解码。

在调试过程中,通过观察单片机的输出,验证了程序的正确性。

3. 测试与验证:使用红外遥控器对单片机进行控制,观察单片机是否能够正确解码红外信号,并实现相应的控制功能。

实验结果表明,单片机能够成功解码红外信号,并实现红外遥控器的控制功能。

红外遥控解码实验报告

红外遥控解码实验报告
{
if(buf_count>40&&buf_count<70)
{
buf_count=0;
buf_key_code>>=1;
buf_key_code|=0x80;//收到1
key_bit_count++;//数据脉冲累加
}
else if(buf_count>12&&buf_count<32)//收到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',};
1.6实验步骤
将JP21的8个短接子全部用短接帽短接,使DG0-DG7与P2端口接通
将JP22的9个短接子全部用短睫毛短接,使A-DP与P0端口接通,VCC向数码管模块供电
将JP10的短接子用短接帽短接,使红外接头U16的数据线与P3.2端口接通。
将JP24的短接子用短接帽短接,禁止LCD1602显示功能,否则数码管将不能正常显示。
第一次使用遥控器要去下电池盖下的隔离胶片。
1.7实验电路原理分析
ME850选用T1838一体化红外接收头,接受来自红外遥控器的红外遥控信号。T1838集成红外接收二极管、放大、解调、整形等电路在同一封装上。T1838负责红外遥控信号的解调,将调制在38KHZ上的红外脉冲信号解调并倒相输入到单片机的P3.2引脚,由单片机进行高电平与低电平宽度的测量

常见红外遥控器编码与格式

常见红外遥控器编码与格式

电源和红外发射电路组成。

信号调制为脉冲串信号,通过红外发射管发射。

常用的有通过脉冲宽度来实现信号调制的脉红外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。

红外遥控系统一般由红外发射装置和红外接收设备两大部分组成。

红外发射装置又可由键盘电路、红外编码芯片、红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。

通常为了使信号能更好的被传输发送端将基带二进制宽调制(PWM )和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM )两种方法。

在同一个遥控电路中通常要使用实现不同的遥控功能或区分不同的机器类型,这样就要求信号按一定的编码传送,编码则会由编码芯片或电路完成。

对应于编码芯片通常会有相配对的解码芯片或包含解码模块的应用芯片。

在实际的产品设计或业余电子制作中,编码芯片并一定能完成我们要求的功能,这时我们就需要了解所使用的编码芯片到底是如何编码的。

只有知道编码方式,我们才可以使用单片机或数字电路去定制解码方案。

下面介绍的是笔者所收集整理的一些常用遥控编码芯片的编码方式和常用一体化接收芯片的引脚示意图。

在最后还用实例介绍M50560-001P 芯片的解码思路和应用实例程序的编写。

常用红外一体化接收头引脚示意uPD6121,uPD6122,PT2222,SC6121,HS6222,HS6221载波波形 使用455KHz 晶体,经内部分频电路,信号被调制在37.91KHz ,占空比为3分之1。

数据格式. 数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。

数据反码是数据码反相后的编码,编码时可用于对数据的纠错。

注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

使用455KHz 晶振时各代码所占的时间位定义 用户码或数据码中的每一个位可以是位‘1’,也可以是位‘0’。

区分‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM 。

红外遥控编程参考(单片机读取按键编码)

红外遥控编程参考(单片机读取按键编码)

程序可以用来查看每个遥控按键的编码,以便于开发利用遥控每一个按键。

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit en=P3^4;sbit rs=P3^5; //用于控制1602sbit rw=P3^6;sbit dula=P2^6;sbit wela=P2^7; //用于控制晶体管sbit IRIN=P3^2; //红外接收器数据线IO 口uchar IRCOM[4]=0;//定义数组IRCOM,分别装解码后得到的数据//IRCOM[0] 低8位地址码//IRCOM[1] 高8位地址码//IRCOM[2] 8位数据码//IRCOM[3] 8位数据码的反码uchar code table[]="MAKE BY HEIQISHI"; uchar code table1[]="The code is 0x";uchar code table2[]="0123456789abcdef";//////////////显示程序///////////////////void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=112;y>0;y--); //大约是1ms,因为单片机的时钟周期为11.0592mhz。

}void Write_com(uchar com){rs=0; //指令P0=com; //写指令函数delay(5);en=1;delay(5);en=0;}void Write_data(uchar dat){rs=1; //数据P0=dat; //写指令函数delay(5);en=1;delay(5);en=0;}void _1602Init(){wela=0;dula=0; //用于关闭晶体管,因为都是用P0en=0; //初始时使能为0rw=0;Write_com(0x38); //显示屏模式设置为1602方案Write_com(0x0c); //显示开关/光标设置Write_com(0x06);Write_com(0x01); //清屏Write_com(0x80); //指针置零}//////////////////////////////////////////////////////////////////////解码程序///////////////////void delay014ms(uchar x) //x*0.14MS STC10F04延时约0.15MS{uchar i;while(x--){for(i=0;i<15;i++) //13;}}//////////////初始化////////////void IR_init(void){EA=1;EX0=1; //允许总中断中断,使能INT0 外部中断IT0=1; //触发方式为脉冲负边沿触发IRIN=1; //I/O口初始化}////////////解码过程//////////////void IR_CODE(void) interrupt 0 //在外部中断子程序中解码{uchar j,k,N=0,shi,ge;EX0=0; //防止干扰delay014ms(15); //延时2.1msif (IRIN) //2.1ms能够检测出各种错误信号{EX0 =1;return;} //确认IR信号出现while(!IRIN); //等IR变为高电平,跳过9ms的前导低电平信号。

红外遥控器按键编码

红外遥控器按键编码
P4M1 = 0X00; P4M0 = 0XFF; P44 = 0; P50=0;
EA = 1;
//允许全局中断
EX0 = 1;
//允许 INT0 中断
PX0 = 0;
//INT0 的中断级别为低
IT0 = 0;
//设定 INT0 上升沿和下降沿都可以中断
/*初始化 T0:16 位自动重装填模式*/
{LED1=ON;LED2=OFF;LED3=OFF;LED4=OFF;LED5=OFF;}
if(temp==IR_2)
{LED1=OFF;LED2=ON;LED3=OFF;LED4=OFF;LED5=OFF;}
if(temp==IR_3)
{LED1=OFF;LED2=OFF;LED3=ON;LED4=OFF;LED5=OFF;}
break;
}
case IR_WordA: {
if((IR_Num%2)==0&&InfraredRayPin==1) {
TH0 = 0x00; TL0 = 0x00; TimeStart; break; } if((IR_Num%2)==1&&InfraredRayPin==0) { TimeStop; IR_Time=TH0; IR_Time<<=8; IR_Time|=TL0; IR_DataA<<=1; if(IR_Time<800) {
1
#define IR_WordB
2
#define IR_End
3
#define TimeStart (TR0=1)
#define TimeStop (TR0=0)
void InfraredRay_Init(void);

红外遥控实验

红外遥控实验

红外遥控实验结果1.通过遥控解码检测各按键键值:用户码:00EF数据码:1C 数据反码:E3 数据码:1D数据反码:E2数据码:1E数据反码:E1数据码:1F数据反码:E0数据码:00 数据反码:FF 数据码:01数据反码:FE数据码:02数据反码:FD数据码:03数据反码:FC数据码:04 数据反码:FB 数据码:05数据反码:FA数据码:06数据反码:F9数据码:07数据反码:F8数据码:08 数据反码:F7 数据码:09数据反码:F6数据码:0A数据反码:F5数据码:0B数据反码:F4数据码:0C 数据反码:F3 数据码:0D数据反码:F2(左前进)数据码:0E数据反码:F1(前进)数据码:0F数据反码:F0(右前进)数据码:10 数据反码:EF 数据码:11数据反码:EE(原地左转)数据码:12数据反码:ED数据码:13数据反码:EC(原地右转)数据码:14 数据反码:EB 数据码:15数据反码:EA(左后退)数据码:16数据反码:E9(后退)数据码:17数据反码:E8(右后退)数据码:18 数据反码:E7 数据码:19数据反码:E6数据码:1A数据反码:E5数据码:1B数据反码:E42.红色数据部分为功能键,对红色按键部分进行进行功能键定义,以下为各功能键定义: (1)功能键前进:set_speed(200,200); (2)功能键后退:set_speed(-200,200); (3)功能键原地左转:set_speed(100,-100); (4)功能键原地右转: set_speed(-100,100); (5)功能键左前进: set_speed(200,30); (6)功能键右前进: set_speed(30,200); (7)功能键左后退:set_speed(-200,-30);(8)功能键右后退:set_speed(-30,-200); 功能键实际速度测量:新遥控器:用户码:00FF功能键号 1 2 3 4 5 6 7 8 左轮速度(m|min ) 53 52 48 45 16 54 18 52.5 右轮速度 (m|min )535447.54853145618.5数据码:0C 数据反码:F3 (左前进) 数据码:18 数据反码:E7 (前进) 数据码:5E 数据反码:A1 (右前进) 数据码:08 数据反码:F7 (原地左转) 数据码:1C 数据反码:E3 数据码:5A 数据反码:A5 (原地右转)数据码:15 数据反码:BD (左后退)数据码:52 数据反码:AD (后退) 数据码:4A 数据反码:B5 (右后退)。

通过Arduino程序获取红外遥控器按键键值编码

通过Arduino程序获取红外遥控器按键键值编码

通过Arduino程序获取红外遥控器按键键值编码一、以如下遥控器举例:二、检测按键键值的Arduino程序:#include<IRremote.h>//红外遥控库文件网上有,亦可通过百度账号给我留言int REC_PIN=11; //接收端引脚IRrecvirrecv(REC_PIN);decode_results results;void setup(){Serial.begin(9600); //键值在串口通信窗口中查看irrecv.enableIRIn(); //红外接收端初始化}void loop(){if(irrecv.decode(&results)) //是否收到键值编码{Serial.println(results.value,HEX);//通过串口打印十六进制的键值delay(500);irrecv.resume(); //接收下一个值}}三、检测到的十六进制按键键值(在串口监视器中查看):四、Arduino的红外遥控器控制LED例程:include <IRremote.h>int RECV_PIN = 11;IRrecvirrecv(RECV_PIN);decode_results results;void setup(){Serial.begin(9600);irrecv.enableIRIn(); //初始化红外遥控PinMode(13,1); LED初始化,点亮}void loop() {if (irrecv.decode(&results)){if(results.value==0xFFA25D) //确认接收到按键(1)的编码,此码是预先读出来的按键编码。

{digitalWrite(13,1); //点亮LEDSerial.println("turn on LED"); //串口显示开灯}else if(results.value==0xFF629D) //确认接收到的按键(2)的编码{digitalWrite(13,0); //熄灭LEDSerial.println("turn off LED"); //串口显示关灯}irrecv.resume(); // 接收下一个值}}。

红外解码程序

红外解码程序

红外解码程序本篇介绍红外解码的原理和程序的写法。

下面来看一下,红外线是如何编码的。

下面来具体说一下,解码的原理,每按一下遥控器的一个按键,遥控器就会发出32个“0”“1”代码(当然是通过高低电平的占空比来判断是0还是1的),具体是0,1是如何编码的上面图片中有介绍,和一个引导码,引导码的作用是告诉处理器,接下来将要开始发送代码,我们在编写程序时,当检测到引导码时,就应该准备接受数据了。

32位代码中的前16位是用户识别码,不同的遥控器不相同,防止互相干扰的,后16是8为数据码,和8位数据反码。

接下来开始介绍如何解码程序的编写。

程序中用到了两个中断,一个是定时器中断,一个是外部中断。

定时器中断用来准确计时,判断接受的代码是0还是1,外部中断用来准确确定定电平到来的时刻,然后开始计时。

/*********************************************************函数功能:红外解码,用八位数码管显示红外线的按键码,便于红外控制测试环境:hot 51学习板编译环境:keil4整理人:张家越QQ:435835181整理时间:2011-04-03************************************************************/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code seg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0 x6f,0x77,0x7c,0x39,0x5E,0x79,0x71 };//0-f的段选码unsigned char code seg_we[]={0,1,2,3,4,5,6,7};uchar irtime,startflag,bitnum,irreceok;uchar irdata[33];uchar irprosok;uchar display[8];uchar ircode[8] ;sbit led1=P0^1;sbit led2=P0^2;/******************************************************************** ****函数功能:延时函数,在数码管显示时使用,不需要很精确********************************************************************* ****/void delay_50us(uint t){uchar j;for(;t>0;t--)for(j=19;j>0;j--);}/******************************************************************** ******函数的功能:定时器0的初始化********************************************************************* *****/void timer0init(){TMOD=0x02; //设置定时器工作在方式2TH0=0x00; //TL0=0x00; //设置定时器的初值ET0=1; //开定时器中断TR0=1; // 打开定时器EA=1; //开总中断}/******************************************************************** ****外部中断1的初始化********************************************************************* **/void int1init(){IT1=1; //设置触发方式为上升沿EX1=1; //开外部中断1EA=1; //开总中断}/******************************************************************** **定时器0的功能函数,每中断一次irtime++,用于计时********************************************************************* **/void timer0() interrupt 1{irtime++; //定时器中断一次irtime++,用于计时}/******************************************************************** ***外部中断0的处理函数,每当有低电平数据过来时,中断一次,(使用次中断的前提是,信号线必需接在外部中断0上面,也就是P3^2口),函数功能是,把信号从高低电平变成时间的代码放入irdata【】中********************************************************************* ***/void int1() interrupt 2{if(startflag){if(irtime>32) //一组代码检测完毕{bitnum=0;}irdata[bitnum]=irtime; //把检测到的时间送到数组irdata【】中去irtime=0;bitnum++;if(bitnum==33) //如果检测到bitnum=33,说明32位用户码已经检测完毕{bitnum=0; //将bitnum清零以便重新计数irreceok=1; //接收完毕标志位置一}}else //(此函数先进入else语句,跳过引导码的检测){startflag=1; //将开始标志位置一irtime=0; //设置时间初值为零irreceok=1; //接收完毕标志位置一}}/******************************************************************** *****函数功能:把irdata【】中的时间代码转换成二进制代码存放在ircode【】中********************************************************************* *****/void irpros(){uchar k=1,value,j,i;for(j=0;j<4;j++){for(i=0;i<8;i++){value=value>>1; //右移7次(第一次是00,相当于没有移位)if(irdata[k]>6) //循环8次{value=value|0x80;}k++;}ircode[j]=value;}irprosok=1;}/******************************************************************** ********函数的功能是:将ircode【】中的二进制代码转换成为16进制代码便于在数码管上显示******************************************************************* ********/void irwork(){display[0]=ircode[0]/16;display[1]=ircode[0]%16;display[2]=ircode[1]/16;display[3]=ircode[1]%16;display[4]=ircode[2]/16;display[5]=ircode[2]%16;display[6]=ircode[3]/16;display[7]=ircode[3]%16;}/******************************************************************** ****函数功能:用数码管显示解码结果********************************************************************* ***/void display1(){uchar i;for(i=0;i<8;i++){P2=seg_we[i];P0=seg_du[display[i]];delay_50us(40);}}void main(){timer0init(); //定时器初始化int1init(); //外部中断初始化while(1){if(irreceok) //判断数据接收完毕(数组中存储的是高低电平的时间){irpros(); //执行处理函数,将高低电平时间转化成16进制的0,1代码,存放在数组中irreceok=0; //标志清零}if(irprosok) //处理函数执行完毕,{irwork(); //将存储的16进制代码分离,便于数码管显示irprosok=0; //标志清零}display1();}}//在最后我再分析一下程序的编写思路,便于大家理解,一旦有按键按下,接受管接收到引导码,进入外部中断,并将高低电平的时间放入irdata【】数组中,接受完毕标志位置一,判断接受标志位,为1,进行处理函数,将高低电平转换成16进制数,处理标志位置一,判断处理标志位,为1,执行分离函数,将16进制数分离,便于数码管显示,分离完毕后显示。

红外遥控测试实验报告(3篇)

红外遥控测试实验报告(3篇)

第1篇一、实验目的1. 了解红外遥控的基本原理和组成。

2. 掌握红外遥控信号的发射和接收技术。

3. 评估红外遥控系统的性能,包括遥控距离、角度和抗干扰能力。

4. 分析实验过程中遇到的问题,并提出相应的解决方案。

二、实验原理红外遥控技术是一种无线通信技术,通过发射端发送红外信号,接收端接收并解析红外信号,从而实现对设备的控制。

红外遥控系统主要由发射端、传输介质和接收端组成。

三、实验器材1. 红外遥控器2. 红外接收模块3. 逻辑分析仪4. 万用表5. 电源6. 调试工具四、实验步骤1. 搭建实验平台:将红外遥控器和红外接收模块连接到逻辑分析仪,并将逻辑分析仪与电脑连接,以便实时观察和分析信号。

2. 测试遥控距离:在实验室内,保持红外遥控器和红外接收模块之间距离不变,逐步增加距离,记录不同距离下的遥控效果。

3. 测试遥控角度:在实验室内,保持红外遥控器和红外接收模块之间距离不变,改变红外遥控器与红外接收模块之间的角度,记录不同角度下的遥控效果。

4. 测试抗干扰能力:在实验室内,向红外遥控器和红外接收模块之间添加干扰信号,观察红外遥控系统的抗干扰能力。

五、实验结果与分析1. 遥控距离测试:在实验过程中,当红外遥控器和红外接收模块之间距离为5米时,遥控效果良好;当距离增加到10米时,遥控效果有所下降;当距离增加到15米时,遥控效果基本失效。

这表明红外遥控系统的遥控距离与发射端和接收端之间的距离有关,距离越远,遥控效果越差。

2. 遥控角度测试:在实验过程中,当红外遥控器和红外接收模块之间距离为5米时,在正前方角度范围内,遥控效果良好;当角度增加到45度时,遥控效果有所下降;当角度增加到90度时,遥控效果基本失效。

这表明红外遥控系统的遥控角度与发射端和接收端之间的角度有关,角度越大,遥控效果越差。

3. 抗干扰能力测试:在实验过程中,向红外遥控器和红外接收模块之间添加干扰信号,发现当干扰信号强度较高时,红外遥控系统的抗干扰能力较差,容易导致遥控失效。

通过Arduino程序获取红外遥控器按键键值编码

通过Arduino程序获取红外遥控器按键键值编码

通过Arduino程序获取红外遥控器按键键值编码一、以如下遥控器举例:二、检测按键键值的Arduino程序:#include<IRremote.h>//红外遥控库文件网上有,亦可通过百度账号给我留言int REC_PIN=11; //接收端引脚IRrecvirrecv(REC_PIN);decode_results results;void setup(){Serial.begin(9600); //键值在串口通信窗口中查看irrecv.enableIRIn(); //红外接收端初始化}void loop(){if(irrecv.decode(&results)) //是否收到键值编码{Serial.println(results.value,HEX);//通过串口打印十六进制的键值delay(500);irrecv.resume(); //接收下一个值}}三、检测到的十六进制按键键值(在串口监视器中查看):四、Arduino的红外遥控器控制LED例程:include <IRremote.h>int RECV_PIN = 11;IRrecvirrecv(RECV_PIN);decode_results results;void setup(){Serial.begin(9600);irrecv.enableIRIn(); //初始化红外遥控PinMode(13,1); LED初始化,点亮}void loop() {if (irrecv.decode(&results)){if(results.value==0xFFA25D) //确认接收到按键(1)的编码,此码是预先读出来的按键编码。

{digitalWrite(13,1); //点亮LEDSerial.println("turn on LED"); //串口显示开灯}else if(results.value==0xFF629D) //确认接收到的按键(2)的编码{digitalWrite(13,0); //熄灭LEDSerial.println("turn off LED"); //串口显示关灯}irrecv.resume(); // 接收下一个值}}。

检测遥控器的第三个8位 红外遥控使用

检测遥控器的第三个8位   红外遥控使用
读取遥控器编码的程序,按下按键后,通过单片机与电脑的连接,串口调试助手中可以显示出按键编码的后8位
//原子团He
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int //tc9012
uchar flag=0;//是否接到起始位标志 未接到为0 接到为1
uchar n=0;//rec[]中的数组定位
void timerinit();//定时器0初始化
void ruptinit();//外部中断0初始化
void tradata();//一帧数据的翻译 即把时间记录转换成0/1
void send();//把收到的数据发给上位机
}
}
{
uchar i;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
for(i=25;i<33;i++)//选择要发送出去的数据 这里是从25开始发送的
{
SBUF=rec[i];
while(!TI);
TI=0;
}
sendok=1;
}
////////////////////////////////////////////////////////////////////////
void delay()//1ms
}
delay();
if(sendok==1)//发送完成
{
flag=0;
traflag=0;

红外遥控器编码方法

红外遥控器编码方法

(PC)立即装入这一首地址,然后一条指令接一 条指令地执行此程序,每执行一步PC自动加l, 直到程序结束。
这种方法可以不把各种功能的编码程序搬 到RAM中来,而直接去ROM中调用。把RAM 腾出给控制过程的中间操作使用。
(4)处理 执行编码程序,得到相应控制功能的编码, 最后将编码转换成485信号后发送出去。 5结束语 本文着重介绍了红外遥控器系统的基本原 理及红外控制器的编码设计。这种编码方法在基 于AT89C51单片机的红外控制器的设计中得到 了应用,取得了良好的效果,应用前景广阔。 参考文献: 1.胡汉才.单片机原理及其接1:7技术.北京: 清华大学出版社. 2.记宗南.红外线遥控发生器的原理及应用. 国外电子元器件,1999.10. 3.聂诗良,李磊民.采用单片机发送并接收 红外遥控信号的方法.信息技术,2004.2. 作者简介: 王建跃,男(1982-),中国矿业大学信息与 电气工程学院2004级硕士研究生,专业为通信 与信息系统。主要研究方向为信息处理与传输。
系统码可以使用延时程序跳过去。但剩下这 部分码仍然较长,试了好多种方法。比如隔一位 取一位,隔两位取一位,隔三位取一位.隔一位取 两位等,采集的结果总是有重码。最后发现这些
万方数据
.240.
工矿自动化
码中是由三种码组构成,即1010、1011、1110。因 此可以用00、01、10来代替它们,原来的键值码
A2H
24H 9蠲 52H A9H i蛆 8AIi 4AH ASH 2AH 95H AAH
00H MO观 0001010010 1 4lI
00H V
1000101001 8^H
00H ^
0l∞101001 蛆H
00H 亮度+ 0101000000 50li

红外线遥控器nec编码方式课件

红外线遥控器nec编码方式课件
HT6221應用電路介紹
電源濾波,低頻耦合
紅外遙控器的常見異常與處理分析
半成品及成品測試要求 工廠測試碼值是否正確 工作電壓範圍 一定電壓下工作電流大小 靜態電流大小 發射距離 各個電子元器件是否正確 LCD顯示問題 其他部件等
檢修遙控器板的一般步驟
IC的正負極是否有電壓,電壓是否正常; 晶振是否起振,起振是兩個腳的電壓是一樣大小,還是一大一小,用萬用表的電壓檔檢查。 看重定電路元件是否有問題 IC是否正常發射:一般情況下發射腳(用8050的三極管為中間那個腳)沒有什麼電壓,正常發射應該有大於2伏的電。 看三極管能否正常工作,看C極在按鍵萬用表的指標是否擺動,擺動三極管正常; 看發射管是否正常:用萬用表看發射管正極是否有電壓,有電壓而不發碼,發射管壞,處於發射狀態的電壓會有變化; 看工作電流是否正常,靜態工作電流是否正常,大電流一般都為短路現象(有按鍵短路,可以用萬用表的歐姆檔檢查是否有短路現象)。
學習型遙控器的分類
一、固定碼式 ——對每種類別都預製一種解碼程式和發射程式 學習過程是: 學習信號的採集 判別信號的類別(屬於那一種解碼方案),編碼,存儲到EEPROM。 優點:這種學習型遙控器對硬體的要求相對簡單,對主控制器(主控IC)的工作頻率要求不太高,因為信號的發送頻率,DUTY,編碼方式等等都是已知的,只要對採集的信號進行判別即可;另外對記憶體的容量也比較低,因為它不存在壓縮的問題,按照最原始的最簡編碼進行存儲。 缺點:只能對已知的遙器(或者說已經收集到的信號)有效,對於新開發,新型的編碼格式就無能為力了。
紅外遙控器的常見協議分析
常用的红外线信号传输协议有 ITT 协议、 NEC 协议、 Nokia NRC 协议、 Sharp 协议、 Philips RC-5 协议、Philips RC-6协议,Philips RECS-80协议,以及 Sony SIRC 协议等。 協議組成 :一般由引導碼 ,用戶碼,資料碼,重複碼或資料碼的反碼和結束碼構成。 載波:常用的有33K,36K,36.6K,38K,40K,56K,無載波 占空比:常用的有1/3,1/2,不常用1/4 調製方式:脈寬調製,相位調製,脈衝位置調製

红外线遥控试验

红外线遥控试验
JB P3.7,SXB1
DJNZ R5,SBB
DJNZ R4,SBA
MOV R4,#2
JMP SBC
SXB1:
MOV R5,#5
SXB2: ;去掉20US的尖峰干扰信号
JNB P3.7,SBB
DJNZ R5,SXB2
JMP START
SBC:
MOV R5,#250
SB1:
T8: CJNE A,#19h,t9
MOV P0,#60H ;数码管显示9
T9: CJNE A,#1bh,t10
MOV P0,#28H ;数码管显示0
T10: CJNE A,#11h,t11
MOV P0,#30H ;数码管显示A
T11: CJNE A,#15h,t12
MOV P0,#25H ;数码管显示b
JMP START
SB3_1: ;监测4.5MS高电平,如5MS内不为低电平错误
MOV R5,#250
SB3_2:
JNB P3.7,SB4
DJNZ R5,SB3_2
DJNZ R4,SB3_1
JMP START
SB4: ;去掉20US的尖峰干扰信号
MOV R5,#5
SB4_1:
JB P3.7,SB3_2
S: ACALL YS1 ;调用882微秒延时子程序
JB P3.7,EXIT ;延时882微秒后判断P3.7脚是否出现高电平如果有就退出解码程序
DJNZ R6, S ;重复4次,目的是确认连发码的低电平信号波形
JNB P3.7, $ ;等待高电?
LCALL YS3
AJMP AA
BIJIAO: MOV A,1CH ;按键数值判断执

红外脉冲编码IC的键值和用户码测试和分析

红外脉冲编码IC的键值和用户码测试和分析

红外脉冲编码IC的键值和用户码测试和分析版权归作者所有,不得抄袭,转载请注明作者和出处,否则追究法律责任!作者:李海林2010.6月在网络上查找了一下红外脉冲编码IC的键值和用户码是怎样定义的,没找到一个清楚明了的资料,少许英文资料又不太看得懂,中文资料更少。

总之没找到一看就懂的资料。

我决定自己找一个红外脉冲编码IC,测试和分析它的键值和用户码。

找了一个DVD最常用的红外脉冲编码IC PT2222。

引脚定义图,图1:应用原电路图,图2:自己修改了的电路图,图3:下图是我用测码软件测得的64个遥控键值(注:实际应用电路没虚线内电路,测试的用户码是00 FF),图4:将IC的9脚接地,测试用户码仍然是00 FF,不过按键码值变了,按键值是在9脚接高电平测试时的16进制数值加16进制数80。

比如:00+80变成80,51+80变成D1,1B+80变成9B。

HT2222的9脚设置不同键值比较,图5:测试发现改变K1-K16的闭合状态(见图3),可以得到不同的用户码,但是遥控器按键值只有9脚状态有关,跟K1-K16没关系,由K1-K16组合的状态很多,大家可以计算一下看有多少。

下面测试的是部分状态,表1:闭合的开关测得的用户码(其它的都断开)全部断开00FFK1 01FEK2 02FDK3 04FBK4 08F7K5 10EF K6 20DF K7 40BF K8 807F K9 00FE K10 00FD K11 00FB K12 00F7 K13 00EF K14 00DF K15 00BF K16 007F K12 K4 08FF K9 K1 01FF K16 K8 80FF K12 K4 K16 087F K14 K6 K16 207F K12 K4 K16 K8 88FFK14 K6 K16 K8 A0FF………………………. ………………..……………………….. …………………下面说说我经过分析,计算,测试核对的用户码计算方法(开关闭合为1,断开为0)。

红外线遥控器(nec编码方式)

红外线遥控器(nec编码方式)
如果发现按键响应异常,需要对按键映射进行修正,确保按键功 能正常。
抗干扰优化
通过调整编码方式或增加滤波器等手段,增强遥控器的抗干扰能 力。
测试结果与结论
测试结果显示,该红外线遥控器 在有效范围内能够正常工作,按 键响应准确,抗干扰能力较强。
通过调试优化,进一步提高了遥 控器的性能和稳定性。
结论:该红外线遥控器符合预期 要求,可以用于实际应用中。
在NEC编码中,脉冲的宽度和间隔时间 被分为两种不同的比例,即1:2和1:1, 通过这两种比例的不同组合,可以表示 出0和1两种不同的二进制位。
当发送数据时,首先发送起始位,然 后是数据位,最后是停止位。起始位 是一个较长的脉冲和一个较短的间隔 时间,数据位由一系列的脉冲和间隔 时间组成,停止位是一个较短的脉冲 和一个较长的间隔时间。
红外线遥控器(NEC编码方式)
目 录
• 红外线遥控器简介 • NEC编码方式简介 • 红外线遥控器(NEC编码方式)的电路设计 • 红外线遥控器(NEC编码方式)的软件设计 • 红外线遥控器(NEC编码方式)的测试与调试
01 红外线遥控器简介
红外线遥控器的原理
红外线遥控器利用红外线作为信号传输介质,通过调制信号来控制设备的开关或功 能。
THANKS FOR WATCHING
感谢您的观看
01
采用NEC编码算法,将按键信息转换为红外线信号。
解码算法
02
将接收到的红外线信号解码为按键信息。
测试与调试
03
对编码和解码算法进行测试和调试,确保其正确性和稳定性。
05 红外线遥控器(NEC编码 方式)的测试与调试
测试方法
1 2
发射距离测试
测试遥控器在不同距离下的信号发射效果,确保 遥控器在有效范围内能够正常工作。

红外遥控器编码规则简要说明

红外遥控器编码规则简要说明

红外遥控器编码规则简要说明1、遥控器由红外遥控专用芯片PT2248作为编码及发送部分,PT2248最大可用作18路红外遥控系统的编码,其内部己集成了38kHz的红外载波振荡及相应的数字脉码调制电路,只需外接3×6的矩阵式按键、红外发光二极管及其驱动电路等少量元器件便可完成编码发送的功能。

发送部分电路图如下图所示:2、PT2248组成的十八路遥控发送器其编码规则如下:(1)设a为一个时间单位,时间长度是38kHz的16个时钟周期,即a=1÷38kHz×16=0.421ms编码是以串行形式发送的,在接收端(38kHz一体化红外接收解调器)接收到如下形式的1位的编码时分别表示“0”和“1”:1个a的低电平,3个a的高电平表示编码“0”3个a的低电平,1个a的高电平表示编码“1”编码以串行形式发送,接收端的一体化红外接收解调器输出波形如下图所示:(2)遥控器的每个按键编码由12位按以上编码规则所代表的“0”、“1”组成,时间长度为48a,当按下遥控器的7到18号单击按键,则以12位为一组(48a)发送两次编码,如下图所示:60a为自按下按键到发送编码的等待时间,80a是前后两次发送12位48a编码的高电平时间间隔。

7到18号单击按键无论发送端按键时间持续多长只发送一次这样形式的两组相同的12位编码。

(3)当按下1到6号连续按键时,编码按如下格式连续发送:(4)具体每个12位的串行编码规则如下:C1、C2、C3为用户可通过在遥控器发射电路中是否接入IN4148二极管决定其为“0”或“1”,这里取“111”,H、S1、S2为单击连续按键的标志位,相当于列坐标,D1至D6为按键输入码,相当于行坐标,低9位的按键编码如下表所示:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/chenjunglp
红外遥控器按键编码测试
#include <regx51.h> #define uchar unsigned char #define uint unsigned int #define IR_RE P3_2 bit k=0; 位,为 0 则为有效信号,为 1 则为无效 uchar date[4]={0,0,0,0}; 原码,反码,数据原码,反码 /*--------------------------延时 1ms 程子程序-----------Байду номын сангаас-----------*/ delay1000() { uchar i,j; i=5; do{j=95; do{j--;} while(j); i--; }while(i); } /*---------------------------延时 882us 子程序-----------------------*/ delay882() { uchar i,j; i=6; do{j=71; do{j--;} while(j); i--; }while(i); } /*--------------------------延时 2400us 程子程序-----------------------*/ delay2400() { uchar i,j; i=5; do{j=237; do{j--;} while(j); i--; }while(i);
//红外解码判断标志 //date 数组为存放地址
/chenjunglp
} //************************************************************** //************************************************************** /*----------------------------------------------------------*/ /*-----------------------红外解码程序(核心)-----------------*/ /*----------------------------------------------------------*/ void IR_decode() { uchar i,j; while(IR_RE==0); delay2400(); if(IR_RE==1) //延时 2.4ms 后如果是高 电平则是新码 { delay1000(); delay1000(); for(i=0;i<4;i++) { for(j=0;j<8;j++) { while(IR_RE==0); // 等待地址码第 1 位高电平到来 delay882(); //延时 882us 判断此时 引脚电平 ///CY=IR_RE; if(IR_RE==0) { date[i]>>=1; date[i]=date[i]|0x00; } else if(IR_RE==1) { delay1000(); date[i]>>=1; date[i]=date[i]|0x80; } } //1 位数据接收结束 } //32 位二进制码接收结 束 } } //*****************************************************************
/chenjunglp
//******************************************************************** /*------------------主要用于处理红外遥控键值--------------------*/ void jiema() { uchar i; k=0; for(i=0;i<8;i++) { delay1000(); if(IR_RE==1) //刚开始为 9ms 的引导码. { k=1; break; } } if(k==0) { IR_decode(); //如果接收到的是有效信号, 则调用解码程序 P2=~date[3]; delay2400(); delay2400(); delay2400(); } } //********************************************************************* //******************************** void main() { SP=0x60; while(1) { while(IR_RE==0) jiema(); } } //********************************************
//堆栈指针
相关文档
最新文档