模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

6257查看 | 20回复

[DIY交流] 跟着萝莉做《红外遥控》

[复制链接]
发表于 2017-1-28 14:02:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 xiancun010 于 2017-1-28 14:09 编辑

跟着萝莉做红外遥控。做了两个项目后,感觉对单片机有了些了解。也理顺了单片机的一些知识。之前是买套装学,学来学去,感觉还是云里雾里。这个红外遥控 没有加入继电器的电路。只要学会了如何发射频率和接收频率,接下来的加入继电器感觉都不难了,只不过是个判断处理的过程。萝莉的第二个项目中焊接时没有电路图,做起来比较麻烦。最后我是根据他的焊接自己手动画了个电路图,免得后面焊上了在该比较麻烦。再次建议萝莉在焊接时加上电路图,让我等小白少走点弯路(当然已经少走了许多弯路!!!)。这里面我对检测按键按下松开的那一段进行模块化,直接将他写到一个函数(unsigned int JcAnJian(unsigned char z); )里,用返回函数值进行判断,感觉方便多了。
跟着萝莉做《红外遥控》 萝莉 作者:xiancun010 1290 跟着萝莉做《红外遥控》 萝莉 作者:xiancun010 6894 跟着萝莉做《红外遥控》 萝莉 作者:xiancun010 917 跟着萝莉做《红外遥控》 萝莉 作者:xiancun010 4760

//这个是红外遥控   控制端程序
#include <reg51.h>
#include <intrins.h>

sfr P3M0=0Xb2;  //声明寄存器  用推免方式产生20毫安电流

sbit LED=P3^5;
sbit Key1=P3^4;
sbit Key2=P3^3;
sbit Key3=P3^2;

unsigned char Key1old;
unsigned char Key2old;
unsigned char Key3old;
unsigned char flag1;
unsigned int JcAnJian(unsigned char z);                //检测按键    参数z=1表示检测按键1         参数z=2表示检测按键2        返回值:0表示没有按下按键  1表示按下按键        4表示调用参数出错了
void TX_IR(unsigned int h); //产生红外的频率 为26微秒的倍数
void Delay13us();


void main()
{  

   P3M0=32;//设置P3.5引脚为大电流模式
   Key1old=1;
   Key2old=1;
   Key3old=1;
   LED=0;
   while(1)
   {
      if(JcAnJian(1)==1)
           {
                TX_IR(769);
           }
           if(JcAnJian(2)==1)
           {
               
                TX_IR(1152);
           }
          if(JcAnJian(3)==1)
           {
               
                TX_IR(1538);
           }  

   }
}
void Delay13us()                //@12.000MHz
{
        unsigned char i;

        
        i = 36;
        while (--i);
}
void TX_IR(unsigned int h) //产生红外的频率 为26微秒的倍数
{
    while(h)
        {
          LED=1;
          Delay13us();
          LED=0;
          Delay13us();
          h=h-1;
        }
}
unsigned int JcAnJian(unsigned char z)        //检测按键    参数z=1表示检测按键1         参数z=2表示检测按键2        返回值:0表示没有按下按键  1表示按下按键        3表示调用参数出错了
{  
  flag1=3;
  switch(z)
  {
   case 1:
          {
                     if(Key1==1)
            {
                 if(Key1old==0)
                     {
                                    
                                   flag1=1;                                          
                         }
                                else
                                 {
                                   
                                   flag1=0;        
                                 }                     
                 }
                         Key1old=Key1;
                         break;                  
              }
   case 2:
          {
                     if(Key2==1)
            {
                 if(Key2old==0)
                     {
                                   flag1=1;                                          
                         }
                                else
                                 {
                                   
                                    flag1=0;        
                                 }                     
                 }
                         Key2old=Key2;
                         break;                  
              }
    case 3:
          {
                     if(Key3==1)
            {
                 if(Key3old==0)
                     {
                                   flag1=1;                                          
                         }
                                else
                                 {
                                   
                                    flag1=0;        
                                 }                     
                 }
                         Key3old=Key3;
                         break;                  
              }
  default:  flag1=3;
  }
  return flag1;
}


