【红外学习 2】【经典程序】STC89C52RC 12M,附初级程序, 红外二极管发射 与导线连接,测试成功...

这篇博客介绍了如何使用STC89C52RC 12M单片机进行红外发射的初级程序,无需与机顶盒交互。内容包括单片机GND与红外接收头GND的连接,以及单片机IO与接收头TTL输出的连接方式,提供了一个成功的测试案例。
摘要由CSDN通过智能技术生成

 

/*
89C52RC 12M晶振  红外发射试验,
 
在红外解码和机顶盒上都测试可用!
 
发射的编码是      SendIRdata(0x48,0x77,0x01);这个一个向下的按键编码
 
红外发射管的正极接VCC 5V
红外发射管的负极接21号引脚 
 
*/
#include <REG51.h> 
static bit wave;              //红外发射管的亮灭
static unsigned int count;    //延时计数器
static unsigned int endcount; //终止延时计数
static bit flag;              //红外发送标志
sbit Send_wave=P2^0;
  
void delay(){    //1秒的延时
  int i,j;
  for(i=0;i<400;i++)  {
    for(j=0;j<100;j++)    {
    }
  }
}
  
void SendByte(unsigned char OneByte){  //发送一个8bit数据
unsigned char irdata,i;
 irdata=OneByte;
  for(i=0;i<8;i++)  {
     endcount=10;
     flag=1;
     count=0;
     do{}while(count<endcount);
     if(irdata & 1){endcount=41;} //如果末位是1,电平持续时间会长一些
     else{ endcount=15;}          //如果末位是0,电平持续时间短长一些
     flag=0;
     count=0;
     do{}while(count<endcount);
     irdata=irdata>>1;
  }
}
 
 
void SendIRdata(char usercode1,char usercode2,char keycode){
 
  endcount=223;  //发送9ms的起始码,在接受端的红外一体化输出,会有一个下降沿
  flag=1;
  count=0;
  do{}while(count<endcount);
 
  endcount=117;        //发送4.5ms的结果码
  flag=0;
  count=0;
  do{}while(count<endcount);
 
SendByte(usercode1);        //发送十六位地址的前八位
SendByte(usercode2);        //发送十六位地址的后八位
SendByte(keycode);          //发送编码
SendByte(~keycode);          //发送编码的反码
 
    endcount=10;
  flag=1;
  count=0;
  do{}while(count<endcount);
  flag=0;
}
  
  
  
 void timeinit(void){   //12M晶振  产生38K载波
  EA = 1; //允许CPU中断 
  TMOD = 0x11; //设定时器0和1为16位模式1 
  ET0 = 1; //定时器0中断允许 
  TH0 = 0xFF; 
  TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次  
  TR0 = 1;//开始计数 
}
  
void main(void) {
  count = 0;
  flag = 0;
  wave = 0;
  Send_wave = 0;
  timeinit();
  while(1){
      delay();
      SendIRdata(0x48,0x77,0x01);
  }
} 
  
//定时器0中断处理 
void timeint(void) interrupt 1 {  //12M晶振,产生38K的载波
  TH0=0xFF; 
  TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
  count++;
  if (flag){wave=~wave;}
  else{wave = 0;}
  Send_wave = wave;
}

 

经典程序2: 不用红外与机顶盒交互

/*
89C52RC 12M晶振  不用任何红外,用连线的方式,与机顶盒交互
   
  
在机顶盒上测试可用!
  
发射的编码是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值