标题: 基于51单片机的红外遥控灯 原理图及程序 [打印本页]

作者: 强国    时间: 2017-5-8 17:23
标题: 基于51单片机的红外遥控灯 原理图及程序
红外遥控灯单片机原理图:




单片机源程序:
  1. //头函数
  2. #include <reg52.h>
  3. //宏定义
  4. #define uint unsigned int
  5. #define uchar unsigned char

  6. //时间计算
  7. #define Imax 14000    //此处为晶振为11.0592时的取值,
  8. #define Imin 8000    //如用其它频率的晶振时,
  9. #define Inum1 1450    //要改变相应的取值。
  10. #define Inum2 700
  11. #define Inum3 3000
  12. sbit led1=P2^3;
  13. sbit led2=P2^0;
  14. //解码变量
  15. unsigned char Im[4]={0x00,0x00,0x00,0x00};

  16. //全局变量
  17. uchar f;
  18. unsigned long m,Tc;
  19. unsigned char IrOK;


  20. //主函数
  21. void main()
  22. {
  23.         P2=0xff;
  24.        
  25.         EA=1;//开启总中断
  26.          
  27.         IT1=1;//下降沿有效
  28.         EX1=1;//外部中断1开
  29.          
  30.         TMOD=0x01;//定时器初始化  
  31.         TH0=0;//T0赋初值
  32.         TL0=0;
  33.         TR0=0;//t0开始计时
  34.         while(1)
  35.         {
  36.                 if(IrOK==1)
  37.                 {
  38.                         //1键
  39.                         if(Im[2]==0x0c)
  40.                         {
  41.                            P2=0x00;
  42.                  led1=0;
  43.                         }
  44.                         //2键
  45.                         else if(Im[2]==0x18)
  46.                         {
  47.                            //P2=0xa2;
  48.                                     led1=1;
  49.                         }
  50.                         //3键
  51.                         else if(Im[2]==0x5e)
  52.                         {
  53.                            P2=0xb0;
  54.                         }
  55.                         //4
  56.                         else if(Im[2]==0x08)
  57.                         {
  58.                           // P2=0x08;
  59.                                    led2=0;
  60.                         }
  61.                         //5
  62.                         else if(Im[2]==0x1c)
  63.                         {
  64.                           // P2=0x91;
  65.                                    led2=1;
  66.                         }
  67.                         //6
  68.                         else if(Im[2]==0x5a)
  69.                         {
  70.                            P2=0x8c;
  71.                         }
  72.                         //7键
  73.                         else if(Im[2]==0x42)
  74.                         {
  75.                            P2=0xf8;
  76.                         }
  77.                         //8
  78.                         else if(Im[2]==0x52)
  79.                         {
  80.                            P2=0x80;
  81.                         }
  82.                         //9
  83.                         else if(Im[2]==0x4a)
  84.                         {
  85.                            P2=0x90;
  86.                         }
  87.                         //0
  88.                         else if(Im[2]==0x16)
  89.                         {
  90.                            P2=0xc0;
  91.                         }
  92.                         //关机
  93.                         else if(Im[2]==0x45)
  94.                         {
  95.                            P2=0xff;
  96.                         }
  97.                    IrOK=0;          
  98.                 }
  99.         }
  100. }

  101. //外部中断解码程序_外部中断1
  102. void intersvr1(void) interrupt 2 using 1
  103. {
  104. TR0=1;
  105. Tc=TH0*256+TL0;//提取中断时间间隔时长
  106. TH0=0;
  107. TL0=0;         //定时中断重新置零
  108. if((Tc>Imin)&&(Tc<Imax))
  109. {
  110.         m=0;
  111.         f=1;
  112.         return;
  113. }       //找到启始码
  114. if(f==1)
  115. {
  116.     if(Tc>Inum1&&Tc<Inum3)
  117.     {
  118.            Im[m/8]=Im[m/8]>>1|0x80; m++;
  119.     }
  120.     if(Tc>Inum2&&Tc<Inum1)
  121.     {
  122.       Im[m/8]=Im[m/8]>>1; m++; //取码
  123.            }
  124.            if(m==32)
  125.     {
  126.       m=0;  
  127.       f=0;
  128.       if(Im[2]==~Im[3])
  129.       {
  130.            IrOK=1;
  131.                           TR0=0;
  132.            }
  133.       else IrOK=0;   //取码完成后判断读码是否正确


  134. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
完整源码下载:
1-程序.rar (19.54 KB, 下载次数: 334)



作者: jianhua    时间: 2018-4-12 09:33
请问红外遥控接收头发送头怎么找的呢,谢谢了
作者: gbb    时间: 2018-4-17 20:03
程序都是全的吗?
作者: 罗程峰8200    时间: 2018-6-18 01:15
谢谢楼主,这个刚刚好需要,简直就是及时雨的存在,谢谢
作者: denuai    时间: 2018-6-23 16:32
不错,如果把if语句改为swich,程序看起来就舒服点了
作者: 铃恋仙    时间: 2018-10-25 18:17
是发射和接收两个程序么?
作者: yzh166    时间: 2018-10-25 21:52
内容不错,学习了
作者: 小小弹壳    时间: 2018-12-5 20:53
正好是我现在需要的,谢谢了
作者: lll666666    时间: 2019-1-11 15:28
可以,很完整
作者: sjxbm    时间: 2019-1-15 17:50
红外是用什么元器件啊?
作者: llm268    时间: 2019-6-27 12:51
程序都是全的吗?
作者: bengbai4    时间: 2019-12-25 09:31
根本没用
作者: 弹道痕    时间: 2020-5-13 22:59
谢谢分享。
作者: 风流少年叶公子    时间: 2021-10-6 20:44
P1在哪里,软件上找不到
作者: mxdkey    时间: 2021-10-9 16:59
有原理图有代码,赞一下楼主!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1