找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请教一下,单片机开发板上红外遥控LED的问题??

[复制链接]
跳转到指定楼层
楼主
ID:191929 发表于 2017-6-10 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 惜缘2008 于 2017-6-10 22:04 编辑

请教一下,开发板上红外遥控LED的问题??就是按遥控键,开发板上P1口灯一直不亮,是没解码成功吗?
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char   

  4. sbit ir=P3^2;                  //红外接口的位声明
  5. sbit fm=P2^3;                //蜂鸣器的位声明

  6. uchar irtime;
  7. bit irprosok,irok;
  8. uchar ircode[4];
  9. uchar irdata[33];
  10. uchar startflag;
  11. uchar  bitnum;
  12. uchar pwm,num;

  13. void delay(uint ms)   //延时函数
  14. {
  15.     uchar i;
  16.     while(ms--)
  17.     {
  18.         for(i=0;i<120;i++);
  19.     }
  20. }

  21. void bee()                //蜂鸣器函数
  22. {
  23.     fm=0;
  24.     delay(100);
  25.     fm=1;
  26.     delay(100);
  27. }

  28. void timer0init(void)//定时器0初始化 256*(1/12m)*12=0.256ms
  29. {

  30.     TMOD=0x12;//定时器0工作方式1,TH0是重装值,TL0是初值
  31.     TH0=0x00; //重载值
  32.     TL0=0x00; //初始化值
  33.     EA=1;
  34.     ET0=1;    //开中断
  35.     TR0=1;   
  36. }

  37. void tim0_isr (void) interrupt 1 using 1  //定时器0中断服务函数
  38. {
  39.         irtime++;  //用于计数2个下降沿之间的时间
  40. }


  41. void int0init(void)  //外部中断0初始化
  42. {
  43.         IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)
  44.         EX0 = 1;   //使能外部中断
  45.         EA = 1;    //开总中断
  46. }

  47. void timer1init()                                //定时器1初始化,让定时器1每隔500ms中断一次
  48. {
  49.         TMOD=0x12;
  50.         TH1=(65536-500)/256;
  51.         TL1=(65536-500)%256;
  52.         EA=1;
  53.         ET1=1;
  54.         TR1=1;
  55. }

  56. void int1() interrupt 3        //定时器500us中断一次后,进入此中断函数,让num值每次加1,并判断num与pwm值,若小于pwm值,则输出高电平,反之输出低电平
  57. {
  58.         TR1=0;
  59.         TH1=(65536-500)/256;
  60.         TL1=(65536-500)%256;
  61.         num++;
  62.         if(num>32)
  63.         {
  64.                 num=0;
  65.         }
  66.         if(num<=pwm)
  67.                 {
  68.                     P1=0xff;
  69.                 }
  70.         else
  71.                 {
  72.                     P1=0x00;
  73.                 }
  74.         TR1=1;
  75. }



  76. void int0 () interrupt 0 //外部中断0服务函数
  77. {
  78.         if(startflag)
  79.                  {
  80.                   if(irtime>32&&irtime<63)  //8-16ms
  81.                         {
  82.                            bitnum=0;
  83.                         }
  84.                         irdata[bitnum]=irtime;
  85.                         irtime=0;
  86.                         bitnum++;
  87.                         if(bitnum==33)
  88.                           {
  89.                            bitnum=0;
  90.                            irok=1;
  91.                           }
  92.                  }
  93.         else
  94.                  {
  95.                          irtime=0;
  96.                          startflag=1;
  97.                  }
  98. }


  99. void irpros(void) // 红外码值处理
  100. {
  101.         uchar mun,k,i,j;
  102.         k=1;
  103.         for(j=0;j<4;j++)
  104.         {
  105.                 for(i=0;i<8;i++)
  106.                 {
  107.                         mun=mun>>1;
  108.                         if(irdata[k]>6)
  109.                         {
  110.                                 mun=mun | 0x80;
  111.                         }
  112.                                 k++;
  113.                 }
  114.                 ircode[j]=mun;
  115.         }
  116.         irprosok=1;
  117. }


  118. void ir_work(void) //红外键值处理
  119. {
  120.         switch(ircode[2])   //判断第三个数码值
  121.             {
  122.                          case 0x0c:                                //按键1 点亮全部LED灯
  123.                                 {
  124.                                         pwm=0;
  125.                                 }
  126.                          break;                                       

  127.                          case 0x18:                                //按键2增加PWM,让LED灯变亮-----这里的程序不知道该怎么写,写了好几遍都不能进行PWM调光        
  128.                                 {
  129.                                         for(pwm=32;pwm>0;pwm--);
  130.                             }
  131.                         break;                                

  132.                         case 0x5e:                                //这个是按键3,让LED变成30%的亮度,即分段调光
  133.                                 {
  134.                                         pwm=23;
  135.                                 }
  136.                         break;        
  137.                         
  138.                         case 0x08:pwm=32;break;                        //按键4,熄灭全部LED灯

  139.             default:pwm=32;break;                         //默认值,默认上电后LED灯是熄灭状态
  140.                 }         
  141.                   irprosok=0;//处理完成标志
  142. }


  143. void main(void)
  144. {
  145.         int0init(); //初始化外部中断
  146.         timer0init();//初始化定时器
  147.         timer1init();
  148.         num=0;
  149.         pwm=32;   //让PWM值是32,即让单片机上电后LED流水灯的状态是熄灭的。
  150.         while(1)//主循环
  151.                 {
  152.                 if(irok)       //如果接收好了进行红外处理
  153.                   {   
  154.                    irpros();
  155.                    irok=0;
  156.                   }
  157.                
  158.                 if(irprosok)  //如果处理好后进行工作处理
  159.                   {
  160.                    ir_work();
  161.                   }
  162.                 }
  163. }
