Mint-Huang 2019-09-29 13:53 采纳率: 0%
浏览 1461

请问 51单片机解码EV1527,是否需要对码,对码功能怎么实现?

我按照网上的各种案例写了一下代码,可是不能实现功能,我不知道是不是因为没有对码的原因,想问问如何实现对码功能。
以下是我的代码:

unsigned char RF;   //RF无线接口
unsigned char a_code1,a_code2,a_code3;   //第一次遥控编码
unsigned char rf_ok1;              //第一次遥控编码赋值成功
unsigned char b_code1,b_code2,b_code3;   //第二次遥控编码
unsigned char rf_ok2;              //第二次遥控编码赋值成功
unsigned char t_code1,t_code2,t_code3;   //临时存放遥控编码
unsigned char last_state;                //上一个编码电平
unsigned char hh_w,ll_w;                 //高低电平宽度
unsigned char flag_syn;                  //同步码标志位,置1表示已经收到同步码,置0表示未接收到同步码
unsigned char rf_data[3];                //存储遥控编码
unsigned char ma_x;                      //接收到第几位编码
unsigned int s;                          //收到第一个码和第二个码之间不能超过S个周期
unsigned char rf_ok=1;


#define  RF   P00

void Timer0_init(void)
{
    TMOD=(TMOD&0xFC)|0x01;
    TH0=0xff;
    TL0=0x88;
    TR0=1;
    ET0=1;
    EA=1;
}

void TIMER0_ISR(void)interrupt 1
{
    TH0=0xff;
    TL0=0x88;
    if(!RF)
    {
        ll_w++;
        last_state=0;
    }
    else{
        hh_w++;
    if(!last_state)
    {
        if(((hh_w>=1)&&(hh_w<=5))&&((ll_w>=90)&&(ll_w<=140)))
        {
            flag_syn=1;
            ma_x=0;
            t_code1=0;t_code2=0;t_code3=0;
        }
        else if((flag_syn)&&((ll_w>=7)&&(ll_w<=14)))
        {
            ma_x++;
            if(ma_x==24)
            {
                if(!rf_ok1)
                {
                    a_code1=t_code1;
                    a_code2=t_code2;
                    a_code3=t_code3;
                    rf_ok1=1;
                    flag_syn=0;
                    s=1000;
                }
                else{
                      b_code1=t_code1;
                      b_code2=t_code2;
                      b_code3=t_code3;
            rf_ok2=1;
            flag_syn=0;                 
                    }
            }
        }
        else if((flag_syn)&&((ll_w>=2)&&(ll_w<=6)))
        {
            switch(ma_x)
            {
                case 0 : { t_code1=t_code1 | 0x80; break;} 
        case 1 : { t_code1=t_code1 | 0x40;break; }
        case 2 : { t_code1=t_code1 | 0x20;break; }
        case 3 : { t_code1=t_code1 | 0x10;break; }
        case 4 : { t_code1=t_code1 | 0x08;break; }
            case 5 : { t_code1=t_code1 | 0x04;break; }
            case 6 : { t_code1=t_code1 | 0x02;break; }
            case 7 : { t_code1=t_code1 | 0x01;break; }
            case 8 : { t_code2=t_code2 | 0x80;break; }
            case 9 : { t_code2=t_code2 | 0x40;break; }
            case 10: { t_code2=t_code2 | 0x20;break; }
            case 11: { t_code2=t_code2 | 0x10;break; }
            case 12: { t_code2=t_code2 | 0x08;break; }
            case 13: { t_code2=t_code2 | 0x04;break; }
            case 14: { t_code2=t_code2 | 0x02;break; }
            case 15: { t_code2=t_code2 | 0x01;break; }
            case 16: { t_code3=t_code3 | 0x80;break; }
            case 17: { t_code3=t_code3 | 0x40;break; }
            case 18: { t_code3=t_code3 | 0x20;break; }
            case 19: { t_code3=t_code3 | 0x10;break; }
            case 20: { t_code3=t_code3 | 0x08;break; }
            case 21: { t_code3=t_code3 | 0x04;break; }
            case 22: { t_code3=t_code3 | 0x02;break; }
            case 23: { t_code3=t_code3 | 0x01;  
                   if(!rf_ok1)
                                     {
                     a_code3=t_code3;
                                         a_code2=t_code2;
                                         s=100;
                                     }      
                   else 
                                     {
                     b_code3=t_code3;
                                         b_code2=t_code2;
                                         b_code1=t_code1;
                                     }                                       
                     flag_syn=0;
                                      break;
                      }
            }
                        ma_x++;
                     }
                 else {ma_x=0;flag_syn=0;t_code3=0;t_code2=0;t_code1=0;ll_w=0;}
                 ll_w=0;hh_w=1;
                 }
                last_state=1;
            }
    if(rf_ok1)
    {
        s--;
        if(!s)rf_ok1=0;
        if(rf_ok2)
        {
            if((a_code1==b_code1)&&(a_code2==b_code2)&&(a_code3==b_code3))
            {
                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_data[0]=a_code1;
        rf_data[1]=a_code2;
        rf_data[2]=a_code3;
        EA=1;
    }
}

unsigned long GetAddr_433M()
{
    unsigned long result=((rf_data[0])<<16+(rf_data[1]<<8)+(rf_data[2]&0xf0))>>4;
    return result;
}
unsigned char GetKey_433M()
{
    unsigned char result=(rf_data[2]&0x0f);
    return result;
}

void Rst_rf_data()
{
    rf_data[2]=0x00;
}

void RF_MainLoop()
{
    unsigned char tmp;
    Timer0_init();
  tmp=GetKey_433M();
        if(tmp==0x08)
        {
            Led_on(1);
            Rst_rf_data();
        }
        if(tmp==0x08)
        {
            Led_on(2);
            Rst_rf_data();
        }
        if(tmp==0x02)
        {
            Led_off(1);
            Rst_rf_data();
        }
        if(tmp==0x01)
        {
            Led_off(2);
            Rst_rf_data();
        }
}


  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services