求助:51单片机红外延时解码程序???

2020-01-26 13:03发布

调试了好几天了,都没有成功,还请高手帮忙看一下程序是否有问题.谢谢
一体红外接收头接到P3^2脚上,
#include <at89x52.h>
#include <1602LCD.h>
#define uchar   unsigned char
sbit IR=P3^2;  //接收头
sbit sp=P2^1;  //蜂鸣器
bit ok;  //解码成功标志
static unsigned int a,d;
extern  display_long_char(uchar x,uchar y,uchar *pa);
void display_char (uchar x,uchar y,uchar temp);
extern  void INIT_LCD (void);
unsigned char code tab1[16]={" LCD REMOTE TSET"};
void beep (void)  //蜂鸣器程序
{
  unsigned int t;
  t=50000;
  sp=0;
  while (t)
  {t--;}
  sp=1;
}
void delay840ns (void) //延时0.84ms
{
unsigned int t=860;
while (t--);
}
void delay9ms (void) //延时9ms
{
unsigned int t=50000;
unsigned int a;
while (t--)
{
  for (a=60;a<=0;a--);
  }
}
void starting (void) //初始化中断
{
IT0=1;
EX0=1;
EA=1;
}
void hex_bin (unsigned int r,unsigned int t)  //转换程序
{
unsigned char a1,a2,d1,d2;
a1=(char)r&0xff;
a2=(char)r>>8;
d1=(char)t&0xff;
d2=(char)t>>8;
display_char (2,2,a1+0x30);
display_char (2,3,'A');
}
main ()
{
  beep ();
  INIT_LCD ();
  display_long_char (1,1,tab1);
  starting ();        //初始化
  while (1)
   {
         display_long_char (1,1,tab1);
         if (ok)  hex_bin (a,d);
   }
}

void remote (void) interrupt 0
{
unsigned char i;
a=0;
d=0;
EA=1;
return;
delay9ms ();
if (IR) while (IR) if (!IR) {EA=1;ok=0;return;}         //等等4.5MS结果码
  else {EA=1;ok=0;return;}  //出错返回
while (IR==0);
for (i=0;i<16;i++)
  {
   delay840ns ();
   if (IR==1) {a=(a>>1)|0x80;while (IR==1);}  //取0
    else a=(a>>1);         //取1
        while (IR==0);
  }

  for (i=0;i<16;i++)
  {
   delay840ns ();
   if (IR==1) {d=(d<<1)|1;while (IR==1);}  //取0
    else d=(d<<1);         //取1
        while (IR==0);
  }
  beep ();
  ok=1;
  EA=1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。