红外遥控的接收程序问题

2019-07-16 05:09发布

各位高手我最近在做单片机红外遥控,仿照视频教程写的程序不知道哪里不对?以下是程序,烦请各位指教!

#include<reg52.h>
#define uchar unsigned char
#define uint  unsinged int

uchar irtime;
uchar startflag;
uchar bitnum;
uchar irreceok;
uchar ircode[4];
uchar irdata[33];
uchar irprosok;

//***************************************************************************   
void timer0init(void)                                //计时器0初始化
{
TMOD=0X02;
TH0=0X00;
TL0=0X00;
ET0=1;
EA=1;
TR0=1;
}
//****************************************************************************
void int0init(void)                                       //外部中断初始化
{
IT0=1;
EX0=1;
EA=1;
}
//************************************************************************
void irpros(void)                                     //取出irtime并解码
{ uchar k,i,j;
  uchar value;
  k=1;
  for(j=0;j<4;j++)
  {
    for(i=0;i<8;i++)
     {
        value=value>>1;
         if(irdata[k]>6)
   
       value=value|0X08;
       }
   
     k++;
   }
      
   ircode[j]=value;
   
  }
  irprosok=1;
}
//***************************************************************************

void main()                                                      //主函数
{uchar j,k;
timer0init();
int0init();

P2=0x00;
  while(1)
  {
    if(irreceok)
    {
     irpros();
   
     irreceok=0;
     
    }
   
    if(irprosok)
    {
     
     P1=ircode[2] ;   //想以8个led小灯显示遥控键值
     irprosok=0;
     
    }
   

  }
}

//******************************************************************************

void timer0() interrupt 1       //定时器0中断服务函数
{
irtime++;
}

//******************************************************************************
void int0() interrupt 0            //外部中断0服务函数
{               
if(startflag)
  {   
    if(irtime>52)
    {
      bitnum=0;
     
    }


   
  }
     irdata[bitnum]=irtime;
     irtime=0;
     bitnum++;
if(bitnum==33)
  {
    bitnum=0;
    irreceok=1;
  
  }
  else
  {
    startflag=1;
    irtime=0;
  
  }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。