0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

红外遥控解码原理讲解

CHANBAEK 来源:SmoS嵌入式开发 作者:By Cosmos 2023-07-24 11:32 次阅读

学习红外解码的步骤:

1,搜索相关资料。我已经帮你们搜索好了。

2,理解红外解码的原理。

弄清怎么发射的和怎么接收的,主要是怎么接收的。

3,编写程序,调试,应用。

第一部分

原理:

我们先要弄清它是怎么发射的,和怎么接收的。

一、编码

遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:

采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如下图所示。

图片

上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射。编码数据,载波,发射,接收解码如下图所示:

图片

UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。

遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,发射波形图如下图所示。
图片

当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms ~ 18ms),高8位地址码(9ms ~ 18ms),8位数据码(9ms ~ 18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。

图片

这是最重要的:引导码+用户识别码+用户识别码(反码)+操作码+操作码(反码)
图片

二、接收部分
图片

P32 连着外部中断0
单片机上的外部中断 0
    来一个下降沿就进入中断。

#include 
#define uchar unsigned char
#define uint unsigned int
int irtime;
uchar disp[8];
uchar startflag;//开始标志
uchar irdata[33];//数据一共33位加上引导码
uchar bitnum;
uchar irreceok;//接收一帧数据完成
uchar ircode[4];//4个字节的数据
uchar irprosok;//处理完成

sbit SH_CP=P2^4;
sbit DS=P2^5;
sbit ST_CP=P1^5;

uchar code wei[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uchar code duan[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //0123456789abcdef


void send_dat(unsigned dat)
{
unsigned char i;
for(i=0;i< 8;i++)
{
DS=dat&0x80;
SH_CP=1;
SH_CP=0;
dat< <=1;
}
}



void timer0init(void)
{
TMOD=0X02;
TH0=0;
TL0=0;
ET0=1;
EA=1;
TR0=1;
}

void int0init(void)
{
IT0=1;
EX0=1;
EA=1;
}

void irwork()
{
//disp[0]=ircode[0]/16;
//disp[1]=ircode[0];
//disp[2]=ircode[1]/16;
//disp[3]=ircode[1];
// disp[4]=ircode[2]/16;
// disp[5]=ircode[2]/100;
// disp[6]=ircode[2]0/10;
// disp[7]=ircode[2];

switch (ircode[2])
{
  case 6 : disp[6]=0;disp[7]=1;break;
case 12 :disp[6]=0;disp[7]=2 ;break;
case 47 :disp[6]=0;disp[7]=3;break;
case 4 : disp[6]=0;disp[7]=4;break;
case 14 :disp[6]=0;disp[7]=5 ;break;
case 45 :disp[6]=0;disp[7]=6;break;
case 33: disp[6]=0;disp[7]=7;break;
case 41 :disp[6]=0;disp[7]=8 ;break;
case 37 :disp[6]=0;disp[7]=9;break;

default : disp[5]=0;
disp[6]=15;
disp[7]=15 ;
}

}

void irpros(void)   //处理函数
{
uchar k,i,j;
uchar value;
k=1;
for(j=0;j< 4;j++)
{
for(i=0;i< 8;i++)
{
if(irdata[k] >10)//时间长度等于1.125ms就是0 等于2.25ms就是1;
{
value=value|0x80;
}
else
{
value=value;
}
if(i< 8)
{
value=value >>1;
}
k++;
}
ircode[j]=value;//ircode[j]返回的是十六进制数。
value=0;
}
irprosok=1;
}

void display(void)
{
uchar i;
for(i=5;i< 8;i++)
{
   send_dat(duan[disp*]);       //定义段   0亮
send_dat(wei*); //定义位 1亮  
   ST_CP=1;
ST_CP=0;
//delay(2);
}
}

void main()
{
timer0init();
int0init();
while(1)
{
if(irreceok)
{
irpros();
irreceok=0;
}
if(irprosok)
{
irwork();
irprosok=0;
}
display();
}
}

void timer0 () interrupt 1
{
irtime++;
}

void int0 () interrupt 0
{
if(startflag)
{
if(irtime< 126&&irtime >=66)//检测引导码9ms
{
bitnum=0;
}
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;
}
}
else
{
startflag=1;
irtime=0;
}

}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50714

    浏览量

    423138
  • 振荡器
    +关注

    关注

    28

    文章

    3832

    浏览量

    139033
  • 遥控发射器
    +关注

    关注

    1

    文章

    11

    浏览量

    7829
  • 遥控解码
    +关注

    关注

    0

    文章

    9

    浏览量

    1720
收藏 人收藏

    评论

    相关推荐

    最简单的51单片机红外遥控解码程序

    介绍本人自编的51单片机红外遥控解码程序,自认为是可能是史上最简的红外遥控解码程序。
    发表于 03-20 10:05 1.6w次阅读

    红外遥控解码

    红外要控解码 1602上显示红外遥控编码
    发表于 08-13 18:00

    红外遥控+1602解码

    红外遥控+1602解码
    发表于 02-10 20:43

    如何去制作红外遥控解码器?

    红外遥控解码器的电路原理是什么?如何去制作红外遥控解码器?其步骤流程是怎样的?
    发表于 04-19 07:00

    BC7210 低成本通用红外遥控解码芯片

    BC7210 低成本通用红外遥控解码芯片:BC7210 是一款低成本通用红外遥控解码芯片,可以完
    发表于 11-29 08:42 40次下载

    红外遥控器软件解码及其应用

    通过对红外遥控器各按键发送冲波形的分析可以识别码型,从而为软件解码提供依据。本文以实例介绍红外遥控
    发表于 07-19 17:46 116次下载

    pt2262红外遥控解码电路

    pt2262红外遥控解码电路 UHF Band 4 Data Transmitter Circuit is recommended.
    发表于 11-29 09:00 4234次阅读
    pt2262<b class='flag-5'>红外</b><b class='flag-5'>遥控</b><b class='flag-5'>解码</b>电路

    红外遥控解码全攻略

    红外遥控器的解码并对电器进行遥控是单片机学习者得一个心愿,自己动手实现 红外遥控
    发表于 07-12 13:09 435次下载
    <b class='flag-5'>红外</b><b class='flag-5'>遥控</b>编<b class='flag-5'>解码</b>全攻略

    红外遥控解码程序详情

    红外遥控解码程序详情
    发表于 09-23 14:41 195次下载

    红外遥控解码DIY

    红外遥控解码DIY,喜欢的朋友可以下载来学习。
    发表于 01-14 15:29 61次下载

    ARM基础应用实验_红外遥控解码

    电子专业单片机相关知识学习教材资料——ARM基础应用实验02红外遥控解码
    发表于 09-13 17:23 0次下载

    红外遥控解码相关资料分享

    本文分享了红外遥控解码的相关资料。
    发表于 11-16 14:40 44次下载

    基于STM32的红外遥控解码遥控程序解析

    文 本主要包含 两个内容:一、红外遥控协议的的讲解;二、解码程序解析(参考正点原子的代码) 红外的介绍、优点、缺点就不给大家说了,网上书上都
    发表于 11-30 01:57 4845次阅读
     基于STM32的<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>和<b class='flag-5'>解码</b><b class='flag-5'>遥控</b>程序解析

    红外遥控解码全面讲解

    红外的简单发射接收原理:在发射端,输入信号经放大后送入红外发射管发射,在接收端,接收管收到红外信号后,由放大器放大处理后还原成信号。红外线遥控
    的头像 发表于 03-06 13:51 8.4w次阅读
    <b class='flag-5'>红外</b><b class='flag-5'>遥控</b>编<b class='flag-5'>解码</b>全面<b class='flag-5'>讲解</b>

    使用Arduino解码任何遥控器的红外遥控信号

    电子发烧友网站提供《使用Arduino解码任何遥控器的红外遥控信号.zip》资料免费下载
    发表于 10-27 11:51 4次下载
    使用Arduino<b class='flag-5'>解码</b>任何<b class='flag-5'>遥控</b>器的<b class='flag-5'>红外</b><b class='flag-5'>遥控</b>信号