简易红外遥控电路解说

核心提示其实如果你是用单片机来解码或编码发送的话,我可以提供电路图及程序(发送和接收)(c):发送程序:/ 采用6221编码方式 晶振:12M 红外发送时,数据低位在前,高位在后/#include <reg52h> #incl

其实如果你是用单片机来解码或编码发送的话,我可以提供电路图及程序(发送和接收)(c):

发送程序:

/

   采用6221编码方式

   晶振:12M

   红外发送时,数据低位在前,高位在后

/

#include <reg52h>      

#include <intrinsh>

#define uint unsigned int

#define uchar unsigned char

#define nop()  _nop_()

uchar bdata tt;

uchar x;

sbit OP=tt^1;        //红外发射管的亮灭

unsigned int count;       //延时计数器

unsigned int endcount; //终止延时计数

unsigned char flag;      //红外发送标志

uchar iraddr1;  //十六位地址的第一个字节

uchar iraddr2;  //十六位地址的第二个字节

sbit yaokong = P3^2;

void SendIRdata(char p_irdata);

void delay();

void main(void) 

{

count = 0;

flag = 0;

OP = 0;

yaokong = 0;

EA = 1; 

TMOD = 0x11; 

ET0 = 1; 

TH0 = 0xFF; 

TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次  

TR0 = 1;

iraddr1=0x03;

iraddr2=0xfc;

do

{

for(x=125;x<0;x--);

SendIRdata(0x0c);

}while(1);

} 

//定时器0中断处理 

void timeint(void) interrupt 1 

{ 

  TH0=0xFF; 

  TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次

  count++;

  if (flag==1)

  {

    OP=~OP;

  }

  else

  {

    OP = 0;

  }

  yaokong = OP;

} 

void SendIRdata(char p_irdata)

{

  int i;

  char irdata=p_irdata;

  endcount=223;

  flag=1;

  count=0;

  do

   {

   }while(count<endcount);

  endcount=117;

  flag=0;

  count=0;

  do

   {

   }while(count<endcount);

  irdata=iraddr1;

  for(i=0;i<8;i++)

  {

     endcount=10;

     flag=1;

     count=0;

     do{}while(count<endcount);

     if(irdata-(irdata/2)2) 

     {

       endcount=41; 

     }

    else

     {

     endcount=15;   

     }

    flag=0;

    count=0;

    do{}while(count<endcount);

    irdata=irdata>>1;

  }

  irdata=iraddr2;

  for(i=0;i<8;i++)

  {

     endcount=10;

     flag=1;

     count=0;

     do{}while(count<endcount);

     if(irdata-(irdata/2)2)

     {

        endcount=41;

     }

     else

     {

       endcount=15;

     }

     flag=0;

     count=0;

     do{}while(count<endcount);

     irdata=irdata>>1;

  }

  irdata=p_irdata;

  for(i=0;i<8;i++)

  {

     endcount=10;

     flag=1;

     count=0;

     do{}while(count<endcount);

     if(irdata-(irdata/2)2)

     {

         endcount=41;

     }

     else

     {

       endcount=15;

     }

     flag=0;

     count=0;

     do{}while(count<endcount);

     irdata=irdata>>1;

  }

  irdata=~p_irdata;

  for(i=0;i<8;i++)

  {

     endcount=10;

     flag=1;

     count=0;

     do{}while(count<endcount);

     if(irdata-(irdata/2)2)

     {

         endcount=41;

     }

     else

     {

       endcount=15;

     }

     flag=0;

     count=0;

     do{}while(count<endcount);

     irdata=irdata>>1;

  }

  endcount=10;

  flag=1;

  count=0;

  do{}while(count<endcount);

  flag=0;

}

void delay()

{

  int i,j;

  for(i=0;i<400;i++)

  {

    for(j=0;j<100;j++)

    {

    }

  }

}

据我分析,工作过程应该是这样的:

(1)P21为低电平时,Q4可以导通并对接收管D5供电;

(2)有光信号时,D5导通,R16出现高电位;

(3)C9的作用是把高电平信号变为正脉冲信号,脉冲宽度有C9、R17决定;

(4)2级LM358构成放大倍数约为2000倍的放大器,然后驱动Q5饱和导通;

(5)Q5的射极输出变为低电平,接入到P3口。

 
友情链接
鄂ICP备19019357号-22