基于MSP430的红外遥控器解码.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于MSP430的红外遥控器解码

基于MSP430的红外遥控器解码 ????????? 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理(一般家庭用的DVD、VCD、音响都使用这种编码方式)。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: ? ?????? 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、 周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。 ????????当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个引导码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发码)将仅由起始码(9ms)和结束码(2.25ms)组成。 ??????? 接收电路可以使用一种集红外线接收和放大于一体的一体化红外线接收器,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。 ?????? 接收器对外只有3个引脚:Out、GND、Vcc与单片机接口非常方便 ?????? 脉冲信号输出接,直接接单片机的IO 口。 ?????? GND接系统的地线(0V); ?????? Vcc接系统的电源正极(3~5V); 以上信息来自搜集的资料和自己的整理(方便大家学习) 以下是我的解码程序(参考C51的程序的成功移植) 注意:红外解码对时间延时的精度要求比较高,很难一次成功,需要耐心调试,修改着色部分的数字大小. //利用两位数码管显示遥控器的编码值 //如遥控器上的0~9对应在数码管上显示00~09 #include msp430x14x.h #define wei1_1????? P1DIR|=BIT7;P1OUT|=BIT7?//数码管低位置高 #define wei1_0????? P1DIR|=BIT7;P1OUT=~BIT7?//数码管低位置低 #define wei2_1????? P1DIR|=BIT6;P1OUT|=BIT6?//数码管高位置高 #define wei2_0????? P1DIR|=BIT6;P1OUT=~BIT6?//数码管高位置低 #define duan_out??? P2DIR=0xff???//数码管段选P2口设为输出 #define IR_DIR_IN?? P1DIR=~BIT0??//红外接收头P1.0设置为输入, #define IRIN??????? (P1INBIT0)???//红外接收头输入值 #define duan??????? P2OUT???//数码管段选为P2口 char??? dat[8]; char??? seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e}; //函数声明 void InitSys(); void display(); void delay(unsigned char x) //延时子程序(x*0.14MS) { ?? unsigned char i,j; ?? while(x--) ?? { ????? for (i = 20; i0; i--) ??????? for(j=5;j0;j--); ?? } } void delay_1ms(unsigned int nValue)//delay 1ms at 8M { ?? unsigned int nCount; ?? unsigned int ii; ?? unsigned int jj; ?? nCount = 1592; ?? for(ii = nValue;ii 0;ii--) ?? { ????? for(jj = nCount;jj 0;jj--) ????? _NOP(); ?? } } void delay_5us(unsigned int nValue)//delay 5us at 8M {? ?? unsigned int ii; ?? for(ii = nValue;ii 0;ii--) ?? { ????? _NOP();_NOP();_NOP();_NOP()

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档