请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2854|回复: 4

请教下,用遥控控制led亮灭程序应该怎么写?

[复制链接]

11

主题

20

帖子

81

积分

注册会员

Rank: 2

积分
81
发表于 2020-7-28 14:30:04 | 显示全部楼层 |阅读模式
请教下,用遥控控制led亮灭程序应该怎么写?
回复

使用道具 举报

27

主题

337

帖子

3294

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3294
发表于 2020-7-29 08:47:50 | 显示全部楼层
很简单,首先确定好红外遥控程序能正常工作,然后只需要将单片机解码的编码值与你按下的红外按键的键值对比下即可。可以看下红外遥控实验教程,里面有数码管显示红外键值
回复 支持 反对

使用道具 举报

11

主题

20

帖子

81

积分

注册会员

Rank: 2

积分
81
 楼主| 发表于 2020-7-29 10:29:49 | 显示全部楼层
我现在已经知道在哪里进行修改控制led了但是有遇到一个问题。我想通过0x45这一个按键来控制一个led的亮灭在主程序里怎么取反?还是通过其他办法来实现?
#include"reg52.h"
#include"intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 Time;
u8 IrValue[6];

sbit IRIN=P3^2;
sbit LED=P2^0;
bit flag=0;

void delay(u16 i)
{
  while(i--);
}

void IrInit()
{
  IT0=1;
  EX0=1;
  EA=1;

  IRIN=1;                 //下降沿有效先把数据线拉高等待被拉低
}

void main()
{
  IrInit();
  while(1)
  {
     {
           flag=~flag;
         }

    if(flag==0)
         {
      if(IrValue[2]==0x45)
          {
            LED=0;
          }
          else
          {
            LED=1;
          }
         }
    }
}

void ReadIr() interrupt 0
{
  u8 k,j;
  u16 err;
  Time=0;
  delay(700);
  if(IRIN==0)                                          //正常情况下9ms就应该结束四点平,如果9ms没有结束在10ms强制退出
   {                                                          //两个作用一是等待9ms二是强制退出
    err=1000;
    while((IRIN==0)&&(err>0))
    {
      delay(1);
          err--;
    }                                                          //正常情况下4.5ms就应该结束四点平,如果4.5ms没有结束在10ms强制退出
   if(IRIN==1)                                          //两个作用一是等待5ms二是强制退出
   {
    err=500;
    while((IRIN==1)&&(err>0))
    {
      delay(1);
          err--;
    }
  for(k=0;k<4;k++)
  {
    for(j=0;j<8;j++)
        {
           err=60;
           while((IRIN==0)&&(err>0))
     {
       delay(1);
           err--;
     }
           err=500;
           while((IRIN==1)&&(err>0))
     {
       delay(10);
           Time++;
           err--;
           if(Time>30)
           {
             return;                          //通讯失败
           }
     }
          IrValue[k]>>=1;
          if(Time>=8)
          {
            
            IrValue[k]|=0x80;
          }
          Time=0;
          
        }
  }
}
     if(IrValue[2]!=~IrValue[3])
          {
            return;                                 //解码不对
          }
   }
}
回复 支持 反对

使用道具 举报

0

主题

3

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2021-1-14 21:47:54 | 显示全部楼层
}
     if(IrValue[2]!=~IrValue[3])
          {
            return;                                 //解码不对
          }
if (IrValue[2]==0x45) led=~led;
   }
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-28 17:21 , Processed in 0.084800 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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