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

📄 ir_data.c

📁 51单片机的
💻 C
字号:
//红外解码
void CheckIR()
{
   //uchar iNowBit,iPos;
  if ((PIND&(1<<IR))>0)    //ICP INPUT CHECK
       iNowBit=0;
   else 
     iNowBit=1;//先反相
   
   //把信号持续的处理作为公共处理
   if ((iPreBit==1)&&(iNowBit==1))//hight++  
		  { iHight++;
		    return;
		  }
   if ((iPreBit==0)&&(iNowBit==0))//low++
		  { iLow++;
		    return;
		  }
		  
   switch (iIrMode)
   {
     case 0://等待9ms的高电平
	      if ((iPreBit==0)&&(iNowBit==1))//0->1:start
		  { iPreBit=1;
		    iHight=1;
			return;
		  }
		  
		  if ((iPreBit==1)&&(iNowBit==0))//1->0
		  { iPreBit=0;
		    if (iHight>12)//1.30ms
			  { iIrMode=1;
			    iLow=1;
				iHight=0;
			    //bCmdOk=1;iCmd=10;//Test..
			  }
			else
			   {iHight=0;//reset
			   }
			return;
		  }
	      break;
		  
	 case 1://等待1.6ms的低电平
	      if ((iPreBit==0)&&(iNowBit==1))//0->1
		  { iPreBit=1;
		    if (iLow>15)//1.6ms
			  {  iIrMode=2;
			     iBitCount=0;
				 iIrData[0]=0;iIrData[1]=0;iIrData[2]=0;iIrData[3]=0;
				 iHight=1;
				 //bCmdOk=1;iCmd=10;//Test..
			  }
			else
			  { iIrMode=0;
			    //确实只发送一次,后面的是按键保持信号,无按键码信息
			  }
		    return;
		  }
	      
	      break;
		  
	 case 2://接收用户码和按键码,共32Bit
	      
	      if ((iPreBit==1)&&(iNowBit==0))//1->0
		  { iPreBit=0;
		    iLow=1;
		  }
		  if ((iPreBit==0)&&(iNowBit==1))//0->1
		  { iPreBit=1;
		    //已经接收1Bit,根据占空比判断01
			if (iLow>(iHight+iHight)) iNowBit=0;else iNowBit=1;

			//Bit0在前,右移位
			iPos=iBitCount/4;
			iIrData[iPos]=iIrData[iPos]>>1;
	            if (iNowBit==1)  iIrData[iPos]|=0x80;
			
			iBitCount++;
			if (iBitCount>=24)
			{ bIrCmdOk=1;
			  iIrMode=0;
			  //bCmdOk=1;iCmd=10;//Test..
			}
			
			iHight=1;//must!
		  }
	 	  break;
     default:
	 	  iIrMode=0;
		  break;
   }
}

⌨️ 快捷键说明

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