⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 5401c.c

📁 针对5401编码器进行解码的c语言
💻 C
字号:
void Decoder() 
  {unsigned char SignalW,CodeTotal;
    SignalW=0; 
     do { //9+66=75us 
           delay(20);
          //delay 66us 
           SignalW++; 
           if(SignalW>120) return; 
          // 如果引导码长度超出范围则退出程序 
       }while(IRin); 
         //判断引导码是否正确 
       if(SignalW<60) return;
         //若引导码长度太短同样退出程序 
           CodeTotal=12; 
        //一共解码12次,因为5104有12bit码 
        do{ //delay 11+21=32us 
            SignalW=0; 
             do{ delay(5);
                //delay 21us 
                SignalW++; 
                if(SignalW>makuan) 
                 return; 
                //如果低电平时间超过1bit的长度则认为是干扰 
                 }while(!IRin); 
             if(SignalW<6) return;
            //如果宽度低于6*32=192us,则认为是干扰 
             SignalW=SignalW-fenjie;
            //宽度大于800US时为1,否则为0 
             asm("RLF _CodeBuff,F"); 
             asm("RLF _CodeBuff+1,F");
             //将解得的码移入存储器 //
             CODE_TOTAL++;
             asm("CLRWDT"); 
             SignalW=0; 
           //对高电平进行监视 
             do{ delay(5); SignalW++; 
               if(SignalW>makuan) break; 
             //请注意,因为最后一位是高电平。所以此出用break。 
              //如果该为return的话则解码错误 
              }while(IRin); 
             CodeTotal--; 
          }while(CodeTotal); 
         //12bit全部解完后进行处理 
     if((IRData[0]==CodeBuff[0])&&(IRData[1]==CodeBuff[1])) 
     if(bFirstIR) 
       //判断是否连续2次解得同一码 
       { Timer=0; bFirstIR=0; 
          if(bHaveKey) return; 
           asm("RLF _IRData,f"); 
           asm("RLF _IRData+1,f"); 
           asm("RRF _IRData,f"); 
           IRData[0]&=0x7f; 
           IRData[1]&=0x1b; 
         if(IRData[1]==IRAddress) 
             { if(IRData[0]==Key1) PortBuff^=Key1; 
               if(IRData[0]==Key2) PortBuff^=Key2; 
               if(IRData[0]==Key3) PortBuff^=Key3; 
               if(IRData[0]==Key4) PortBuff^=Key4; 
               if(IRData[0]==Key5) PortBuff^=Key5; 
               if(IRData[0]==Key6) PortBuff=0; 
               bHaveKey=1;
             } 
         return; 
       } 
      bFirstIR=1; 
           //否则保存当前的码值
     IRData[0]=CodeBuff[0]; IRData[1]=CodeBuff[1];
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -