• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机解码EV1527 433Mhz模块失败,帮忙看下程序

I Miss You 2019-08-28 浏览量:807

..............

#define RF    P00

unsigned char RF_Code[3];      //遥控码值
bit RF_SyncFlag;               //同步信号标志,为1表示已接受到同步信号

//unsigned char RF;           
unsigned char Decode_ok;               //解码成功
unsigned char High_WidthLow_Width;    //高低电平宽度
unsigned char RF_BitCount;           //接收到第几位编码
unsigned char bma1bma2bma3bma4;    //接收编码
unsigned char mma1mma2mma3mma4;    //用于接收过程存放遥控编码,编码比较两次,这是第一次
unsigned char mmb1mmb2mmb3mmb4;    //用于接收过程存放遥控编码,这是第二次


unsigned char rf_ok1rf_ok2rf_ok;   //解码过程中的临时接收成功编码标志,接收到一个完整的遥控命令后置1,通知解码程序可以解码了
unsigned char Last_state;           //保存上一个查询到的电平状态





unsigned char temp_htemp_l;
#define  LED1     P03
#define  LED2     P01
bit bt_auto;
unsigned ss1;





void RF_MainLoop(void)
{
  TMOD=0x10;
  TH1=0xff;
  TL1=0x88;
    ET1=1;
    TR1=1;

    EA=1; 
    if(Decode_ok==1)
  {    
    if(RF_Code[0]==0xc8)
{
           LED1=0;
           Delay_ms(50);
}  
if(RF_Code[1]==0xc4)
{
   LED1=1;
           Delay_ms(50);
}
      if(RF_Code[2]==0xc2)
{
   LED2=0;
           Delay_ms(50);
}
if(RF_Code[3]==0xc1)
{
   LED2=1;
           Delay_ms(50);
}
 
}  

}


void Timer1 (void) interrupt 3
{
if(!bt_auto)
{
TL1=0x70;
TH1=0xfb;
}
else
{
TL1=temp_l;
TH1=temp_h;
}
TF1=0;               // 清除T1中断标志

if(!RF)                  
{
Low_Width++;
Last_state=0;        // 检测到低电平 低电平时间加1记录本次电平状态
}
else                   // 检测到高电平  
{
High_Width++;              

if(!Last_state)       // 检测到从低到高的跳变已检测到一个完整(高-低)电平周期
{
if(((High_Width>=2)&&(High_Width<=8))&&((Low_Width>=50)&&(Low_Width<=190)))     //判同步码   2/5 110/140
{
if((Low_Width>=110)&&(Low_Width<=140))                 //根据不同 同步码 宽度,T0加载不同初值
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
}
else
{
if((Low_Width>=140)&&(Low_Width<=160))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xfe;
temp_l=0x6b;
}
else
{
if((Low_Width>=160)&&(Low_Width<=190))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xfd;
temp_l=0xdc;
}
else
{
if((Low_Width>=70)&&(Low_Width<=90))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xff;
temp_l=0x30;
}
      else
{  
if((Low_Width>=90)&&(Low_Width<=110))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xff;
temp_l=0x00;
}
else
{
if((Low_Width>=50)&&(Low_Width<=70))
{
RF_BitCount=0;
RF_SyncFlag=1;
bma1=0;
bma2=0;
bma3=0;
bt_auto=0;
temp_h=0xff;
temp_l=0x7a;
}

                      }
      }
    }
    }
            }
}
else if ((RF_SyncFlag)&&((Low_Width>=10)&&(Low_Width<=14)))       //   10/14
{
RF_BitCount++;           //已经接收到同步码判0
if(RF_BitCount==24)
{
if(!rf_ok1)
{
mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;       //将接收到的编码复制到解码寄存器中 
    rf_ok1=1;                                    // 通知解码子程序可以解码了
     RF_SyncFlag=0;
bt_auto=0;
s=1500;
}
else 
{
if(!rf_ok2)                                       
mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;       //将接收到的编码复制到解码寄存器中 
     rf_ok2=1;                                   // 通知解码子程序可以解码了
     RF_SyncFlag=0;
bt_auto=0;
}

}
  }
