找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10411|回复: 55
打印 上一主题 下一主题
收起左侧

单片机学习手记——红外遥控解码<一>【原创】

  [复制链接]
跳转到指定楼层
楼主
-------------------------------------写在前面的废话-----------------------------------------------

    2013年暑假在学校没回家,参加了2013TI杯湖北省电子设计大赛。比赛的时候,看到大家在比赛之前都准备了各种模块(显示模块,电源模块,矩阵键盘...)显然他们比赛的时候就轻松多了,而我就是一个菜鸟,没什么经验,第一次参加比赛。也没准备什么模块。导致后来三天两夜的比赛中吃了大亏。所以平时要准备各种模块,和写好的程序。


--------------------------------------------------------------------------------------------------
学习红外解码的步骤:
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;
}

}



大家有什么疑问可以提出来(QQ:1874934688)。










资料: 红外学习.zip (1.51 MB, 下载次数: 550)

源码:
红外源码.zip (26.66 KB, 下载次数: 229)



希望发烧友的新手们早点能学会红外解码,有什么不明白的可以问我。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:262 发表于 2013-9-6 14:37 | 只看该作者
好东东我顶,51hei(51黑)单片机论坛有你更精彩.
回复

使用道具 举报

板凳
ID:54902 发表于 2013-9-10 10:44 | 只看该作者
对于解码这些东西还是不懂,楼主是不是使用任何一个红外发射接收的管,都要解码的?假如我使用PH303、PH302和单片机直接使用按键来 使一个led灯的亮灭应该怎样弄编程?
回复

使用道具 举报

地板
ID:52286 发表于 2013-10-14 00:24 | 只看该作者
#在这里快速回复#支持支持、、
回复

使用道具 举报

5#
ID:52964 发表于 2013-10-17 22:13 | 只看该作者
刚学单片机,对遥控与AD方面不是很明,请楼群主教下NTC测温方面的知识.谢谢.QQ12812454
回复

使用道具 举报

6#
ID:56497 发表于 2013-10-31 18:14 | 只看该作者
蛮有用的,不错~
回复

使用道具 举报

7#
ID:56598 发表于 2013-11-3 22:56 | 只看该作者
不错~蛮有用的,不错~
回复

使用道具 举报

8#
ID:56381 发表于 2013-11-3 23:14 | 只看该作者
很不错,我要学学啊
回复

使用道具 举报

9#
ID:56735 发表于 2013-11-8 19:03 | 只看该作者
很有用谢谢学习了!!!
回复

使用道具 举报

10#
ID:56685 发表于 2014-3-19 18:21 | 只看该作者
好评                              
回复

使用道具 举报

11#
ID:60656 发表于 2014-4-13 22:32 | 只看该作者
收藏学习了
回复

使用道具 举报

12#
ID:60656 发表于 2014-4-13 22:33 | 只看该作者
diy个试试看效果
回复

使用道具 举报

13#
ID:60246 发表于 2014-4-13 22:51 | 只看该作者
谢谢分享
回复

使用道具 举报

14#
ID:61227 发表于 2014-4-28 22:07 | 只看该作者
谢谢楼主慷慨,谢谢了
回复

使用道具 举报

15#
ID:61227 发表于 2014-4-28 22:10 | 只看该作者
谢谢楼主慷慨,谢谢了
回复

使用道具 举报

16#
ID:62517 发表于 2014-6-2 15:51 | 只看该作者
学习下
回复

使用道具 举报

17#
ID:62533 发表于 2014-6-2 20:53 | 只看该作者
谢谢楼主慷慨,谢谢了
回复

使用道具 举报

18#
ID:62553 发表于 2014-6-3 13:11 | 只看该作者
比较不错哦   楼主  谢谢
回复

使用道具 举报

19#
ID:46838 发表于 2014-6-28 18:47 | 只看该作者
支持,谢谢分享,一定能学会的
回复

使用道具 举报

20#
ID:63641 发表于 2014-7-5 19:34 | 只看该作者
谢谢分享
回复

使用道具 举报

21#
ID:63696 发表于 2014-7-7 11:28 来自手机 | 只看该作者
楼主好人一生平安!学习进步!感谢分享!
回复

使用道具 举报

22#
ID:64732 发表于 2014-8-11 16:42 | 只看该作者
谢谢楼主啊
回复

使用道具 举报

23#
ID:65361 发表于 2014-8-22 21:09 | 只看该作者
好东西,收藏。。。。
回复

使用道具 举报

24#
ID:47760 发表于 2014-9-13 06:49 | 只看该作者
谢谢你的分享!
回复

使用道具 举报

25#
ID:66338 发表于 2014-9-18 23:54 | 只看该作者
收藏学习了
回复

使用道具 举报

26#
ID:66338 发表于 2014-9-18 23:55 | 只看该作者
很实用!谢谢分享!
回复

使用道具 举报

27#
ID:66338 发表于 2014-9-18 23:57 | 只看该作者
很不错,谢谢楼主分享!!
回复

使用道具 举报

28#
ID:61875 发表于 2014-9-19 10:26 | 只看该作者
谢谢楼主的奉献。
回复

使用道具 举报

29#
ID:68085 发表于 2014-10-29 21:04 | 只看该作者
学习学习
回复

使用道具 举报

30#
ID:68146 发表于 2014-10-30 22:36 | 只看该作者
好东西
回复

使用道具 举报

31#
ID:68146 发表于 2014-10-30 22:46 | 只看该作者
非常好
回复

使用道具 举报

32#
ID:69215 发表于 2014-11-25 02:49 | 只看该作者
真是不错的资料
回复

使用道具 举报

33#
ID:34185 发表于 2014-11-30 07:05 | 只看该作者
蛮有用的,不错~
回复

使用道具 举报

34#
ID:34185 发表于 2014-11-30 07:06 | 只看该作者
真是不错的资料
回复

使用道具 举报

35#
ID:34185 发表于 2014-11-30 07:10 | 只看该作者
真是不错的资料
回复

使用道具 举报

36#
ID:34185 发表于 2014-12-3 18:06 | 只看该作者
很有用谢谢学习了!!!
回复

使用道具 举报

37#
ID:70104 发表于 2014-12-19 22:28 | 只看该作者
看看~~~~~
回复

使用道具 举报

38#
ID:70104 发表于 2014-12-19 22:28 | 只看该作者
收下了,,不客气
回复

使用道具 举报

39#
ID:70104 发表于 2014-12-19 22:29 | 只看该作者
收下了,,不客气
回复

使用道具 举报

40#
ID:70104 发表于 2014-12-19 22:29 | 只看该作者
还差2个币
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表