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

📄 ir.h

📁 51单片机红外遥控解码程序
💻 H
字号:
//程序:红外识别程序

//备注:非中断版,38K红外信号,16bit系统码,8bit数据码,8bit数据反码。

#include <REGX52.H>

#define true 1
#define false 0
 
sbit IRIN = P3^2;
unsigned char nbit;

union _IRBuffer
{
 unsigned char b[4];
 struct _Buffer
 {
  unsigned char AddrH,AddrL;
  unsigned char Data,norData;
 }Buffer;
}IrDA;

bit isIRStart(); //
void AvoidStartTail(); //
bit ReceiveIRBit(); //
void PushData2Buff(unsigned char *pIRBuffer);
//bit VerfyIRData(unsigned char *pIRBuffer);
bit ReadIR();
void delayIR84();
void delayIR475();
void delay();

bit isIRStart() 	//
{
 unsigned char i;
 if(!IRIN)
 {
  while(i<10)
  {
   delayIR84();
   i++;
   if(IRIN)return false;   
  }
  if(!IRIN)return true;
 }
 else return false;
}
/*
void AvoidStartTail() //
{
 while(!IRIN);
 delayIR475();
}
*/
bit ReceiveIRBit() //
{
 while(!IRIN);
 delayIR84();
 if(IRIN)
 {
  while(IRIN);
  return true;
 }
 else return false;
}
void PushData2Buff(unsigned char *pIRBuffer)
{
 unsigned char temp;
 unsigned char nbit,nbyte;
 for(nbyte=0;nbyte<4;nbyte++)
 {
  for(nbit=0;nbit<8;nbit++)
  {
   temp = (unsigned char)ReceiveIRBit();
   temp <<= nbit;
   pIRBuffer[nbyte] |= temp;
  }
 }
}
 
bit VerifyIRData(unsigned char *pIRBuffer)
{
 unsigned char temp;
 temp = ~pIRBuffer[3];
 if(temp == pIRBuffer[2])return true;
 else return false;
}
 

void main()	//bit ReadIR()
{
 //unsigned char tempa,tempb;
 while(true)
 {
  IrDA.Buffer.AddrH=0x00;
  IrDA.Buffer.AddrL=0x00;
  IrDA.Buffer.Data=0x00;
  IrDA.Buffer.norData=0x00;
  if(isIRStart())
  {
   while(!IRIN);
   delayIR475();
   PushData2Buff(IrDA.b);
   if(VerifyIRData(IrDA.b))
   {   
    REC_LED=0;
    P0 = ~IrDA.Buffer.AddrH;
    delay();   
    P0 = 0xff;   
    REC_LED=1;
    P0 = ~IrDA.Buffer.AddrL;
    delay();   
    P0 = 0xff;
    REC_LED=0;
    P0 = ~IrDA.Buffer.Data;
    delay();
    P0 = 0xff;
    REC_LED=1;
    P0 = ~IrDA.Buffer.norData;
   }
   else{ P0=0xAA; } 
  }
 }
}

void delayIR84()
{
 unsigned char i,j;
 for(i=10;i>0;i--)
 for(j=30;j>0;j--);
}
void delayIR475()
{
 unsigned char i,j;
 for(i=10;i>0;i--)
 for(j=215;j>0;j--);
}
void delay()
{
 unsigned char i,j,k;
 for(k=10;k>0;k--)
 for(i=120;i>0;i--)
 for(j=240;j>0;j--);
}

⌨️ 快捷键说明

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