用AT89S51单片机制作红外电视遥控器一般红外电视遥控器的输出都是用编码后串行数据对38~40kHz的方波进行脉冲幅度调制而产生的。
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为 1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔 1.685ms、周期为 2.25ms 的组合表示二进制的“1”。
上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制,然后再通过红外发射二极管产生红外线向空间发射。
一般电视遥控器的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。
后16位为8位的操作码和8位的操作反码,用于核对数据是否接收准确。
根据红外编码的格式,发送数据前需要先发送9ms的起始码和 4.5ms的结果码。
遥控串行数据编码波形如下图所示:接收方一般使用TL0038一体化红外线接收器进行接收解码,当TL0038接收到38kHz红外信号时,输出端输出低电平,否则为高电平。
所以红外遥控器发送红外信号时,参考上面遥控串行数据编码波形图,在低电平处发送38kHz红外信号,高电平处则不发送红外信号。
单片机红外电视遥控器电路图如下:C51程序代码:#include <AT89X51.h>static bit OP; // 红外发射管的亮灭static unsigned int count; // 延时计数器static unsigned int endcount; // 终止延时计数static unsigned char flag; // 红外发送标志char iraddr1; // 十六位地址的第一个字节char iraddr2; // 十六位地址的第二个字节void SendIRdata(char p_irdata);void delay();void main( void ){count = 0;flag = 0;OP = 0;P3_4 = 0;EA = 1; // 允许CPU中断TMOD = 0x11; // 设定时器0 和1 为16 位模式1ET0 = 1; // 定时器0 中断允许TH0 = 0xFF;TL0 = 0xE6; // 设定时值0 为38K 也就是每隔26us中断一次TR0 = 1 ;// 开始计数iraddr1=3;iraddr2=252;do{delay();SendIRdata(12);} while (1);}// 定时器0 中断处理void timeint( void ) interrupt 1{TH0=0xFF;TL0=0xE6; // 设定时值为38K 也就是每隔26us 中断一次count++;if (flag==1){OP=~OP;}else{OP = 0;}P3_4 = OP;}void SendIRdata( char p_irdata){int i;char irdata=p_irdata;// 发送9ms的起始码endcount=223;flag=1;count=0;do{} while (count<endcount);// 发送4.5ms 的结果码endcount=117flag=0;count=0;do{} while (count<endcount);// 发送十六位地址的前八位irdata=iraddr1;for (i=0;i<8;i++){// 先发送0.56ms 的38KHZ红外波(即编码中0.56ms 的低电平)endcount=10;flag=1;count=0;do {} while (count<endcount);// 停止发送红外信号(即编码中的高电平)if (irdata-(irdata/2)*2) // 判断二进制数个位为 1 还是0 {endcount=41; //1 为宽的高电平}else{endcount=15; //0 为窄的高电平}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、引言红外通信是目前比较常用的一种无线数据传输手段,其具有无污染、信息传输稳定、信息安全性高以及安装使用方便等优点,并且可以在很多场合应用,如家电产品,工业控制、娱乐设施等领域。
红外通信是利用950nm 近红外波段的红外线作为传递信息的载体,通过红外光在空中的传播来传递信息,由红外发射器和接收器实现。
发射端将二进制数字信号调制成某一频率的脉冲序列,经电光转换电路,驱动红外发射管以光脉冲的形式发送到空中。
接收端将接收到的光脉冲转换成电信号,再经解调和译码后恢复出原二进制数字信号。
本文设计了一种基于单片机PIC18F248 的主从式红外通信系统,主要设计了红外接口电路以及主机和从机通信软件流程。
2、系统硬件电路设计在主从式红外通信系统中,主机及从机的红外发射电路相同,红外线的载波频率都为38KHz ,在同一时间内,可以是主机发射,从机接收;或者从机发射,主机接收。
2.1 红外发射电路设计红外发射器电路主要由单片机,驱动管Q1 和Q2、红外发射管D1 等组成,电路如下:红外发射器工作原理为:单片机通过I/O 端口控制整个发射过程。
其中,红外载波信号采用频率为38KHz 的方波,由PIC18F248 的*模块的PWM 功能实现,并由*1 端口传输到三极管T2 的基极。
待发送到数据由单片机的TX 端口以串行方式送出并驱动三极管Q1,当TX 为“0时”使Q1 管导通,通过Q2 管采用脉宽调制(PWM )方式调制成38KHz 的载波信号,并由红外发射管D1 以光脉冲的形式向外发送。
当TX 为“1时”使Q1 管截止,Q2 管也截止,连接Q1 和Q2 的两个上拉电阻R1 和R3 把三极管的基极拉成高电平,分别保证两个三极管可靠截止,红外发射管D1 不发射红外光。
因此通过待发送数据的“0或”“1就”可控制调制后两个脉冲串之间的时间间隔,即调制PWM 的占空比。
比如若传送数据的波特率为1200bps ,则每个数位“0就”对应32 个载波脉冲调制信号。
红外发射管D1 采用TSAL6200 红外发射二极管,其实现将电信号转变成一定频率的红外光信号,它发射一种时断时续的高频红外脉冲信号,由于脉冲串时间长度是恒定的,根据脉冲串之间的间隔大小就可以确定传输的数据是“0还”是“1。
”2.2 红外接收电路设计红外接收电路主要采用Vishay 公司的专用红外接收模块HS0038B 。
接收电路及HS0038B 内部结构如下:。