请教一下,为什么无法判断遥控的键码?

2019-07-16 05:10发布

下面是个程序,想根据遥控的键值来判断该做什么,但是P1灯显示正常了,判断键值却一直判断不出来。

#include <REGX51.H>
#define c(x) (x*110592/120000)
sbit Ir_Pin=P2^2;
sbit beep=P2^3;
sbit led1=P1^6;
sbit led2=P1^7;
   
unsigned int ISIR;
unsigned int NUM;

unsigned char Ir_Buf[4]; //用于保存解码结果
   
//延时   
void delay_50ms(unsigned int t)
{
  unsigned int j;   
  for(;t>0;t--)
    for(j=6245;j>0;j--)
    {;}
}

//遥控解码低电平检测
unsigned int Ir_Get_Low()
{
  TL1=0;
  TH1=0;
  TR1=1;
  while(!Ir_Pin && (TH1&0x80)==0);               
  TR1=0;           
  return TH1*256+TL1;
}

//遥控解码高电平检测
unsigned int Ir_Get_High()
{
  TL1=0;
  TH1=0;
  TR1=1;
  while(Ir_Pin && (TH1&0x80)==0);
  TR1=0;
  return TH1*256+TL1;
}

void GetiR();

main()
{
  TMOD=0x11;
  while(1)
  {
  GetIR();
//  P1=ISIR;  //这里,P1显示正常,跟键值对应,比如输入的键值是0xab,P1显示的是ba,即从P1^7到P1^0是1011 1010。

  if(ISIR==0xab)  //这里,死活判断不出键值,以下括号内的就无法执行。
  {
  P1=0xff;
  led1=0;
  led2=1;
  }
  P1=0xa8; //得按了遥控以后,才能执行到这句。
  }
}

void GetIR()
{
  unsigned int temp;
  char i,j;

  do{
    restart:
    while(Ir_Pin);
    temp=Ir_Get_Low();
    if(temp<c(8500) || temp>c(9500)) continue;//引导脉冲低电平9000
    temp=Ir_Get_High();
    if(temp<c(4000) || temp>c(5000)) continue;//引导脉冲高电平4500
    for(i=0;i<4;i++) //4个字节
      for(j=0;j<8;j++) //每个字节8位
      {
        temp=Ir_Get_Low();
        //if(temp<c(200) || temp>c(800)) goto restart;
        temp=Ir_Get_High();
        if(temp<c(200) || temp>c(2000)) goto restart;
        Ir_Buf>>=1;
        if(temp>c(1120)) Ir_Buf|=0x80;
      }
    ISIR=Ir_Buf[2];
    beep=0;
    delay_50ms(1);
    beep=1;
    break;
  }
  while(1);
}
/*从别的程序解出的键值
1       2       3
红 54ab 649b 748b
绿 44bb 04fb 34c6
蓝 708f 51ae 906f
0 619e 916e d02f
1 c03f 817e e51a
4 807f c13e a55a
7 24db 25da a45b
*/
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lstcspring
1楼-- · 2019-07-16 09:38
“ if(ISIR==0xab) ”仿真测试一下,看这个条件语句成立不,判条件前看一下ISIR的值是不是等于0xab,我之前也遇到过,明明条件不成立,就是要进入条件语句,搞了好久,是其它地方程序写错了原因!
qqasky
2楼-- · 2019-07-16 14:30
谢谢指教。
弄明白了,原来是键值弄错了,弄反了,比如第一个键的值应该是0xba45。

一周热门 更多>