红外遥控器按键编码
- 格式:pdf
- 大小:224.49 KB
- 文档页数:7
电源和红外发射电路组成。
信号调制为脉冲串信号,通过红外发射管发射。
常用的有通过脉冲宽度来实现信号调制的脉红外线遥控器已被广泛使用在各种类型的家电产品上,它的出现给使用电器提供了很多的便利。
红外遥控系统一般由红外发射装置和红外接收设备两大部分组成。
红外发射装置又可由键盘电路、红外编码芯片、红外接收设备可由红外接收电路、红外解码芯片、电源和应用电路组成。
通常为了使信号能更好的被传输发送端将基带二进制宽调制(PWM )和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM )两种方法。
在同一个遥控电路中通常要使用实现不同的遥控功能或区分不同的机器类型,这样就要求信号按一定的编码传送,编码则会由编码芯片或电路完成。
对应于编码芯片通常会有相配对的解码芯片或包含解码模块的应用芯片。
在实际的产品设计或业余电子制作中,编码芯片并一定能完成我们要求的功能,这时我们就需要了解所使用的编码芯片到底是如何编码的。
只有知道编码方式,我们才可以使用单片机或数字电路去定制解码方案。
下面介绍的是笔者所收集整理的一些常用遥控编码芯片的编码方式和常用一体化接收芯片的引脚示意图。
在最后还用实例介绍M50560-001P 芯片的解码思路和应用实例程序的编写。
常用红外一体化接收头引脚示意uPD6121,uPD6122,PT2222,SC6121,HS6222,HS6221载波波形 使用455KHz 晶体,经内部分频电路,信号被调制在37.91KHz ,占空比为3分之1。
数据格式. 数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。
数据反码是数据码反相后的编码,编码时可用于对数据的纠错。
注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。
使用455KHz 晶振时各代码所占的时间位定义 用户码或数据码中的每一个位可以是位‘1’,也可以是位‘0’。
区分‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM 。
红外遥控器的原理红外遥控器的硬件电路红外遥控发射器由键盘矩阵、遥控专用集成电路、激励器和红外发光二极管组成。
遥控专用集成电路(通常是四位单片机)是发射系统的核心部分,其内部由振荡电路、定时电路、扫描信号发生器、键输入编码、指令译码器、用户码转换器、数码调制电路以及缓冲放大器等组成。
它能产生键位扫描脉冲信号,并能译出按键的键码,再经遥控指令编码器得到某键位的遥控指令(遥控编码脉冲),由38KHZ的载波进行脉冲幅度调制,载有遥控指令的调制信号激励红外二极管发出红外遥控信号。
红外遥控器发射硬件图当按下某个键时,发送电路就产生对应的编码,经过调制后,在输出端产生串行编码的脉冲。
这些脉冲经过驱动电路后由红外二极管发射出去。
当接收端接收到光信号后,先经过光放大器再经过专用解码芯片将其还原(解调)为串行编码脉冲,然后由接收电路按照编码解码的协议转换为相应的控制电平,最后由执行电路驱动开关等完成要求的操作。
遥控器里面是一个键盘编码器,每个按键对应一个编码,在把编码调制到一个高频信号上,其目的是为了降低发射的功率损耗;再把调制好的信号送给红外发光管把信号发送出去。
接收过程恰好与此相反,首先由红外接收管收到微弱的信号,经放大后解解调(把高频载波去掉),再进行解码,就可得到遥控器发过来的数据。
红外遥控器的红外编码遥控系统中传输的数据是一串编码脉冲,也就是一组连续的串行二进制码,只是该脉冲是用调制过的载波表示的。
对于一般的遥控系统,此串行码由红外接收头解调后,作为微控制器的遥控输入信号,由其内部CPU完成对遥控指令的解码,设计人员通常利用红外编码解码专用芯片或者单片机研制各种红外遥控系统,对各种电气设备进行遥控。
目前市场上有成百上千的编码方式并存,没有一个统一的国际标准,只是各芯片厂商事实上的标准,在自己的遥控器中使用自己指定的标准。
但由于早期的生产遥控芯片的厂家较少,主要集中在欧洲和日本,他们所使用的编码标准成为后续很多厂家遵循或者模仿的标准,也就是说很多厂家生产出自己的遥控器,但只是在脉冲宽度、数据位的个数上有一些变化,在整个码型结构上还是遵循的老厂家的标准。
目录1)MIT-C8D8 (40k)2) MIT-C8D8(33K)3)SC50560-001,003P 4)M504625)M50119P-016)M50119L7)RECS808)M30049)LC7464M10)LC7461-C1311)IRT1250C5D6-0112)Gemini-C6-A13)Gemini-C614) Gemini-C17(31.36K)-1 15)KONKA KK-Y26116)PD6121G-F17)DATA-6BIT18)Custum-6BIT19)M9148-120)SC3010 RC-521) M50560-1(40K)22) SC50560-B123)C50560-002P24)M50119P-0125)M50119P-126)M50119P27)IRT1250C5D6-0228)HTS-C5D6P29)Gemini-C1730)Gemini-C17 -231)data6bit-a32)data6bit-c33)X-Sat34)Philips RECS-8035)Philips RC-MM36)Philips RC-637)Philips RC-538)Sony SIRC39)Sharp40)Nokia NRC1741)NEC42)JVC43)ITT44)SAA3010 RC-5(36K)45)SAA3010 RC-5(38K)46)NEC2-E247) NEC-E348) RC-5x49) NEC1-X250) _pid:$006051) UPD1986C52) UPD1986C-A53) UPD1986C-C54) MV500-0155) MV500-0256) Zenith S101) MIT-C8D8(40K)MIT-C8D8(40K)是一种常见的红外遥控编码格式。
该格式出现在万能遥控器ZC-18A(600-917)中。
Features 基本特点1,8位地址码,8位数据码,结束码;2,脉宽调制方式(PWM);3,载波:40.0 KHZ;4,逻辑位时间长度是 1.215ms或2.436 ms。
目录1)MIT-C8D8 (40k)2) MIT-C8D8(33K)3)SC50560-001,003P 4)M504625)M50119P-016)M50119L7)RECS808)M30049)LC7464M10)LC7461-C1311)IRT1250C5D6-01 12)Gemini-C6-A13)Gemini-C614) Gemini-C17(31.36K)-1 15)KONKA KK-Y261 16)PD6121G-F17)DATA-6BIT18)Custum-6BIT19)M9148-120)SC3010 RC-521) M50560-1(40K)22) SC50560-B123)C50560-002P24)M50119P-0125)M50119P-126)M50119P27)IRT1250C5D6-02 28)HTS-C5D6P29)Gemini-C1730)Gemini-C17 -231)data6bit-a32)data6bit-c33)X-Sat34)Philips RECS-8035)Philips RC-MM36)Philips RC-637)Philips RC-538)Sony SIRC39)Sharp40)Nokia NRC1741)NEC42)JVC43)ITT44)SAA3010 RC-5(36K)45)SAA3010 RC-5(38K)46)NEC2-E247) NEC-E348) RC-5x49) NEC1-X250) _pid:$006051) UPD1986C52) UPD1986C-A53) UPD1986C-C54) MV500-0155) MV500-0256) Zenith S101) MIT-C8D8(40K)MIT-C8D8(40K)是一种常见的红外遥控编码格式。
该格式出现在万能遥控器ZC-18A(600-917)中。
Features 基本特点1,8位地址码,8位数据码,结束码;2,脉宽调制方式(PWM);3,载波:40.0 KHZ;4,逻辑位时间长度是1.215ms或2.436 ms。
通过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(); // 接收下一个值}}。
遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。
如果能将遥控器上许多的按键解码出来.用作单片机系统的输入.则解决了常规矩阵键盘线路板过大、布线复杂、占用I/O口过多的弊病。
而且通过使用遥控器,操作时可实现人与设备的分离,从而更加方便使用。
一、编码格式1、0和1的编码遥控器发射的信号由一串O和1的二进制代码组成.不同的芯片对0和1的编码有所不同。
通常有曼彻斯特编码和脉冲宽度编码。
TC9012的O和1采用PWM方法编码,即脉冲宽度调制,其O码和1码如图1所示(以遥控接收输出的波形为例)。
O码由O.56ms低电平和0.56 ms高电平组合而成.脉冲宽度为1.12ms。
1码由0.56ms低电平和1.69ms高电平组合而成.脉冲宽度为2.25ms。
在编写解码程序时.通过判断脉冲的宽度,即可得到0或1。
2、按键的编码当我们按下遥控器的按键时,遥控器将发出如图2的一串二进制代码,我们称它为一帧数据。
根据各部分的功能。
可将它们分为5部分,分别为引导码、地址码、地址码、数据码、数据反码。
遥控器发射代码时.均是低位在前,高位在后。
由图2分析可以得到.引导码高电平为4.5ms,低电平为4.5ms。
当接收到此码时.表示一帧数据的开始。
单片机可以准备接收下面的数据。
地址码由8位二进制组成,共256种.图中地址码重发了一次。
主要是加强遥控器的可靠性.如果两次地址码不相同.则说明本帧数据有错.应丢弃。
不同的设备可以拥有不同的地址码.因此。
同种编码的遥控器只要设置地址码不同,也不会相互干扰。
图中的地址码为十六进制的0EH(注意低位在前)。
在同一个遥控器中.所有按键发出的地址码都是相同的。
数据码为8位,可编码256种状态,代表实际所按下的键。
数据反码是数据码的各位求反,通过比较数据码与数据反码.可判断接收到的数据是否正确。
如果数据码与数据反码之间的关系不满足相反的关系.则本次遥控接收有误.数据应丢弃。
格力空调遥控器红外
编码
格力空调遥控器红外编码一、基本格式
起始码(S)+35位数据码+连接码(C)+32位数据码
二、电平规范
起始码:9000us低电平+4500us高电平
连接码:600us低电平+20000us高电平
数据0:600us低电平+600us高电平
数据1:600us低电平+1600us高电平
仅供学习与交流,如有侵权请联系网站删除谢谢2
三、数据编码
3.1 前35位数据码
表一前35位数据码
3.2 后32位数据码
表二后32为数据码仅供学习与交流,如有侵权请联系网站删除谢谢3
3.3 其他定义
需要注意的是,所有数据都按照逆序方式递增。
模式字段定义
表三模式字段定义
四、校验计算
校验码=【(模式-1)取四位二进制逆序+(温度-16)+2+左右扫风+换气+节能】取二进制后四位的逆序。
仅供学习与交流,如有侵权请联系网站删除谢谢4。
下面把这次红外编程的解码的经历简要的写一下,以便以后回顾总结:红外遥控过程是这样的:红外遥控器的矩阵键盘按键,接着专用芯片编码调制然后红外发射;红外接受头经过光电放大,解调,最后解码编程。
我的遥控专用芯片是UPD6122G-001.解码晶振是455kHz,调制载波频率是455kHz/12=38kHz。
此外调制信号是PWM进行调制的,0是脉冲波形位0.5625ms的高电平跟0.5625ms的低电平组成,1则是0.5625ms的高电平跟1.6785ms的低电平组成。
跟其他通用的波形一样,有键按下时,先是9ms的高电平的起始码,接着是一个4.5ms结果码,接下来就是数据了。
用户码的高8位,用户码的低8位,8位数据码,8位数据反码,最后还有一个停止位。
如果按键一直没松,则接下来就只是发送起始码(9ms高电平),接着是一个2.2ms的低电平,再接着是一个停止位。
我的红外接在单片机p3.7引脚上面,从网上收集了一些程序,基本上如同一则,汇编编写,跟外部中断还有关系。
于是便萌生了自己写一下的想法。
我的思路是用定时器进行计数,然后编程。
刚开始编写程序是,由于忘了对定时器的标志位进行置为,结果定时中断根本就没有执行,手头上又没有用仿真芯片,搞得我下载调试了十来次才发现了这个问题。
还有一个问题刚开始遥控能够解码的时候,可是一直按某个键,你按一次,她就变化一次,搞得我很是郁闷,差点儿没晕过去。
怎么找都不知道问题的所在,心里不断地打算放弃,不过最后还是坚持了下来,原来电路的实际解码电平跟资料上是相反的。
遥控器的实际电平由高变低,而电路板上却是由低变高。
这点确好相反。
总结:一要自信,二要坚持,才有可能完成你想做的事件。
#include"reg51.h"#include"2-16.h"#include"address.h"//需要显示的信息uchar code hello[] = "Hello,PengSen!";//变量uchar data psCount; //定时器计数器uchar data i;uchar data j;uchar data temp;uchar data dp[4]; //用来保存红外遥控的码值uchar data dp2[12];//用来显示红外遥控的码值sbit HW = P3^7;void delay(unsigned int y);void main(){//初始化initlcd();dp[0] = 0x0;dp[1] = 0x0;dp[2] = 0x0;dp[3] = 0x0;TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式TH1 = 0xfe; //定时500uSTL1 = 0x33;TCON = 0x01;IE = 0x80;TR1 = 1;printf(hello,13);while(1){//报文头ET1 = 0;psCount = 0;while(HW == 1); //初始状态下,红外输出脚一直是高电平,等待遥控按键ET1 = 1;while(HW == 0);if( psCount > 17)//0.5* 17 = 8.5ms约为9.0ms{ET1 = 0;psCount = 0;ET1 = 1;while(HW == 1);if(psCount > 5)//超过0.5*5 = 2.5毫米,检查一下遥控命令是不是连发,不是则执行下面的程序{ET1 = 0;psCount = 0;dp[0] = 0x0;dp[1] = 0x0;dp[2] = 0x0;dp[3] = 0x0;//数据for(i = 0 ; i < 4; i++){for(j = 0; j < 8; j++){while(HW == 0);ET1 = 0;psCount = 0;ET1 = 1;while(HW == 1);if(psCount > 2)//根据波形长度判定码值为0或1temp = 0;elsetemp = 1;dp[i] |= (temp<<j);//保存键值}}}}//停止位while(HW == 1);//数据显示delay(20);dp2[0] = dp[0]/100 + 0x30;dp2[1] = dp[0]%100/10 + 0x30;dp2[2] = dp[0]%10 + 0x30;dp2[3] = dp[1]/100 + 0x30;dp2[4] = dp[1]%100/10 + 0x30;dp2[5] = dp[1]%10 + 0x30;dp2[6] = dp[2]/100 + 0x30;dp2[7] = dp[2]%100/10 + 0x30; dp2[8] = dp[2]%10 + 0x30;dp2[9] = dp[3]/100 + 0x30;dp2[10] = dp[3]%100/10 + 0x30; dp2[11] = dp[3]%10 + 0x30;printf(dp2,12);delay(20);}}//延时子程序void delay(unsigned int y){uchar x;for(;y!=0;y--)for(x=200;x!=0;x--); }//定时器1中断void timer1() interrupt 3{psCount++;TH1 = 0xfe; //定时500uSTL1 = 0x33;}。
目录1)MIT-C8D8 (40k)2) MIT-C8D8(33K)3)SC50560-001,003P 4)M504625)M50119P-016)M50119L7)RECS808)M30049)LC7464M10)LC7461-C1311)IRT1250C5D6-0112)Gemini-C6-A13)Gemini-C614) Gemini-C17(31.36K)-1 15)KONKA KK-Y26116)PD6121G-F17)DATA-6BIT18)Custum-6BIT19)M9148-120)SC3010 RC-521) M50560-1(40K)22) SC50560-B123)C50560-002P24)M50119P-0125)M50119P-126)M50119P27)IRT1250C5D6-0228)HTS-C5D6P29)Gemini-C1730)Gemini-C17 -231)data6bit-a32)data6bit-c33)X-Sat34)Philips RECS-8035)Philips RC-MM36)Philips RC-637)Philips RC-538)Sony SIRC39)Sharp40)Nokia NRC1741)NEC42)JVC43)ITT44)SAA3010 RC-5(36K)45)SAA3010 RC-5(38K)46)NEC2-E247) NEC-E348) RC-5x49) NEC1-X250) _pid:$006051) UPD1986C52) UPD1986C-A53) UPD1986C-C54) MV500-0155) MV500-0256) Zenith S101) MIT-C8D8(40K)MIT-C8D8(40K)是一种常见的红外遥控编码格式。
该格式出现在万能遥控器ZC-18A(600-917)中。
Features 基本特点1,8位地址码,8位数据码,结束码;2,脉宽调制方式(PWM);3,载波:40.0 KHZ;4,逻辑位时间长度是 1.215ms或2.436 ms。
格力空调遥控器红外编
码
The manuscript was revised on the evening of 2021
格力空调遥控器红外编码一、基本格式
起始码(S)+35位数据码+连接码(C)+32位数据码
二、电平规范
起始码:9000us低电平+4500us高电平
连接码:600us低电平+20000us高电平
数据0:600us低电平+600us高电平
数据1:600us低电平+1600us高电平
三、数据编码
前35位数据码
表一前35位数据码
后32位数据码
表二后32为数据码
其他定义
需要注意的是,所有数据都按照逆序方式递增。
模式字段定义
表三模式字段定义
四、校验计算
校验码=【(模式-1)取四位二进制逆序+(温度-16)+2+左右扫风+换气+节能】取二进制后四位的逆序。
红外遥控编码程序如下:NEC .SECTION 'DATA'a_REM_CODE DB ? ;KEY DATA CODEa_CUSTOMER_1 DB ? ;遥控器头码(客户码)低八位a_CUSTOMER_2 DB ? ;遥控器头码(客户码)高八位#define CUS_6221_1 00110100b ;1234H#define CUS_6221_2 00010010b;@------------------------------------------------NEC_CODE .SECTION 'CODE';@************* SUBROUTINE[xx]: Send Remote Code ************;;遥控码发送:SEND_REMOTE_CODE:clr WDT ;清除进位标志,检测遥控发送的有效的按键SZ fg_SendActive ;SZ表示以0结尾的字符串JMP READY_SEND ;跳转到READY_SEND模块retREADY_SEND:NEC_CODE:mov A,a_KEY_NUM ;将数值发送到寄存器A中,直接寻址mov M_TBLP,ATABRDL a_REM_CODE ;查表专用指令MOV A,CUS_6221_1 ;读取遥控头码(客户码)低八位数值MOV a_CUSTOMER_1,AMOV A,CUS_6221_2MOV a_CUSTOMER_2,A以上为READY_SEND运行模块,同时是为后面NEC码发送的准备;首先将一个按键的数值已以直接寻址方式发送到寄存器A中,将寄存器A的是发送到M_TBLP中,然后查表a_REM_CODE,将CUS_6221_1的值发送到寄存器中,在赋值给遥控器头码(客户码)低八位a_CUSTOMER_1,同理,将CUS_6221_2赋值给遥控器头码(客户码)低八位a_CUSTOMER_2,随后即开始发送NEC遥控码。