最简单的红外线遥控解码程序

[复制链接]
 楼主| 比尔盖茨 发表于 2007-11-30 12:45 | 显示全部楼层 |阅读模式
//该程序可以将遥控码通过1602液晶显示出来
//不要的朋友可以将其部分删除即可

//版权所有比尔单片机 
//更多资料详见Http://www.brmcu.com
//著作:billxiong
//E-mail:billxiong008@163.com
//QQ:417152902

#include <reg51.h>
#include "1602lcd.h"

#define c(x) (x*110592/120000) 

sbit Ir_Pin=P3^2;        
unsigned char Ir_Buf[4]; //Save decode result

code const uchar NumCode[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

unsigned int Ir_Get_Low(void);
unsigned int Ir_Get_High(void);
void IR_Process(void);
void IntSys(void);

void main(void)
{
 Init1602();
 IntSys();
 ShowMessage(1,1,13,"www.brmcu.com");
 ShowMessage(0,2,5,"code:");
 while(1)
 {
  IR_Process();
 }
}

void IntSys(void)
{
 TMOD=0x21;
 EA=1;
 ET0=1;
 TR0=0;
}

unsigned int Ir_Get_Low(void)
{
TL0=0;
TH0=0;
TR0=1;
while(!Ir_Pin && (TH0&0x80)==0);                
TR0=0;           
return TH0*256+TL0;
}

unsigned int Ir_Get_High(void)
{
TL0=0;
TH0=0;
TR0=1;
while(Ir_Pin && (TH0&0x80)==0);
TR0=0;
return TH0*256+TL0;
}

void IR_Process(void)
{
 unsigned int temp;
char i,j;
do{
   restart:
   while(Ir_Pin);
   temp=Ir_Get_Low();
   if(temp<c(8500) || temp>c(9500)) continue;//引导脉冲低电平9000
   temp=Ir_Get_High();
   if(temp<c(4000) || temp>c(5000)) continue;//引导脉冲高电平4500
   for(i=0;i<4;i++) //4个字节
   {
    for(j=0;j<8;j++) //每个字节8位
    {
     temp=Ir_Get_Low();
     if(temp<c(200) || temp>c(800)) goto restart;
     temp=Ir_Get_High();
     if(temp<c(200) || temp>c(2000)) goto restart;
     Ir_Buf>>=1;
     if(temp>c(1120)) Ir_Buf|=0x80;
    }
   }
   ShowMessage(5,2,1,&NumCode[Ir_Buf[0]>>4]);
   ShowMessage(6,2,1,&NumCode[Ir_Buf[0]&0xF]);
   ShowMessage(8,2,1,&NumCode[Ir_Buf[1]>>4]);
   ShowMessage(9,2,1,&NumCode[Ir_Buf[1]&0xF]);
   ShowMessage(11,2,1,&NumCode[Ir_Buf[2]>>4]);
   ShowMessage(12,2,1,&NumCode[Ir_Buf[2]&0xF]);
   ShowMessage(14,2,1,&NumCode[Ir_Buf[3]>>4]);
   ShowMessage(15,2,1,&NumCode[Ir_Buf[3]&0xF]);
  }while(1);
}


xwj 发表于 2007-11-30 12:50 | 显示全部楼层

死查询方式,不入流的设计

 楼主| 比尔盖茨 发表于 2007-11-30 13:10 | 显示全部楼层

最简单的红外线遥控解码程序

非查询方式,上面的楼主理解错了 
yewuyi 发表于 2007-11-30 13:19 | 显示全部楼层

同意洗碗机观点

ldyeah 发表于 2007-11-30 14:28 | 显示全部楼层

哈哈

 yewuyi 发表于 2007-11-30 13:19 侃单片机 ←返回版面    

4楼: 同意洗碗机观点 


洗碗机??
哈哈~~~~
xxdcq 发表于 2007-12-1 11:12 | 显示全部楼层

呵呵!

这个只能解NEC格式的红外编码格式
看看我们的红外码识别模块可以解任何格式的红外码!
真正万能解码!

http://www.yofeng.com/IrCtrR.asp
http://www.yofeng.com/串口输出的红外码识别模块.asp
huangqi412 发表于 2007-12-1 17:55 | 显示全部楼层

洗碗机?显微镜呢

john_light 发表于 2007-12-1 18:02 | 显示全部楼层

当老徐成为热点

徐静蕾也要让个两分半

新闻界
happystar 发表于 2007-12-1 19:17 | 显示全部楼层

晕!

怎么又跑出来个“洗碗机”XWJ,这么捉弄小跳鸟大虾!
不平啊

computer00 发表于 2007-12-1 19:23 | 显示全部楼层

while(Ir_Pin);这种不是死查询是啥呀?

huangqi412 发表于 2007-12-1 19:48 | 显示全部楼层

6f的没有公开一点资料,没办法学,,

 xxdcq 发表于 2007-12-1 11:12 侃单片机 ←返回版面    

6楼: 呵呵! 

这个只能解NEC格式的红外编码格式
看看我们的红外码识别模块可以解任何格式的红外码!
真正万能解码!
 
 
王紫豪 发表于 2007-12-2 06:23 | 显示全部楼层

性玩具。。哼哼,这个牛x吧

dld2 发表于 2007-12-2 09:14 | 显示全部楼层

小五金?

zjh006 发表于 2007-12-2 10:46 | 显示全部楼层

6楼是不是有点夸张,可以解任何格式的红外码??

严重怀疑。
zjh006 发表于 2007-12-2 10:52 | 显示全部楼层

刚刚看了6楼的原理图

不说别的,我就想问问6楼,无载波格式你的红外码识别模块恐怕无能为力吧?
xwj 发表于 2007-12-2 10:54 | 显示全部楼层

呵呵,我来个FSK方式的你也学不了的

xxdcq 发表于 2007-12-3 11:14 | 显示全部楼层

to zjh006

你要不要看看我们的产品就知道了!
没有什么不可能的!
我们做到了!
xxdcq 发表于 2007-12-3 11:16 | 显示全部楼层

另外还有一个消息!

我们已经开发成功了可以学习载波的红外遥控学习模块!
载波频率在 20k-100kHz之间都可以学
zjh006 发表于 2007-12-3 16:47 | 显示全部楼层

我看了你的原理图

你用的是一体化的接收头,不要说无载波的你学习不了,38k载波以外的都会有问题。
xxdcq 发表于 2007-12-4 08:30 | 显示全部楼层

呵呵!

无载波的能作红外遥控码?
最多1-2米
无载波的可以有线方式直接送进模块就可以解码

38k是现在常用的载波,市面上的遥控器绝大部分是38k的

而且我们现在也开发出了可以识别载波频率的模块
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

36

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部