红外解码程序帮忙看看哪里错了

2019-03-24 19:13发布

求助,关于红外解码

程序如下
#include <reg52.h>
#include <intrins.h>
sbit GEWEI= P2^7;//数码管7
sbit SHIWEI= P2^6; //数码管6
unsigned char IRCOM[8];
unsigned char code table[16] =
{0x28,0x7e,0xa2,0x62,
0x74,0x61,0x21,0x7a,
0x20,0x60,0x30,0x25,
0xa9,0x26,0xa1,0xb1}; //数码管段码
sbit ir=P3^2; //红外接收口
int n=0; //定时中断次数
void init()  //初始化
{
  EA=1;
  IT0=1;//外部中断0的触发为下降沿
  EX0=1;// 允许外部中断0
  ET0=1;//允许定时器0中断
  PT0=1;//定时器中断优先级别高
  PX0=0;
  TMOD=0x02;//定时器0模式2
  TH0=0x9c;//定时100μs
  TL0=0x9c;
  P1=0xff;//关8路led灯
  ir=1;//P3^2口置1

}
void delay()//
{
  int i        ;
   for(i=0;i<11;i++);
       
}
void timer0() interrupt 1  //定时100μs

{
        n++;// 定时中断次数
}
void int0() interrupt 0        //外部中断函数
{
  int j,k;
  EX0=0;
  delay();
  while(!ir);//等待ir变为高电平即跳过9ms起始码
  TR0=1;
  while(ir);//定时器计时
  TR0=0;
  TH0=0x9c;
  TL0=0x9c;
  if(n<26) {EX0=1;n=0;return;}//若2.5ms内出现低电平为连发码返回
  n=0;
  for(j=0;j<4;j++) //解32位红外码
     for(k=0;k<8;k++)
        {
             while(!ir); //等待ir为高电平
             TR0=1;         //开定时器,计算高电平的时间
             while(ir);//等待定时器中断,并记录高电平时间  
             TR0=0;   //高电平计时完成,关定时器
             TH0=0x9c;
             TL0=0x9c;
             if(n<9)//小于0.9ms为0码
               {
                        IRCOM[j]=IRCOM[j] >> 1;
                        IRCOM[j]=IRCOM[j]&0x7f;//a[j]右移一位最高位为0
                  n=0;//n清零
               }
              else if(n>=9) //大于0.9ms为1
                   {
                      IRCOM[j]=IRCOM[j] >> 1;
                      IRCOM[j]=IRCOM[j] | 0x80;//最高位送1
                      n=0;
                    }
             else if(n>23) {EX0=1;n=0;return;}//如果大于2.3ms,出错,返回重新解码              
        }
  if (IRCOM[2]!=~IRCOM[3]) {EX0=1;n=0;return;}//如果a[2]与a[3]不是互为补码,出错,返回重新解码
      IRCOM[5]=IRCOM[2] & 0x0F;         //存低四位
      IRCOM[6]=IRCOM[2] & 0xF0;       
      IRCOM[6]=IRCOM[6] >> 4;        //存高四位
      EX0=1;
      
}

void IR_SHOW()
{
  P0 = table[IRCOM[5]];  //送个位   
  GEWEI = 0;
  SHIWEI = 1;
  delay();
  P0 = table[IRCOM[6]]; //送十位
  SHIWEI = 0;
  GEWEI = 1;
  delay();
}
void main()
{
  init();//初始化
  while(1)
  {
    IR_SHOW();
    P1=IRCOM[2];
  }
}
我想把解出来的码送给led和数码管显示,结果按下遥控后led全亮,数码管只有一个亮且显示0,请各位大神帮忙看看哪里错了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。