单片机解红外线解码.doc

上传人:大米 文档编号:560406191 上传时间:2023-08-04 格式:DOC 页数:11 大小:188.50KB
返回 下载 相关 举报
单片机解红外线解码.doc_第1页
第1页 / 共11页
单片机解红外线解码.doc_第2页
第2页 / 共11页
单片机解红外线解码.doc_第3页
第3页 / 共11页
单片机解红外线解码.doc_第4页
第4页 / 共11页
单片机解红外线解码.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《单片机解红外线解码.doc》由会员分享,可在线阅读,更多相关《单片机解红外线解码.doc(11页珍藏版)》请在金锄头文库上搜索。

1、单片机解红外线编码红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。现在工业设备中,也已经广泛在使用。 1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。 2 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成脉冲宽度调制和脉冲相位调制两大类,这里我们以运用比较广泛

2、,解码比较容易的脉冲宽度调制来加以说明,现以3310组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1” 上述“0”和“1”组成的42位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射, 产生的遥控编码是连续的42位二进制码组,其中前26位为用户识别码,能区别不

3、同的红外遥控设备,防止不同机种遥控码互相干扰。后16位为8位的操作码和8位的操作反码用于核对数据是否接收准确。 当遥控器上任意一个按键按下超过36ms时,LC7461芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个4.5ms的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,

4、0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右即可。 根据红外编码的格式,程序应该等待9ms的起始码和4.5ms的结果码完成后才能读码。接收器及解码 LT0038是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积

5、和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。 串口显示: * ; 奥宇星单片机工作室 ; http:/ ; Copyright 2009 aoyux McuStudio ; All rights Reserved ;作者:奥宇星QQ:393193589stc12c5616 晶振频率为11.0592MHz 指令周期:1.0852us /6功能说明:单片机解红外线编码 解码的数据 送 串口显示,同时在 LCD1602 显示。在这里选用一个天敏电视盒的遥控器。 ;*/ /LCD1602 显示,电脑也显示 /#include #include / #include #defin

6、e uint unsigned int/ #define uchar unsigned char/ #define ulong unsigned long/ #define ufloat unsigned float/ sbit REM=P26;/ sbit led1=P15;/红灯 sbit led2=P14;/绿灯 sbit RS=P23;/LCD1602定义I/O的硬件接口 sbit RW=P24;/LCD1602定义I/O的硬件接口 sbit E=P25;/LCD1602定义I/O的硬件接口 #define DPDR P0/并行数据接口定义 uchar SBUF_RI_Buffer10

7、; uchar REM_Buffer5; uchar code DispTab_1=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F; uchar DispBuf16; /6字节的显示缓冲区 char char_char_1= ;/定义字符串 void delay(uint z)/1ms延时 uchar x,x1; for(;z0;z-) for(x=0;x114;x+) for(x1=0;x11;x1+); void write_Directive(uchar a)/写指令 RS=0; RW=0; delay(1); E=0; DPDR=a; delay(1); E=1; d

8、elay(1); E=0; delay(1); void write_Data(uchar a)/写数据 RS=1; RW=0; delay(1); E=0; DPDR=a; delay(1); E=1; delay(1); E=0; delay(1); void init()/ uchar i; REM=1; TMOD=0x21; TH1=0xfd;/11.0592MHz 9600 TL1=0xfd; PCON&=0x80; SCON=0x40; AUXR=0x40;/波特率倍增 /11.0592MHz 115200 TH0=0x00;/ TL0=0x00;/ EA=1; ET0=1; TR

9、0=0; TR1=1; ES=0; REN=1; PT0=1; PT0=1;/定时器0中断优先级最高:第三 delay(15); write_Directive(0x38); delay(5); write_Directive(0x38); delay(5); write_Directive(0x38); write_Directive(0x01); write_Directive(0x02);/初始化后数据地址为0x80;即第一行,第一个位置 write_Directive(0x0c); write_Directive(0x80+0x40);/第二行第一位地址 for(i=0;i16;i+)

10、 write_Data(char_char_1i);/显示字符串 void Time_interrupt(void) interrupt 1 /定时器0中断 TR0=0; void Show()/显示 write_Directive(0x80+0x00);/第一行,第1个位置地址 write_Data(DispTab_1(REM_Buffer0/16);/第一行,第0个位置 write_Data(DispTab_1(REM_Buffer0%16);/第一行,第0个位置 write_Data( );/ write_Data(DispTab_1(REM_Buffer1/16);/第一行,第1个位

11、置 write_Data(DispTab_1(REM_Buffer1%16);/第一行,第2个位置 write_Data( );/ write_Data(DispTab_1(REM_Buffer2/16);/第一行,第3个位置 write_Data(DispTab_1(REM_Buffer2%16);/第一行,第4个位置 write_Data( );/ write_Data(DispTab_1(REM_Buffer3/16);/第一行,第5个位置 write_Data(DispTab_1(REM_Buffer3%16);/第一行,第6个位置 void RS232_in(void) interr

12、upt 4/串口中断 EA=0; if(RI=1)/接收 RI=0; /SBUF_RI_Buffer0=SBUF;/RS2323接收缓冲区 / else /if(TI=1)/发送 TI=0; EA=1; void RS232()/通信检测 uchar i; /ES=0; if(SBUF_RI_Buffer0=0xff) for(i=0;i4;i+) SBUF=REM_Bufferi; while(TI=0); TI=0; Show();/显示 SBUF_RI_Buffer0=0x00; /ES=0; void REM_REM() uchar i,ii,tem; loop: while(REM=

13、1); TH0=0xe0;/ 8.8ms e0 51 TL0=0x51;/ TR0=1; while(TR0=1) if(REM=0) _nop_(); else TR0=0; goto loop; while(REM=0); TH0=0xf0;/ 4.35ms TL0=0x57;/ TR0=1; while(TR0=1) if(REM=1) _nop_(); else TR0=0; goto loop; while(REM=1); while(REM=0); for(i=0;i4;i+) tem=0x00; for(ii=0;ii=1; TH0=0xfc;/ 0.84ms TL0=0xf9;/fa f9 TR0=1; while(TR0=1); if(REM=1) tem|=0x80; while(REM=1); while(REM=0); REM_Buf

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号