找回密码
 立即注册

QQ登录

只需一步,快速开始

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

大家好,谁有红外线解码程序,求大神们发个,谢谢了!!。。。

[复制链接]
跳转到指定楼层
楼主
ID:83228 发表于 2015-7-19 11:02 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
红外解码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2015-7-19 23:38 | 只看该作者
这里有 红外解码详解http://www.51hei.com/mcu/184.html
回复

使用道具 举报

板凳
ID:85124 发表于 2015-7-22 17:18 | 只看该作者
好贴,楼上么么哒
回复

使用道具 举报

地板
ID:83228 发表于 2015-7-23 19:47 来自手机 | 只看该作者
admin 发表于 2015-7-19 23:38
这里有 红外解码详解http://www.51hei.com/mcu/184.html

谢谢昂
回复

使用道具 举报

5#
ID:79544 发表于 2015-7-24 09:55 | 只看该作者
这是我现在
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar code table_we[]={
  6.           0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  7. uchar code table_du[]={0xC0,0xF9,0xA4,0xB0,0x99,
  8.                                         0x92,0x82,0xf8,0x80,0x90,0x88,
  9.                                         0x83,0xC6,0xA1,0x86,0x8E};
  10. sbit ir=P3^3;
  11. sbit a=P0^0;//LED或小车端口
  12. sbit b=P0^1;//LED或小车端口
  13. sbit c=P0^2;//LED或小车端口
  14. sbit d=P0^3;//LED或小车端口
  15. uchar irtime;//红外时间变量
  16. uchar irdata[33];//
  17. uchar bitnum;//第几位
  18. uchar startflag;//起始标志位
  19. uchar irok;//接收结束变量
  20. uchar ircode[4];

  21. uchar irprosok;
  22. uchar disnum[4];
  23. //uchar disnum[8];

  24. sbit duan=P0^6;
  25. sbit wei=P0^7;


  26. void timer0init(void) //256*(1/12m)*12=0.256ms
  27. {
  28.         TMOD=0x02;//方式2
  29.         TH0=0x00;
  30.         TL0=0x00;
  31.         ET0=1;
  32.         EA=1;
  33.         TR0=1;
  34. }
  35. void irpros(void) // 红外码值处理
  36. {
  37.         uchar mun,k,i,j;
  38.         k=1;
  39.         for(j=0;j<4;j++)//读出4个码循环4次
  40.         {
  41.                 for(i=0;i<8;i++)
  42.                 {
  43.                         mun=mun>>1;//右移7次
  44.                         if(irdata[k]>7)//判断8次 大于6是高电平,小于6是低电平
  45.                         {
  46.                                 mun=mun | 0x80;
  47.                         }
  48.                                 k++;
  49.                 }
  50.                 ircode[j]=mun;
  51.         }
  52.         irprosok=1;
  53. }

  54. void irwork(void) // 红外码值转换
  55. {
  56.         disnum[0]=ircode[0]/16;
  57.         disnum[1]=ircode[0]%16;
  58. //        disnum[2]=ircode[1]/16;
  59. //        disnum[3]=ircode[1]%16;
  60.         disnum[2]=ircode[2]/16;
  61.         disnum[3]=ircode[2]%16;
  62. //        disnum[6]=ircode[3]/16;
  63. //        disnum[7]=ircode[3]%16;

  64. }

  65. void delay(uchar x)
  66. {
  67.         uchar a,b;
  68.         for(a=x;a>0;a--)
  69.                 for(b=200;b>0;b--);

  70. }
  71. void display()//显示
  72. {
  73.         P2=0xfe;
  74.         wei=1;
  75.         wei=0;
  76.         delay(5);

  77.         P2=table_du[disnum[0]];
  78.         delay(5);
  79.         duan=1;
  80.         duan=0;
  81.         P2=0xff;

  82.         P2=0xfd;
  83.         wei=1;
  84.         wei=0;
  85.         delay(5);

  86.         P2=table_du[disnum[1]];
  87.         delay(5);
  88.         duan=1;
  89.         duan=0;
  90.         P2=0xff;

  91.         P2=0xfb;
  92.         wei=1;
  93.         wei=0;
  94.         delay(5);

  95.         P2=table_du[disnum[2]];
  96.         delay(5);
  97.         duan=1;
  98.         duan=0;
  99.         P2=0xff;

  100.         P2=0xf7;
  101.         wei=1;
  102.         wei=0;
  103.         delay(5);

  104.         P2=table_du[disnum[3]];
  105.         delay(5);
  106.         duan=1;
  107.         duan=0;
  108.         P2=0xff;
  109.        
  110. }


  111. void int0init(void)//外部中断初始化
  112. {
  113. IT1=1;//下降沿触发
  114. EX1=1;//开外部中断
  115. EA=1;//开总中断
  116. }


  117. void main()
  118. {
  119.         timer0init();
  120.         int0init();
  121.         while(1)
  122.         {
  123.                 if(irok==1)
  124.                 {
  125.                         irpros();
  126.                         irok=0;
  127.                 }
  128.                 if(irprosok==1)
  129.                 {
  130.                         irwork();
  131.                         irprosok=0;
  132.                 }
  133.                   display();
  134.                
  135.         }
  136.                
  137. }

  138. void int0 () interrupt 2 //外部0中断服务
  139. {
  140. if(startflag)
  141. {
  142. // if(irtime>32&&irtime<63)  //8-16ms检测引导码
  143.         if(irtime>32)
  144.         {
  145.            bitnum=0;
  146.         }
  147.         irdata[bitnum]=irtime;
  148.         irtime=0;
  149.         bitnum++;
  150.         if(bitnum==33)//接收结束
  151.           {
  152.            bitnum=0;
  153.            irok=1;
  154.           }
  155. }
  156. else
  157. {
  158.         startflag=1;
  159.         irtime=0;
  160. }
  161. }

  162. void timer0 () interrupt 1//定时器0中断服务函数
  163. {
  164.         irtime++;
  165. }
复制代码
用的红外解码程序。解码数值用数码管显示。
回复

使用道具 举报

6#
ID:83228 发表于 2015-7-24 10:33 来自手机 | 只看该作者
腾飞的龙 发表于 2015-7-24 09:55
这是我现在用的红外解码程序。解码数值用数码管显示。

好东西,谢了昂
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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