立即注册 登录
返回首页

uid:541128的个人空间

日志

红外控制LED

已有 701 次阅读2019-7-14 18:04 |个人分类:51单片机

一个很简单的程序,刚开始被自己弄的很复杂,程序自然是越简单越好的,不要想那么多有的没的,注意数字类型


#include "reg52.h"
#define  Led P2
typedef unsigned char u8;
typedef unsigned int u16;
//#define uint unsigned int;
//#define uchar unsigned char;
sbit IRIN=P3^2;
u8  Time;
u8  IrValue[6];
u8 code IRdata[22]={0x45,0x46,0x47,0x44,0x40,0x43,0x07,0x15,0x09,0x16,0x19,
                    0x0d,0x0c,0x18,0x5e,0x08,0x1c,0x5a,0x42,0x52,0x4a};
void delay(u16 i)
{
   while(i--);
}
void IrInit()
{
  IT0=1;
 EX0=1;
 EA=1;
 IRIN=1;
}

void Ircontrol()
{
 u8 i;
 
// for(i=0;i<8;i++)
// {
//   switch(IrValue[2])
//  {
//   case(0x45):Led=0xfe;break;
//   case(0x46):Led=0xfc;break;
//   case(0x47):Led=0xfa;break;
//   case(0x44):Led=0xf7;break;
//   case(0x40):Led=0xef;break;
//   case(0x43):Led=0xcf;break;
//   case(0x07):Led=0xaf;break;
//   case(0x15):Led=0x7f;break;
//  }
// }
 for(i=0;i<22;i++)
 {
   if(IrValue[2]==IRdata[i])
   Led=IRdata[i];
 }
  
 
}

void main()
{
  IrInit();
  while(1)
  {
    Ircontrol();
  }

 
void ReadIr() interrupt 0
{
  u8 k,j;
 u16 err;
 Time=0;
 delay(700);
 if(IRIN==0)
 {
   err=1000;
  
  while((IRIN==0)&&(err>0))
  {
    delay(1);
   err--;
  }
  if(IRIN==1)
  {
    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 个评论)

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

Powered by 单片机教程网

返回顶部