您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 用 AT89S51 单片机制作红外电视遥控器
用AT89S51单片机制作红外电视遥控器ZHCE整理用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红外信号,高电平处则不发送红外信号。单片机红外电视遥控器电路图如下:第1页共6页用AT89S51单片机制作红外电视遥控器ZHCE整理C51程序代码:#includeAT89X51.hstaticbitOP;//红外发射管的亮灭staticunsignedintcount;//延时计数器staticunsignedintendcount;//终止延时计数staticunsignedcharflag;//红外发送标志chariraddr1;//十六位地址的第一个字节chariraddr2;//十六位地址的第二个字节voidSendIRdata(charp_irdata);voiddelay();voidmain(void){count=0;flag=0;OP=0;P3_4=0;第2页共6页用AT89S51单片机制作红外电视遥控器ZHCE整理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中断处理voidtimeint(void)interrupt1{TH0=0xFF;TL0=0xE6;//设定时值为38K也就是每隔26us中断一次count++;if(flag==1){OP=~OP;}else{OP=0;}P3_4=OP;}voidSendIRdata(charp_irdata){inti;charirdata=p_irdata;//发送9ms的起始码endcount=223;flag=1;count=0;do{}while(countendcount);//发送4.5ms的结果码endcount=117flag=0;第3页共6页用AT89S51单片机制作红外电视遥控器ZHCE整理count=0;do{}while(countendcount);//发送十六位地址的前八位irdata=iraddr1;for(i=0;i8;i++){//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)endcount=10;flag=1;count=0;do{}while(countendcount);//停止发送红外信号(即编码中的高电平)if(irdata-(irdata/2)*2)//判断二进制数个位为1还是0{endcount=41;//1为宽的高电平}else{endcount=15;//0为窄的高电平}flag=0;count=0;do{}while(countendcount);irdata=irdata1;}//发送十六位地址的后八位irdata=iraddr2;for(i=0;i8;i++){endcount=10;flag=1;count=0;do{}while(countendcount);if(irdata-(irdata/2)*2){endcount=41;}else{endcount=15;}flag=0;count=0;do{}while(countendcount);irdata=irdata1;}第4页共6页用AT89S51单片机制作红外电视遥控器ZHCE整理//发送八位数据irdata=p_irdata;for(i=0;i8;i++){endcount=10;flag=1;count=0;do{}while(countendcount);if(irdata-(irdata/2)*2){endcount=41;}else{endcount=15;}flag=0;count=0;do{}while(countendcount);irdata=irdata1;}//发送八位数据的反码irdata=~p_irdata;for(i=0;i8;i++){endcount=10;flag=1;count=0;do{}while(countendcount);if(irdata-(irdata/2)*2){endcount=41;}else{endcount=15;}flag=0;count=0;do{}while(countendcount);irdata=irdata1;}endcount=10;flag=1;count=0;do{}while(countendcount);第5页共6页用AT89S51单片机制作红外电视遥控器ZHCE整理flag=0;}voiddelay(){inti,j;for(i=0;i400;i++){for(j=0;j100;j++){}}}制作的实物如下图所示:因为只是实验,所以顾不得外形的美观了,呵呵,不好意思献丑了!照片中下面的是我电视卡所附的遥控器,中间的为电视卡红外接收头,上面的电路可用来“代替”原配遥控器来控制电视卡电视频道……【参考】1、红外线遥控器解码程序,作者:谢刚2、自制红外遥控逻辑分析器,作者:广公男生第6页共6页
本文标题:用 AT89S51 单片机制作红外电视遥控器
链接地址:https://www.777doc.com/doc-5159909 .html