搜索
bottom↓
回复: 96

刚刚完成的单片机编码,解码的红外发射,接受!!!

[复制链接]

出0入0汤圆

发表于 2011-8-8 11:22:54 | 显示全部楼层 |阅读模式
昨天刚刚完成一个靠单片机编码发射和接受解码的例子,由于我发现这里没有比较完整的示例代码(我找好久都没有找到,呵呵),希望能给像我一样的初学者有所帮助,也希望能得到高手的指点,呵呵!
   功能解释:单片机用定时器产生38K载波,利用TC9012芯片的编码方式进行编码,每次发送一字节数据(学会了一字节,多字节也就会了),并由接收端解码加以显示!发射管用的是一般的红外管,接受用的是集成的红外接受器!
   通过测试,传输距离可达到5M左右!

  其中我参考了本论坛中  fai_sammy 童鞋的代码,再次表示感谢!



发射电路 (原文件名:})O7)AK`KD(IYQBE%KX~EZ1.jpg)

代码ourdev_665438K0229O.rar(文件大小:2K) (原文件名:红外.rar)
解码方式ourdev_665439QFHR8C.pdf(文件大小:243K) (原文件名:TC9012红外解码.pdf)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-8-8 11:26:08 | 显示全部楼层
自己顶一个!

出0入0汤圆

发表于 2011-8-8 12:49:31 | 显示全部楼层
不错,定下

出0入0汤圆

发表于 2011-8-8 17:31:44 | 显示全部楼层
楼主用的是哪个51单片机,STC89C52,还是AT89SC52,晶振是多少?本人想改成一个遥控开关

出0入0汤圆

 楼主| 发表于 2011-8-10 19:33:23 | 显示全部楼层
回复【3楼】xyz2008  
STC89C52,晶振用的是12M的!
-----------------------------------------------------------------------

出0入0汤圆

发表于 2011-8-10 20:53:41 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-10 22:12:38 | 显示全部楼层
我也是啊,正在学红外遥控,急需例子……

出0入0汤圆

发表于 2011-8-10 22:57:57 | 显示全部楼层
学习下……

出0入0汤圆

发表于 2011-8-10 23:01:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-10 23:29:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-11 03:55:06 | 显示全部楼层
嗯。我一直是在用成品,看到你的后,呵呵,我打算自己做一个。谢啦··

出0入0汤圆

发表于 2011-8-12 00:31:08 | 显示全部楼层
楼主,你的发射程序中为什么说TR1的值=发送的电平?我不是很明白

出0入0汤圆

发表于 2011-8-12 07:43:52 | 显示全部楼层
LZ的距离有多远,测过没有,这个的距离我做的时候不是太远啊,还有角度性非常强

出0入0汤圆

 楼主| 发表于 2011-8-16 11:14:32 | 显示全部楼层
回复【12楼】yesiqi  
-----------------------------------------------------------------------

我测试的时候在5M左右是没有问题的!角度也还好,至少不用完全正对!

出0入0汤圆

 楼主| 发表于 2011-8-16 11:21:15 | 显示全部楼层
回复【11楼】zhanliang1985  
-----------------------------------------------------------------------

你怎么载波的原理么?也就是说TR1=1时候,启动定时器T1,红外管则发送38K的载波信号,当接受方收到以后就输出高电平,没有收到载波信号则为低电平!不知道你理解了没!

出0入0汤圆

发表于 2011-8-17 08:48:41 | 显示全部楼层
我自己写的另类的红外载波发射程序
void timer0(void) interrupt 1 //T0中断程序 38K 36% 的占空比 
        {
          ir = 1;
          delay_nus(4);
           ir = 0;
        }

出0入0汤圆

发表于 2011-8-17 16:40:18 | 显示全部楼层
不错

出0入0汤圆

发表于 2011-8-17 19:52:09 | 显示全部楼层
真是感谢楼主。我也是一个单片机初学者,前些时候为参加全国大学生竞赛,要做一个小作品。我选择的就是做一个打分器,用红外来接收信息。基本上也相当于做一个遥控,当时花了大量心血来做这样一个东西,所有的基本完成,就是红外编码部分无法完成。现在看到你的这些代码,心生感概。失败总不好接受,不过单片机总算入门了。对于这样一个问题,红外收发。另一种思路就是:自己编码,自己解码(一位学长的经验)。就是说,自己设定0和1的表示方法(简易自己定),接收方依设定的来解码。我没有尝试,过些天我完成了,也把代码贴上来,让大家指证。

出0入0汤圆

发表于 2011-8-17 20:00:49 | 显示全部楼层
有个问题:看你的图,你好像是在用PROTEUS在仿真。这个可以仿真么?还有你有定时器产生的38KHZ的载波,你怎么把数据波(你的编码数据)加载到38KHZ的载波上的呢。把完整的图贴出来吧。

出0入0汤圆

 楼主| 发表于 2011-8-18 12:38:26 | 显示全部楼层
回复【18楼】Tankng  
-----------------------------------------------------------------------
不是,我做的是实物,由于当时没有相机,所以就没有给大家上传实物图!我感觉这里唯一的一个电路图就是发射段的,所以当时就拿proteus画了一个,我这里是一次发送一字节的数据;是通过下面这段代码实现的,我用的是一个8位拨码开关,改变ir_data,改天给大家把实物上传一下!
//发送一字节 8位
void Send_Char(uchar ir_data)
{
        unsigned char i,j;
        j=ir_data;
        Send_Start_Bit();                                                                   //发射引导吗
        for(i=0;i<8;i++)
        {
                if(j&0x01)
                        Send_Bit_1();
                else
                        Send_Bit_0();
                j=j>>1;                                                                                 //先发射低位
        }
        Send_over();                                                                                //结束符
}

出0入0汤圆

 楼主| 发表于 2011-8-18 12:40:52 | 显示全部楼层
回复【17楼】Tankng  
-----------------------------------------------------------------------

是的,这些编码和解码可以自己来设定!只要能够区别出0和1就行,其他的协议可以自己设定,希望能共享到你的成果,呵呵!!!

出0入0汤圆

 楼主| 发表于 2011-8-18 12:41:51 | 显示全部楼层
回复【15楼】zhyum1  
-----------------------------------------------------------------------

不错,呵呵!!!学习了

出0入0汤圆

发表于 2011-8-18 15:17:08 | 显示全部楼层
回复【17楼】Tankng
-----------------------------------------------------------------------

表示解码还是该根据自己的编码来,且不必拘泥于什么用户码,地址码之类的。。。。

出0入0汤圆

发表于 2011-8-19 10:39:25 | 显示全部楼层
准备学红外遥控~

出0入0汤圆

发表于 2011-8-19 16:40:30 | 显示全部楼层
回复【15楼】zhyum1
-----------------------------------------------------------------------

不错的方法,学习了。

出0入0汤圆

发表于 2011-8-19 17:55:34 | 显示全部楼层
回复【19楼】huhuan521
-----------------------------------------------------------------------

你写了个Send_over(),但我看解码的程序里没有与这段程序相关的内容(我个人水平一般)。能否解释下?

出0入0汤圆

发表于 2011-8-19 22:52:21 | 显示全部楼层
一直没有搞懂,为什么红外还要加个载波,正常来说,红外波自己的频率就是38k才对呀~

出0入0汤圆

 楼主| 发表于 2011-8-20 21:01:03 | 显示全部楼层
回复【25楼】Tankng  
-----------------------------------------------------------------------
接受是用的这个中断函数
void Int1 () interrupt 2                         //接受数据
{
  if(startflag)                                             //检测是不是第一个数据到来(第一个time值不要),第二次中断才能读取第一次的time
  {
      if(time>33)                                         //检测引导吗
      {             
                  bitnum=0;
      }
                 rwdat[bitnum]=time;                  //将9个time值装入rwdat[],包括引导吗
                 time=0;
                 bitnum++;
                 if(bitnum==9)                                  //一次接受结束
             {
                   bitnum=0;
                   recok=1;                                          //接受完成标志
                   startflag=0;
                 }
  }
  else
  {
    startflag=1;                                   
        time=0;
  }
         
}

里面有个判断if(bitnum==9 //一次接受结束
当接受到第九个数据的时候,他就实现一次复位了,并没有接受他的数据!!!

出0入0汤圆

发表于 2011-8-21 08:26:35 | 显示全部楼层
回复【27楼】huhuan521
-----------------------------------------------------------------------

感谢楼主指正!

出0入0汤圆

发表于 2011-8-21 09:23:56 | 显示全部楼层
正好在学习红外遥控,参考参考啊

出0入0汤圆

发表于 2011-8-29 16:05:18 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-8-29 18:06:00 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2011-8-29 21:12:23 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-8-30 00:30:03 | 显示全部楼层
学习的好材料,谢谢

出0入0汤圆

发表于 2011-8-30 13:07:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-30 16:56:53 | 显示全部楼层
很好
头像被屏蔽

出0入0汤圆

发表于 2011-8-30 20:54:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2011-8-30 21:49:54 | 显示全部楼层
挺好的,想知道用单片机发射红外线怎么做?

出0入0汤圆

发表于 2011-8-31 09:29:00 | 显示全部楼层
好帖啊。正要学习。。。。

出0入0汤圆

发表于 2011-8-31 22:26:46 | 显示全部楼层
以前玩过,发现距离很近,手头没有数字示波器等工具,不知道怎么改善。

出0入0汤圆

发表于 2011-8-31 22:57:28 | 显示全部楼层
学习下

出0入0汤圆

发表于 2011-9-1 10:22:21 | 显示全部楼层
有点看不懂

出0入0汤圆

发表于 2011-9-1 17:02:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-2 00:56:31 | 显示全部楼层
为什么没裤子, 这个帖子挺好的啊

出0入0汤圆

发表于 2011-9-2 21:46:09 | 显示全部楼层
学习了,谢谢了

出0入0汤圆

发表于 2011-9-3 20:21:43 | 显示全部楼层
必须记号,马上开工弄这个

出0入0汤圆

发表于 2011-9-4 10:34:19 | 显示全部楼层
正在做,借鉴了

出0入0汤圆

发表于 2011-9-4 11:08:52 | 显示全部楼层
领教了

出0入0汤圆

发表于 2011-9-4 17:33:35 | 显示全部楼层
楼主在不?能给个原理图不?

出0入0汤圆

发表于 2011-9-4 17:52:29 | 显示全部楼层
我前几天也做了个跟楼主差不多的

出0入0汤圆

发表于 2011-9-5 16:50:46 | 显示全部楼层
顶一个,我也在学习做这个,只是有个问题,接收的信息码怎样和拨码开关的状态比较控制输出呢。QQ:1256472716谢谢!

出0入0汤圆

发表于 2011-9-5 18:33:05 | 显示全部楼层
我用的接受芯片是SM0038,多好用,距离能达到10多米。编码方式自己写的。

出0入0汤圆

 楼主| 发表于 2011-9-6 23:29:39 | 显示全部楼层
回复【54楼】dhj1972  
-----------------------------------------------------------------------

不好意思,我不大清楚你的意思!!!我QQ:237981236,有什么我们在一起讨论,呵呵!!!

出0入0汤圆

发表于 2011-9-7 13:59:47 | 显示全部楼层
还是有点晕

出0入0汤圆

发表于 2011-9-7 20:39:09 | 显示全部楼层
解码的问题解决了,下一步学习编码。感谢分享

出0入0汤圆

发表于 2011-9-7 21:46:54 | 显示全部楼层
谢谢楼主的分享精神,能否把原理图也上传上来?让大家看看

出0入0汤圆

发表于 2011-9-7 21:56:33 | 显示全部楼层
回复【楼主位】huhuan521
-----------------------------------------------------------------------

借鉴一下

出0入0汤圆

发表于 2011-9-8 16:13:04 | 显示全部楼层
参考一下,谢谢分享

出0入0汤圆

发表于 2011-9-8 23:53:27 | 显示全部楼层
啊!太感谢楼主了  最近刚刚好在研究AT89c52单片机的红外解码原理以及程序    太感谢了

出0入0汤圆

发表于 2011-9-10 11:07:47 | 显示全部楼层
这个是好东西 要顶啊

出0入0汤圆

发表于 2011-9-10 12:31:19 | 显示全部楼层
看了你的程序后有个问题,那个端口定义可以有什么作用呀?

出0入0汤圆

发表于 2011-9-10 12:33:46 | 显示全部楼层
回复【17楼】Tankng
-----------------------------------------------------------------------

你好,可以把你做的打分器的思路说来听听吗?我准备下下学期的学校举行的一个嵌入式比赛,谢谢了!QQ:734370542   单独交流吧

出0入0汤圆

 楼主| 发表于 2011-9-11 15:00:37 | 显示全部楼层
回复【55楼】sensiiveplant  
-----------------------------------------------------------------------

希望把资料上上来大家一起学习学习!呵呵

出0入0汤圆

发表于 2011-9-13 21:11:01 | 显示全部楼层
楼主你的程序好像无法识别0x00哦,发送一个char=0的话,接收端没有识别,这样就容易产生错误

出0入0汤圆

发表于 2011-9-13 22:10:02 | 显示全部楼层
不好意思  看错了。。。ls误会

出0入0汤圆

发表于 2011-9-18 11:01:54 | 显示全部楼层
楼主用的什么遥控器啊

出0入0汤圆

 楼主| 发表于 2011-9-22 20:23:49 | 显示全部楼层
回复【69楼】28571840  老实人
-----------------------------------------------------------------------

就是一般的电视机遥控器,驱动的协议和TC9012这个是一样的,资料我也附上了!呵呵1

出0入0汤圆

发表于 2011-9-23 13:11:30 | 显示全部楼层
有个问题:看你的图,你好像是在用PROTEUS在仿真。这个可以仿真么?还有你有定时器产生的38KHZ的载波,你怎么把数据波(你的编码数据)加载到38KHZ的载波上的呢。把完整的图贴出来吧

出0入0汤圆

发表于 2011-9-23 17:21:14 | 显示全部楼层
谢谢楼主分享啊,资料拿走了...

出0入0汤圆

发表于 2011-9-27 22:18:00 | 显示全部楼层
mark~

出0入0汤圆

发表于 2011-9-28 08:28:38 | 显示全部楼层
回复【楼主位】huhuan521
-----------------------------------------------------------------------

不错.

出0入0汤圆

发表于 2011-9-30 14:48:13 | 显示全部楼层
回复【楼主位】huhuan521
-----------------------------------------------------------------------

make!!!look

出0入0汤圆

 楼主| 发表于 2011-10-1 09:53:28 | 显示全部楼层
回复【71楼】junjun2xx  
-----------------------------------------------------------------------

不是,我做的是实物,由于当时没有相机,所以就没有给大家上传实物图!我感觉这里唯一的一个电路图就是发射段的,所以当时就拿proteus画了一个,我这里是一次发送一字节的数据;是通过下面这段代码实现的,我用的是一个8位拨码开关,改变ir_data,改天给大家把实物上传一下!
//发送一字节 8位  
void Send_Char(uchar ir_data)  
{  
unsigned char i,j;  
j=ir_data;  
Send_Start_Bit();            //发射引导吗
for(i=0;i<8;i++)  
{  
if(j&0x01)  
Send_Bit_1();  
else  
Send_Bit_0();  
j=j>>1;          //先发射低位
}  
Send_over();         //结束符
}  
__________________________

出0入0汤圆

发表于 2011-10-18 23:57:08 | 显示全部楼层
TH1=256-(1000*12/38.0/12)/2+0.5;                                                        //特殊
        TL1=TH1;
-------------------------------------------
上面这个怎么理解?

出0入0汤圆

发表于 2011-10-19 00:16:18 | 显示全部楼层
回复【77楼】myem007
-----------------------------------------------------------------------

TH1=256-(1000*12/38.0/12)/2+0.5; //特殊

12M晶振,12T定时, 0.5是为了四舍五入  ,产生38K频率 ,1M=1000K,单位等同方便运算

STC的芯片资料里面有介绍的

出0入0汤圆

发表于 2011-10-19 08:42:23 | 显示全部楼层
借鉴了,用来给刻度盘做电子找零

出0入0汤圆

发表于 2011-10-19 09:36:38 | 显示全部楼层
最近在研究这个,学习下。

出0入0汤圆

发表于 2011-10-19 11:10:36 | 显示全部楼层
学习来了

出0入0汤圆

发表于 2011-12-2 10:27:07 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2012-4-11 19:11:28 | 显示全部楼层
   参考下

出0入0汤圆

发表于 2012-4-11 21:39:02 | 显示全部楼层
MARK^^

出0入0汤圆

发表于 2012-4-19 16:35:01 | 显示全部楼层
这里的发射部分按键是怎么理解的,好像没有定义具体的那个按键啊。

出0入0汤圆

发表于 2012-4-19 22:17:50 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2012-4-25 09:32:25 | 显示全部楼层
这个正好用得上!!!谢谢分享!!!!

出0入0汤圆

发表于 2012-5-16 10:11:13 | 显示全部楼层
标记学习!!

出0入0汤圆

发表于 2012-5-16 11:05:05 | 显示全部楼层
这个我以前也做过,关进是要理解红外编码解码的原理

出0入0汤圆

发表于 2012-10-3 23:27:23 | 显示全部楼层
感谢楼主了!!!!!!!就是没弄明白载波信号怎么回事儿~~~~~~~~第一次上这个论坛,希望楼主加我QQ:396329896

出0入0汤圆

发表于 2012-10-3 23:27:40 | 显示全部楼层
谢谢楼主的源码了

出0入0汤圆

发表于 2012-10-3 23:30:54 来自手机 | 显示全部楼层
5M 是反射式的吗? 这个距离很远啊

出0入0汤圆

发表于 2012-10-5 09:50:24 | 显示全部楼层
不错哦,单片机就实现了,很棒

出0入0汤圆

发表于 2012-11-30 12:58:47 | 显示全部楼层
我也在学习。苦于没有例子啊

出0入0汤圆

发表于 2012-11-30 20:35:20 | 显示全部楼层

出0入0汤圆

发表于 2012-11-30 21:05:50 | 显示全部楼层
移植到89C2051上,没有成功,不知道啥原因!
有知道的吗?

出0入0汤圆

发表于 2013-3-2 15:21:56 | 显示全部楼层
不错,收藏看看,谢谢LZ

出0入0汤圆

发表于 2013-7-16 15:52:27 | 显示全部楼层
红外发射 接收

出0入0汤圆

发表于 2016-3-9 20:29:43 | 显示全部楼层
非常谢谢无私分享

出0入0汤圆

发表于 2016-3-13 20:22:19 | 显示全部楼层
你好,按照你的发码程序的写法,在发送38K方波时,频率不稳定有的37.7KHz或者有时39K多,不知道是什么原因啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 08:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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