5268|11

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求红外遥控资料 [复制链接]

我的目的:
想知道常用红外遥控器(电视、空调、手机、特别是那种万能遥控器)的,原理(最好有所用芯片型号、电路图资料);
及编码方法(编码应该是通用的吧,我的遥控器控制另一台空调只要设置下型号码就行);
用单片机加红外接收器识别这些编码的方法;
用单片机加红外发射器模拟一个徭控器的方法。

当然如果有谁能给出最后一个问题的资料,那前面几个都解决了。
我自己已找了些(过会传上),但说得太。。。反正我看得头晕,还不知道这些资料讲得哪种徭控器用在什么方面的。。。尤其那些个所谓的加了详细注释的示例程序。。。。
有没有谁有全面的介绍我的需求的资料?

最新回复

我有详细资料.QQ:506380332  详情 回复 发表于 2009-1-9 12:08
点赞 关注

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不得不顶
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
真的没人做过么?总得来个接分的嘛,要不我的分就浪费了。。。。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
不懂,帮顶
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 
不懂,帮顶
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
请联系我吧

 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
请联系我吧,我的方案让你偷着乐!13947374739 难题找我试试吧.
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 

建议取2@1ic上找找答案,也许会有收获。

 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

9
 
编码当然不是通用的,可以说有几个家电品牌就有几个遥控器编码,不过常用的就有那几种。万能遥控器只是一种编码一种编码的尝试,直到尝试出有作用的编码为止。
这里有各种遥控器的编码时序图,
http://soft.cnidz.com/soft/UploadFile/2008-1/20081141543983919.rar
遥控器的红外编码芯片有很多种,你随便打开一个遥控器就能找到一种。建议LZ可以买几种遥控器,然后用示波器观察编码波形。
下面是常用的一款遥控器芯片的资料:http://www.szkexinda.com/soft/M50560.pdf
只要知道了编码方式,怎么去做解码的程序就是考验LZ的事情,不要告诉我你不知道怎么写解码程序,呵呵
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
给你一个C51代码,WORD说明有图,发不上来,就算了,如果需要可与我联系.


  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include

  8. #define uchar unsigned char
  9. #define uint unsigned int
  10. #define ulong unsigned long

  11. sbit sm1623_dout=P1^0;
  12. sbit sm1623_din=P1^1;
  13. sbit sm1623_clk=P1^2;
  14. sbit sm1623_stb=P1^3;
  15. sbit hw_send=P1^4;
  16. sbit sound=P1^5;
  17. sbit P3_2=P3^2;

  18. void delay(uchar delay_temp);//长延时
  19. void delaym(uchar delaym_temp);//短延时
  20. void disp(uchar dis);
  21. void display();
  22. uchar key(void);
  23. uchar key_deal(void);

  24. uchar i,j,k;
  25. uchar temp_1,temp_2;
  26. uchar code_dis[6];
  27. uchar pulse;
  28. uchar hw[34];

  29. const uchar code hw_t[13]={3,2,3,2,6,2,3,2,3,2,3,2,3};
  30. const uchar code hw_1[12]={2,3,2,3,2,3,2,3,2,3,5,3};
  31. const uchar code hw_2[12]={2,3,2,3,2,3,2,3,5,6,0,0};
  32. const uchar code hw_3[12]={2,3,2,3,2,3,2,3,5,3,2,3};
  33. const uchar code hw_4[12]={2,3,2,3,2,3,5,6,2,3,0,0};
  34. const uchar code hw_5[12]={2,3,2,3,2,3,5,6,5,3,0,0};
  35. const uchar code hw_6[12]={2,3,2,3,2,3,5,3,2,6,0,0};
  36. const uchar code hw_7[12]={2,3,2,3,2,3,5,3,2,3,2,3};
  37. const uchar code hw_8[12]={2,3,2,3,5,6,2,3,2,3,0,0};
  38. const uchar code hw_9[12]={2,3,2,3,5,6,2,3,5,3,0,0};
  39. const uchar code hw_0[12]={2,3,2,3,2,3,2,3,2,3,2,3};

  40. //红外测试程序
  41. exint0() interrupt 0
  42. {
  43.         TR0=0;TR1=0;//关闭定时器0、1
  44.         if(pulse>15)
  45.         {
  46.                 TR0=0;TR1=0;
  47.                 TL0=0;TH0=0;TL1=0;TH1=0;
  48.                 pulse=0;
  49.                 return;
  50.         }
  51.        
  52.         hw[pulse*2]=TH1-TH0;//低电平宽度
  53.         hw[pulse*2+1]=TH0;//高电平宽度
  54.         TL0=0;TH0=0;TL1=0;TH1=0;//定时器赋初值
  55.         TR0=1;TR1=1;//打开定时器0、1
  56.         delaym(10);//延时判断是否是干扰脉冲(干扰脉冲比较窄)
  57.         P3_2=1;//判断INT0输入端是否为高电平,如是高电平说明是干扰脉冲
  58.         if(P3_2==1)
  59.         {
  60.                 TR0=0;TR1=0;
  61.                 TL0=0;TH0=0;TL1=0;TH1=0;
  62.                 pulse=0;
  63.                 return;
  64.         }
  65.         pulse++;
  66. }

  67. timer0() interrupt 1
  68. {
  69.         uchar i;
  70.         if(temp_2==0)//红外接收
  71.         {
  72.                 TR0=0;TR1=0;//关定时器
  73.                 TL0=0;TH0=0;TL1=0;TH1=0;//定时器赋初值
  74.                 pulse=0;
  75.                 for(i=0;i<16;i++)
  76.                 {
  77.                         hw[2*i]=0;
  78.                         hw[2*i+1]=0;
  79.                 }
  80.                 hw[20]=0;
  81.         }
  82.         else//红外发送
  83.         {
  84.                 if(pulse==26)
  85.                 {
  86.                         EA=0;
  87.                         TR0=0;//关闭定时器0
  88.                         hw_send=1;
  89.                         return;
  90.                 }
  91.                 if(hw[pulse]!=0)
  92.                 {
  93.                         TH0=0xff-hw[pulse];
  94.                         TL0=0xe0;
  95.                         pulse++;
  96.                         hw_send=!hw_send;
  97.                 }
  98.                 else//遇到最后一个脉冲
  99.                 {
  100.                         EA=0;
  101.                         TR0=0;//关闭定时器0
  102.                         hw_send=1;
  103.                         pulse=26;
  104.                 }
  105.         }
  106. }

  107. timer1() interrupt 3
  108. {
  109.         uchar i;
  110.         EA=0;
  111.         TR0=0;TR1=0;
  112.         hw[2*pulse]=256-TH0;//可以计算最后一个低电平宽度
  113.         TL0=0;TH0=0;TL1=0;TH1=0;
  114.        
  115.         //获得遥控按键键值并显示
  116.         if(memcmp(hw+15,hw_1,12)==0)
  117.         {
  118.                 sound=0;//鸣响
  119.                 code_dis[5]=1;
  120.                 display();
  121.                 goto hw_ok;
  122.         }
  123.         if(memcmp(hw+15,hw_2,12)==0)
  124.         {
  125.                 sound=0;//鸣响
  126.                 code_dis[5]=2;
  127.                 display();
  128.                 goto hw_ok;
  129.         }
  130.         if(memcmp(hw+15,hw_3,12)==0)
  131.         {
  132.                 sound=0;//鸣响
  133.                 code_dis[5]=3;
  134.                 display();
  135.                 goto hw_ok;
  136.         }
  137.         if(memcmp(hw+15,hw_4,12)==0)
  138.         {
  139.                 sound=0;//鸣响
  140.                 code_dis[5]=4;
  141.                 display();
  142.                 goto hw_ok;
  143.         }
  144.         if(memcmp(hw+15,hw_5,12)==0)
  145.         {
  146.                 sound=0;//鸣响
  147.                 code_dis[5]=5;
  148.                 display();
  149.                 goto hw_ok;
  150.         }
  151.         if(memcmp(hw+15,hw_6,12)==0)
  152.         {
  153.                 sound=0;//鸣响
  154.                 code_dis[5]=6;
  155.                 display();
  156.                 goto hw_ok;
  157.         }
  158.         if(memcmp(hw+15,hw_7,12)==0)
  159.         {
  160.                 sound=0;//鸣响
  161.                 code_dis[5]=7;
  162.                 display();
  163.                 goto hw_ok;
  164.         }
  165.         if(memcmp(hw+15,hw_8,12)==0)
  166.         {
  167.                 sound=0;//鸣响
  168.                 code_dis[5]=8;
  169.                 display();
  170.                 goto hw_ok;
  171.         }
  172.         if(memcmp(hw+15,hw_9,12)==0)
  173.         {
  174.                 sound=0;//鸣响
  175.                 code_dis[5]=9;
  176.                 display();
  177.                 goto hw_ok;
  178.         }
  179.         if(memcmp(hw+15,hw_0,12)==0)
  180.         {
  181.                 sound=0;//鸣响
  182.                 code_dis[5]=0;
  183.                 display();
  184.         }
  185. hw_ok:        pulse=0;
  186.         for(i=0;i<16;i++)
  187.         {
  188.                 hw[2*i]=0;
  189.                 hw[2*i+1]=0;
  190.         }
  191.         hw[20]=0;
  192.         EA=1;
  193. }

  194. main(void)
  195. {
  196. start:       
  197.         hw_send=1;
  198.         temp_2=0;
  199.         //---------------------------------------红外接收测试
  200.         pulse=0;
  201.         EA=0;
  202.         TL0=0;
  203.         TH0=0;
  204.         TL1=0;
  205.         TH1=0;
  206.         TMOD=0x19;//T0受INT0控制、T0、T1为定时,工作方式1
  207.         IT0=1;//外部中断0为边沿触发方式
  208.         EX1=0;//不允许INT1中断
  209.         EX0=1;//允许INT0中断
  210.         ET1=1;//允许T1中断
  211.         ET0=1;//允许T0中断
  212.         EA=1;//允许中断
  213.        
  214.         for(i=0;i<5;i++)code_dis[i]=13;
  215.         code_dis[5]=10;
  216.         display();//最后一位显示黑
  217.         while(key_deal()!=8)
  218.         {
  219.                 delay(0xff);
  220.                 if(code_dis[5]!=10)
  221.                 {
  222.                         sound=1;//关鸣响
  223.                         code_dis[5]=10;
  224.                         display();//最后一位显示黑
  225.                 }
  226.         }
  227.        
  228.         //---------------------------------------红外发送测试
  229.         EA=0;//关中断
  230.         temp_2=0xff;//表示定时器0中断中执行红外发送程序
  231.         pulse=26;
  232.         TL0=0;
  233.         TH0=0;
  234.         TL1=0;
  235.         TH1=0;
  236.         EX1=0;//不允许INT1中断
  237.         EX0=0;//不允许INT0中断
  238.         ET1=0;//不允许T1中断
  239.         ET0=1;//允许T0中断
  240.         code_dis[5]=10;
  241.         display();
  242.         sound=0;
  243.         delay(0xff);
  244.         sound=1;
  245.         memcpy(hw,hw_t,15);
  246.         for(i=0;i<5;i++)code_dis[i]=14;
  247.         code_dis[5]=10;
  248.         display();
  249.        

复制代码
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

11
 
接上

  1.         while(1)
  2.         {
  3.                 temp_1=key_deal();
  4.                 switch(temp_1)
  5.                 {
  6.                         case 1:
  7.                                 EA=0;
  8.                                 goto start;
  9.                                 break;
  10.                         case 2:
  11.                                 if(pulse==26)
  12.                                 {
  13.                                         delay(0xff);
  14.                                         pulse=0;
  15.                                         memcpy(hw+13,hw_2,12);
  16.                                         TH0=0xff-hw[pulse];
  17.                                         TL0=0xe0;
  18.                                         pulse++;
  19.                                         hw_send=0;
  20.                                         EA=1;//允许中断
  21.                                         TR0=1;//打开定时器0
  22.                                 }
  23.                                 sound=0;
  24.                                 code_dis[5]=2;
  25.                                 display();
  26.                                 break;
  27.                         case 3:
  28.                                 if(pulse==26)
  29.                                 {
  30.                                         delay(0xff);
  31.                                         pulse=0;
  32.                                         memcpy(hw+13,hw_3,12);
  33.                                         TH0=0xff-hw[pulse];
  34.                                         TL0=0xe0;
  35.                                         pulse++;
  36.                                         hw_send=0;
  37.                                         EA=1;//允许中断
  38.                                         TR0=1;//打开定时器0
  39.                                 }
  40.                                 sound=0;
  41.                                 code_dis[5]=3;
  42.                                 display();
  43.                                 break;
  44.                         case 4:
  45.                                 if(pulse==26)
  46.                                 {
  47.                                         delay(0xff);
  48.                                         pulse=0;
  49.                                         memcpy(hw+13,hw_4,12);
  50.                                         TH0=0xff-hw[pulse];
  51.                                         TL0=0xe0;
  52.                                         pulse++;
  53.                                         hw_send=0;
  54.                                         EA=1;//允许中断
  55.                                         TR0=1;//打开定时器0
  56.                                 }
  57.                                 sound=0;
  58.                                 code_dis[5]=4;
  59.                                 display();
  60.                                 break;
  61.                         case 5:
  62.                                 if(pulse==26)
  63.                                 {
  64.                                         delay(0xff);
  65.                                         pulse=0;
  66.                                         memcpy(hw+13,hw_5,12);
  67.                                         TH0=0xff-hw[pulse];
  68.                                         TL0=0xe0;
  69.                                         pulse++;
  70.                                         hw_send=0;
  71.                                         EA=1;//允许中断
  72.                                         TR0=1;//打开定时器0
  73.                                 }
  74.                                 sound=0;
  75.                                 code_dis[5]=5;
  76.                                 display();
  77.                                 break;
  78.                         case 6:
  79.                                 if(pulse==26)
  80.                                 {
  81.                                         delay(0xff);
  82.                                         pulse=0;
  83.                                         memcpy(hw+13,hw_6,12);
  84.                                         TH0=0xff-hw[pulse];
  85.                                         TL0=0xe0;
  86.                                         pulse++;
  87.                                         hw_send=0;
  88.                                         EA=1;//允许中断
  89.                                         TR0=1;//打开定时器0
  90.                                 }
  91.                                 sound=0;
  92.                                 code_dis[5]=6;
  93.                                 display();
  94.                                 break;
  95.                         case 7:
  96.                                 if(pulse==26)
  97.                                 {
  98.                                         delay(0xff);
  99.                                         pulse=0;
  100.                                         memcpy(hw+13,hw_7,12);
  101.                                         TH0=0xff-hw[pulse];
  102.                                         TL0=0xe0;
  103.                                         pulse++;
  104.                                         hw_send=0;
  105.                                         EA=1;//允许中断
  106.                                         TR0=1;//打开定时器0
  107.                                 }
  108.                                 sound=0;
  109.                                 code_dis[5]=7;
  110.                                 display();
  111.                                 break;
  112.                         case 8:
  113.                                 if(pulse==26)
  114.                                 {
  115.                                         delay(0xff);
  116.                                         pulse=0;
  117.                                         memcpy(hw+13,hw_8,12);
  118.                                         TH0=0xff-hw[pulse];
  119.                                         TL0=0xe0;
  120.                                         pulse++;
  121.                                         hw_send=0;
  122.                                         EA=1;//允许中断
  123.                                         TR0=1;//打开定时器0
  124.                                 }
  125.                                 sound=0;
  126.                                 code_dis[5]=8;
  127.                                 display();
  128.                                 break;
  129.                         default:
  130.                                 if(pulse==26)
  131.                                 {
  132.                                         sound=1;
  133.                                         hw_send=1;
  134.                                         TR0=0;//关定时器0
  135.                                         EA=0;
  136.                                 }
  137.                                 break;
  138.                 }
  139.         }       
  140. }

  141. void delay(uchar delay_temp)//延时子程序
  142. {
  143.         uchar i,j;
  144.         for(i=0;i
  145.         {
  146.                 for(j=0;j<255;j++);
  147.         }
  148. }

  149. void delaym(uchar delaym_temp)//延时子程序
  150. {
  151.         uchar i;
  152.         for(i=0;i
  153. }

  154. void disp(uchar dis)//送显示命令子程序
  155. {
  156.         uchar dis_i,dis_temp;
  157.         dis_temp=0x01;
  158.         for(dis_i=0;dis_i<8;dis_i++)
  159.         {
  160.                 sm1623_clk=0;
  161.                 delaym(1);
  162.                 if((dis&dis_temp)==0){sm1623_din=0;}
  163.                 else{sm1623_din=1;}
  164.                 sm1623_clk=1;//上升沿输入数据
  165.                 delaym(1);
  166.                 dis_temp=dis_temp<<1;
  167.         }
  168. }

  169. void display()//显示子程序
  170. {
  171.         uchar code_dis_d[6];
  172.         uchar i;
  173.         for(i=0;i<6;i++)//计算显示码
  174.         {
  175.                 switch(code_dis[i])
  176.                 {
  177.                         case 1:
  178.                                 code_dis_d[i]=0x06;
  179.                                 break;
  180.                         case 2:
  181.                                 code_dis_d[i]=0x5b;
  182.                                 break;
  183.                         case 3:
  184.                                 code_dis_d[i]=0x4f;
  185.                                 break;
  186.                         case 4:
  187.                                 code_dis_d[i]=0x66;
  188.                                 break;
  189.                         case 5:
  190.                                 code_dis_d[i]=0x6d;
  191.                                 break;
  192.                         case 6:
  193.                                 code_dis_d[i]=0x7d;
  194.                                 break;
  195.                         case 7:
  196.                                 code_dis_d[i]=0x07;
  197.                                 break;
  198.                         case 8:
  199.                                 code_dis_d[i]=0x7f;
  200.                                 break;
  201.                         case 9:
  202.                                 code_dis_d[i]=0x6f;
  203.                                 break;
  204.                         case 10://显示黑
  205.                                 code_dis_d[i]=0x00;
  206.                                 break;
  207.                         case 11://显示A
  208.                                 code_dis_d[i]=0x77;
  209.                                 break;
  210.                         case 12://显示d
  211.                                 code_dis_d[i]=0x5e;
  212.                                 break;
  213.                         case 13://显示-
  214.                                 code_dis_d[i]=0x40;
  215.                                 break;
  216.                         case 14://显示8.
  217.                                 code_dis_d[i]=0xff;
  218.                                 break;
  219.                         default://显示0
  220.                                 code_dis_d[i]=0x3f;
  221.                                 break;
  222.                 }
  223.         }
  224.         sm1623_stb=0;
  225.         disp(0x02);//显示模式6位12段
  226.         sm1623_stb=1;
  227.         delaym(1);
  228.         sm1623_stb=0;
  229.         disp(0x40);//设置数据
  230.         sm1623_stb=1;
  231.         delaym(1);
  232.         sm1623_stb=0;
  233.         disp(0xc0);//设置地址
  234.         disp(code_dis_d[0]);//1
  235.         disp(0x00);
  236.         disp(code_dis_d[1]);//2
  237.         disp(0x00);
  238.         disp(code_dis_d[2]);//3
  239.         disp(0x00);
  240.         disp(code_dis_d[3]);//4
  241.         disp(0x00);
  242.         disp(code_dis_d[4]);//5
  243.         disp(0x00);
  244.         disp(code_dis_d[5]);//6
  245.         disp(0x00);
  246.         sm1623_stb=1;
  247.         delaym(1);
  248.         sm1623_stb=0;
  249.         disp(0x8a);//控制显示
  250.         sm1623_stb=1;
  251. }

  252. uchar key(void)//按键读数据子程序
  253. {
  254.         uchar key_i,key_temp,key_re;
  255.         key_temp=0x00;
  256.         for(key_i=0;key_i<8;key_i++)
  257.         {
  258.                 sm1623_clk=0;//下降沿输出数据
  259.                 delaym(1);
  260.                 if(sm1623_dout==0){key_temp=key_temp&0x7f;}
  261.                 else{key_temp=key_temp|0x80;}
  262.                 key_re=key_temp;
  263.                 sm1623_clk=1;
  264.                 delaym(1);
  265.                 key_temp=key_temp>>1;
  266.         }
  267.         return key_re;
  268. }

  269. uchar key_deal(void)//按键处理子程序,返回按键编号
  270. {
  271.         uchar temp_k1,temp_k2;
  272.         sm1623_stb=0;
  273.         disp(0x42);//读键扫数据指令
  274.         temp_k1=key()&0x1b;
  275.         temp_k2=key()&0x1b;
  276.         sm1623_stb=1;//取消片选,如果没有此语句按键5时,会出现按键1被按下的现象
  277.         if(temp_k1!=0x00)
  278.         {
  279.                 switch(temp_k1)
  280.                 {
  281.                         case 0x01:
  282.                                 return 0x01;
  283.                                 break;
  284.                         case 0x02:
  285.                                 return 0x02;
  286.                                 break;
  287.                         case 0x08:
  288.                                 return 0x03;
  289.                                 break;
  290.                         case 0x10:
  291.                                 return 0x04;
  292.                                 break;
  293.                         default:
  294.                                 return 0x00;
  295.                                 break;
  296.                 }
  297.         }
  298.         if(temp_k2!=0x00)
  299.         {
  300.                 switch(temp_k2)
  301.                 {
  302.                         case 0x01:
  303.                                 return 0x05;
  304.                                 break;
  305.                         case 0x02:
  306.                                 return 0x06;
  307.                                 break;
  308.                         case 0x08:
  309.                                 return 0x07;
  310.                                 break;
  311.                         case 0x10:
  312.                                 return 0x08;
  313.                                 break;
  314.                         default:
  315.                                 return 0x00;
  316.                                 break;
  317.                 }
  318.         }
  319.         return 0x00;
  320. }
复制代码
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
我有详细资料.QQ:506380332
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表