红外遥控解码原理

第五讲 红外遥控
一、红外接收头外形及与单片机连接电路
                     
(a)                                      (b)
图1
    图1(a)为红外接收头HX1838的外形图,它有三个引脚,其中1为接收端2为地端3为电源端。其与单片机连接电路图见(b)所示,红外接收头的接收引脚与单片机的P3.2相连。
二、红外遥控简介
    红外遥控是一种比较廉价的近距离遥控方式。它由发射模块和接收模块两部分组成,编码格式有脉冲宽度调制和脉冲相位调制两大类。本节我们不考虑发射模块而只研究接收端的解码。本例我们以比较容易的脉冲宽度调制来介绍解码原理。
三、发射端数据的编码
    当我们按下遥控器后,遥控器发出一帧数据。这一帧数据由前导码、用户码高8位、用户码低8位、数据码、数据反码组成。其中前导码为9ms高电平接着4.5ms低电平,标志数据帧的开始;用户码(共16位)为红外接收器识别遥控器的身份的标志,不同的遥控器一般用户码不同,以防止不同电器设备之间遥控码的干扰;数据码为红外接收器识别遥控器上不同的按键的标志,对同一遥控器来说,按不同的键所发出的二进制编码具有相同的用户码,不同的数据码,如图1所示.数据反码用于信息正确接收校验。
图1
红外遥控解码精简设计。孙卫锋,,郑秀娥。山东理工大学学报(自然科学版) 第20卷第6期 2006年 26~29
1、16位用户码,8位数据码和8位数据反码中的数据位定义
以脉宽0.56ms间隔0.565ms周期1.125ms表示二进制“0”,以脉宽0.56ms间隔1.69ms周期2.25ms表示二进制“1”,其波形分别如图2(a)和(b)所示。
 
                (a)                                      (b)
图2
2、重复码
以9ms高电平,2.25ms低电平,再0.56ms高电平定义为重复码,持续按键时,该键编码连续发送,首帧为数据帧,其后为重复码,周期为108us,如图3所示。
图3
四、接收端的解码原理
    解码就是将HX1838输出的脉冲还原为二进制的“0”和“1”,得到二进制“0”,“1”序列,进而分析所含的用户码和数据码。当HX1838在遥控有效距离内,接收到红外遥控脉冲信号后,由内部转换成电压信号并经放大、长时控制、干扰抑制、带通滤波并整形后输出遥控代码脉冲.脉冲的形式为遥控器发射脉冲的倒像.图4表明了遥控发射码与HX1838解码输出码之间的波形关系.
    一定要注意,单片机接收端与发射端的信号是倒像关系,发射端引导码是9ms高电平,2.25ms低电平,在单片机接收端就变成了9ms低电平和2.25ms高电平,发射端发射位0,则单片机接收端为高电平。
五、应用实例
    应用红外接收头HX1838接收红外信号并送LCD1602显示遥控器按键编码。
#include<reg52.h>   
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit IR=P3^2;
sbit RS=P2^6;
sbit RW=P2^7;
sbit E=P2^5;
       
uchar IRcom[6]; 
uint LowTime,HighTime;
#define delay_4_nop() {_nop_();_nop_();_nop_();_nop_();}
/************************延时****************************************/
void delay(uchar i)
{
  uchar k,j;
  for(k=0;k<i;k++)
      for(j=0;j<255;j++); 
}
/***************************LCD1602***********************************/
bit Lcd_R_Busy()
{
    bit s;
    RW=1;
    delay_4_nop();
    RS=0;
    delay_4_nop();
    E=1;
    delay_4_nop();
浙江树人大学后勤    s=(P0&0x80);
    delay_4_nop();
    E=0;
    delay_4_nop();
    return(s);
}
void Lcd_W_Cmd(uchar com)
{
    while(Lcd_R_Busy()!=0);
    RW=0;
    delay_4_nop();
    RS=0;
    delay_4_nop();
    E=1;
    delay_4_nop();
    P0=com;
    delay_4_nop();
    E=0;
    delay_4_nop();
}
void Lcd_W_Dat(uchar dat)
{
    while(Lcd_R_Busy()!=0);
    RW=0;
    delay_4_nop();
    RS=1;
    delay_4_nop();
    E=1;
    delay_4_nop();
    P0=dat;
    delay_4_nop();
    E=0;
    delay_4_nop();
}
void Lcd_Init()
{
    Lcd_W_Cmd(0x3c);
    Lcd_W_Cmd(0x0c);
    Lcd_W_Cmd(0x01);
    Lcd_W_Cmd(0x06);
    Lcd_W_Cmd(0x80);
}
/****************************************************/
//1602显示字符串
//row为行,column为列
/****************************************************/
void showstring(uchar row, uchar column, uchar str[])
{
    uchar i=0;
    row &= 0x01;  //保证行不超过1
    column &= 0x0f;  //保证列不超过15
    if(row==0) Lcd_W_Cmd(0x80|column);
    if(row==1) Lcd_W_Cmd(0xc0|column);布谷鸟2012
    delay(250);
    while(str[i] != '\0')
    {                       
      Lcd_W_Dat(str[i]);delay(2);
      i++;
    }
}
/****************************************************/
//1602显示字符
//row为行,column为列,2行(0,1),16列(0~15)
/****************************************************/
void showchar(uchar row, uchar column, uchar dat)
{      row &= 0x01;  //保证行不超过1
    column &= 0x0f;  //保证列不超过15
    if(row==0) Lcd_W_Cmd(0x80|column);
    if(row==1) Lcd_W_Cmd(0xc0|column);
    Lcd_W_Dat(dat);
}
/*********************************************************************/
/****************************红外部分*********************************/
/*函数功能:对4个字节的用户码和键数据码进行解码
说明:解码正确,返回1,否则返回0*/
bit DeCode(void)       
{
   
    uchar i,j;
    uchar temp=0;   
    for(i=0;i<4;i++)   
    {
          for(j=0;j<8;j++)  //j=2
健康之路慢性胃炎          {
            temp=temp>>1; //0101 0000
                TH0=0;       
              TL0=0;       
            TR0=1;       
              while(IR==0);     
            TR0=0;     
            LowTime=TH0*256+TL0;  //3000
            TH0=0;       
电力宽带              TL0=0;       
            TR0=1;     
            while(IR==1);     
              TR0=0;     
            HighTime=TH0*256+TL0; //560
              if((LowTime<390)||(LowTime>680))
                  return 0;             
              if((HighTime>450)&&(HighTime<670))  //0             
                  temp=temp&0x7f;
            if((HighTime>1400)&&(HighTime<1890))
                temp=temp|0x80;
          }                大内密探灵灵狗电影
          IRcom[i]=temp;
    }         
      if(IRcom[2]==~IRcom[3])
血管胸      {        IRcom[5]=IRcom[2]&0x0f;
            IRcom[4]=IRcom[2]>>4;
            if(IRcom[4]>9) {IRcom[4]=IRcom[4]+0x37;}
            else {IRcom[4]=IRcom[4]+0x30;}
            if(IRcom[5]>9) {IRcom[5]=IRcom[5]+0x37;}
            else {IRcom[5]=IRcom[5]+0x30;}
      }
      return 1;   
}
/*********************************************************************/

本文发布于:2024-09-23 00:29:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/63475.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:脉冲   数据   遥控   遥控器   发射   接收   解码   接收端
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议