//这个是红外接收程序
#include <reg51.h>
#include <intrins.h>

sbit IR_in=P3^4;
sbit LED=P3^5;

sfr  P3M0=0xB2;
unsigned char  time;
void Delay500ms();
void Delay1ms();

void main()
{
  P3M0=32;
  while(1)
  {         
     time=0;   //时间清0
         LED=0;
     if(IR_in==0)                   //检测按下了哪个按键 用时间(time)的长短来判读
      {
              while(IR_in==0)
                  {
                       Delay1ms();
                       time++;    //
                  }

      }
     if (time>15&&time<25)          //如果是按键1按下 点亮1次灯
          {
            LED=1;
                Delay500ms();
          }
         if (time>25&&time<35)//如果是按键1按下 点亮2次灯
          {
            LED=1;
                Delay500ms();
                LED=0;
                Delay500ms();
                LED=1;
                Delay500ms();
          }
           if (time>35&&time<45)//如果是按键3按下 点亮3次灯
          {
            LED=1;
                Delay500ms();
                LED=0;
                Delay500ms();
                LED=1;
                Delay500ms();
                LED=0;
                Delay500ms();
                LED=1;
                Delay500ms();
          }                  
  }
}

void Delay500ms()                //@12.000MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 23;
        j = 205;
        k = 120;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void Delay1ms()                //@12.000MHz
{
        unsigned char i, j;

        i = 12;
        j = 169;
        do
        {
                while (--j);
        } while (--i);
}





发表于 2020-2-20 15:40:37 | 显示全部楼层
要是有pwm输出就更好了。很适合室内小飞。
回复 支持 1 反对 0

使用道具 举报

发表于 2017-1-28 14:48:15 | 显示全部楼层
很厉害,帮顶帮顶
发表于 2017-1-28 16:59:18 | 显示全部楼层
恭喜发财!!!!!!!!祝爽飞!!!!!!!!
发表于 2017-1-28 20:23:56 | 显示全部楼层
顶贴是一种美德!
发表于 2017-1-28 21:14:29 | 显示全部楼层
顶贴是一种美德!
发表于 2017-1-29 20:57:04 | 显示全部楼层
路过,顶起来!
发表于 2017-1-30 15:40:29 | 显示全部楼层
帮顶。。。。。。。。。。。。
发表于 2017-2-4 01:28:05 | 显示全部楼层
开源是接力赛,一棒接一棒。
 楼主| 发表于 2017-2-4 23:04:22 | 显示全部楼层
世界大战 发表于 2017-2-4 01:28 跟着萝莉做《红外遥控》 萝莉 作者:xiancun010 1424
开源是接力赛,一棒接一棒。

是啊,开源。其实集思广益的过程!!!!
发表于 2017-2-5 09:05:23 | 显示全部楼层
高手贴。。。。。
发表于 2017-9-18 08:16:11 | 显示全部楼层
有点没有看懂按键调用程序,谢谢分享。
发表于 2017-9-20 14:37:03 | 显示全部楼层
我啥时候能学会啊
发表于 2017-11-1 21:43:35 | 显示全部楼层
哥们  有编辑好了的估计没
发表于 2017-11-2 16:41:13 | 显示全部楼层
楼主有固件没,,求固件
发表于 2018-12-1 12:06:02 | 显示全部楼层
楼主,电容多大的啊???
回复 支持 反对

使用道具 举报

发表于 2019-3-22 11:00:07 | 显示全部楼层
楼主谢谢分享。要是有pwm输出就更好了。很适合室内小飞。跟着萝莉做《红外遥控》 萝莉 作者:独行者 2174
回复 支持 反对

使用道具 举报

发表于 2019-7-28 07:54:55 | 显示全部楼层
高手高手高高手跟着萝莉做《红外遥控》 萝莉 作者:琢磨儿侠 2959
回复 支持 反对

使用道具 举报

发表于 2019-12-13 21:14:53 | 显示全部楼层
昨天晚上下载失败,今天早上下载成功。亲测可用
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!