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

📄 5104的解码.txt

📁 在单片机上利用软件替代PT2272芯片实现无线解码
💻 TXT
字号:
红外解码程序有朋友要做5104的解码,刚好前几天写了一个,这个程序是已经调试好了的。其实无线跟红外的解码原理基本上是一样的。

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 + -