else if((RF_SyncFlag)&&((Low_Width>=2)&&(Low_Width<=8)))         //   3/5
{
switch(RF_BitCount)
{
           case 0 : { bma1=bma1 | 0x80; break; }//遥控编码第1位
                       case 1 : { bma1=bma1 | 0x40; break; }
                       case 2 : { bma1=bma1 | 0x20; break; }
                       case 3 : { bma1=bma1 | 0x10; break; }
                       case 4 : { bma1=bma1 | 0x08; break; }
                       case 5 : { bma1=bma1 | 0x04; break; }
                       case 6 : { bma1=bma1 | 0x02; break; }
                       case 7 : { bma1=bma1 | 0x01; break; }
                       case 8 : { bma2=bma2 | 0x80; break; }
                       case 9 : { bma2=bma2 | 0x40; break; }
                       case 10: { bma2=bma2 | 0x20; break; }
                       case 11: { bma2=bma2 | 0x10; break; }
                       case 12: { bma2=bma2 | 0x08; break; }
                       case 13: { bma2=bma2 | 0x04; break; }
                       case 14: { bma2=bma2 | 0x02; break; }
                       case 15: { bma2=bma2 | 0x01; break; }
                       case 16: { bma3=bma3 | 0x80; break; }
                       case 17: { bma3=bma3 | 0x40; break; }
                       case 18: { bma3=bma3 | 0x20; break; }
                       case 19: { bma3=bma3 | 0x10; break; }
                       case 20: { bma4=bma4 | 0x80; break; }//按键状态第1位
                       case 21: { bma4=bma4 | 0x40; break; }
                       case 22: { bma4=bma4 | 0x20; break; }
                       case 23: { bma4=bma4 | 0x10;
   
      if(!rf_ok1)
  {
  mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//将接收到的编码复制到解码寄存器中                             
                                  rf_ok1=1;                                // 通知解码子程序可以解码了
                                  RF_SyncFlag=0;
  bt_auto=0;
  s=1500;
  break;
}
else
{
  mmb1=bma1;mmb2=bma2;mmb3=bma3;mmb4=bma4;//将再次接收到的编码复制到解码寄存器中,                             
                                  rf_ok2=1;                                // 通知解码子程序可以解码了
                                  RF_SyncFlag=0;
  bt_auto=0;
  break;

                                   
                                }
                     } 
                    RF_BitCount++;

                  }
            else {
RF_BitCount=0; RF_SyncFlag=0; bt_auto=0;bma1=0; bma2=0; bma3=0; bma4=0;
High_Width=1;
Low_Width=0;
      }      //接收到不符合的高-低电平序列
                 Low_Width=0;High_Width=1; 
  }  
         Last_state=1;      // 记录本次电平状态
       }

if(rf_ok1) //规定时间内接受到2帧相同的编码数据才有效
{
s--;
if(!s) rf_ok1=0;
if(rf_ok2) 
{
  if((mma1==mmb1)&&(mma2==mmb2)&&(mma3==mmb3)&&(mma4==mmb4))
  {
  rf_ok=1;
  rf_ok1=0;
  rf_ok2=0;  
   }
else
   {
  rf_ok=0;
  rf_ok1=0;
  rf_ok2=0;
 
   }
 
}
}
        if((rf_ok))      //判断是否接收成功
        {
           EA=0;
           rf_ok=0;
         
           RF_Code[0]=mma4&0x80; //取按键码
           RF_Code[1]=mma4&0x40;
           RF_Code[2]=mma4&0x20;
           RF_Code[3]=mma4&0x10;
 
Decode_ok=1;
EA=1;

}
}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1527是滚动码,单片机不能解码,只有固定码才可以用单片机解码
    • 发布于 2019-09-01
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:0

相关问题

问题达人换一批

单片机解码EV1527 433Mhz模块失败,帮忙看下程序