复制代码

IMG_20170610_211431.jpg (4.57 MB, 下载次数: 48)

IMG_20170610_211431.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:191929 发表于 2017-6-10 21:24 | 只看该作者
刚开始学红外遥控,被难到了,希望有人帮帮我,先谢谢了
回复

使用道具 举报

板凳
ID:189134 发表于 2017-6-10 22:41 | 只看该作者
有示波器或是逻辑分析仪嘛?截一个波形图
回复

使用道具 举报

地板
ID:164602 发表于 2017-6-11 10:03 | 只看该作者
大致浏览了一下你的程序,发现一个重要问题——红外遥控器发出的信号,是有规则的,你的接收,也要按这个规则来,我没有看到相应的程序内容。
这个项目我搞过,分享给你。有程序、有资料。

红外遥控.rar

2.48 MB, 下载次数: 26

全套资料

回复

使用道具 举报

5#
ID:123289 发表于 2017-6-11 11:29 | 只看该作者
1、因为程序不是你写的
2、你也不想认真读一下程序
回复

使用道具 举报

6#
ID:191929 发表于 2017-6-11 11:52 | 只看该作者
xlbtlmy 发表于 2017-6-10 22:41
有示波器或是逻辑分析仪嘛?截一个波形图

没有,不好意思
回复

使用道具 举报

7#
ID:191929 发表于 2017-6-11 11:53 | 只看该作者
HC6800-ES-V2.0 发表于 2017-6-11 10:03
大致浏览了一下你的程序,发现一个重要问题——红外遥控器发出的信号,是有规则的,你的接收,也要按这个规 ...

谢谢,非常感谢
回复

使用道具 举报

8#
ID:191929 发表于 2017-6-11 11:55 | 只看该作者
yzwzfyz 发表于 2017-6-11 11:29
1、因为程序不是你写的
2、你也不想认真读一下程序

哈哈,被看到了,程序是找来的,程序看了一天,也改了一部分,没成功
回复

使用道具 举报

9#
ID:191929 发表于 2017-6-11 11:57 | 只看该作者
中断部分没学好
回复

使用道具 举报

10#
ID:191929 发表于 2017-6-11 12:09 | 只看该作者
谢谢你的资料,我会靠自己弄出来的
回复

使用道具 举报

11#
ID:210106 发表于 2017-6-11 14:48 | 只看该作者
这个有点难我无能为力
回复

使用道具 举报

12#
ID:191929 发表于 2017-6-11 16:24 | 只看该作者
4657575 发表于 2017-6-11 14:48
这个有点难我无能为力

恩,一起加油,弄出来后会发出来共享的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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