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

📄 红外线遥控器解码程序_谭诚工作室.htm

📁 遥控器程序资料很多个
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<SCRIPT> var myref = encodeURI("http://hi.baidu.com/tchzx/blog/item/4297992f96cb0d381e3089c8%2Ehtml");</SCRIPT>
<A href="http://www.baidu.com/" target=_blank>百度首页</A> | <A 
href="http://hi.baidu.com/" target=_blank>百度空间</A>
<SCRIPT language=JavaScript>
        document.write(" | <a href='http://passport.baidu.com/?login&tpl=sp&tpl_reg=sp&u="+myref+"'>登录</a>");
        </SCRIPT>
 </NOBR></DIV>
<DIV id=main align=left><!--[if IE]>
<SCRIPT>
var objmain = document.getElementById("main");
function updatesize(){ var bodyw = window.document.body.offsetWidth; if(bodyw <= 790) objmain.style.width="772px"; else if(bodyw >= 1016) objmain.style.width="996px"; else objmain.style.width="100%"; }
updatesize(); window.onresize = updatesize;
</SCRIPT>
<![endif]-->
<DIV id=header>
<DIV class=lc>
<DIV class=rc></DIV></DIV>
<DIV class=tit><A class=titlink title="tch9的空间 http://hi.baidu.com/tchzx" 
href="http://hi.baidu.com/tchzx">谭诚工作室</A></DIV>
<DIV class=desc>跟我一起玩百度空间+CSS教程+ --&gt;谭成工作室&lt;-- 纪录我在网路上奔波的历程!</DIV>
<DIV id=tabline></DIV>
<DIV id=tab><A href="http://hi.baidu.com/tchzx">主页</A><A class=on 
href="http://hi.baidu.com/tchzx/blog">博客</A><A 
href="http://hi.baidu.com/tchzx/album">相册</A><SPAN>|</SPAN><A 
href="http://hi.baidu.com/tchzx/profile">个人档案</A> <SPAN>|</SPAN><A 
href="http://hi.baidu.com/tchzx/friends">好友</A> </DIV></DIV>
<DIV class=stage>
<DIV class=stagepad>
<DIV style="WIDTH: 100%">
<TABLE class=modth cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD class=modtl width=7>&nbsp;</TD>
    <TD class=modtc noWrap>
      <DIV class=modhead><SPAN class=modtit>查看文章</SPAN></DIV></TD>
    <TD class=modtc noWrap align=right></TD>
    <TD class=modtr width=7>&nbsp;</TD></TR></TBODY></TABLE>
<DIV class=modbox id=m_blog>
<DIV class=tit>红外线遥控器解码程序</DIV>
<DIV class=date>2006年09月20日 星期三 下午 01:13</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
  <TBODY>
  <TR>
    <TD>
      <DIV class=cnt><SPAN class=oblog_text>这里我们以红外线遥控编码芯片为<SPAN 
      class=main1>uPD6121G</SPAN>(或者是 HT622、7461等芯片)为例来说明用单片机实现<A 
      name=0></A><STRONG 
      style="COLOR: black; BACKGROUND-COLOR: #ffff66">红外遥控解码</STRONG>的详细过程,站长琢磨这个解码程序花了相当多的精力,期间几经修改逐步完善,后来还用它开发了几个小产品,希望能对网友学习单片机有所帮助。 

      <P> </P>
      <P 
      align=left>红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。</P>
      <P style="TEXT-INDENT: 0px"><SPAN class=main1><STRONG>1 
      红外遥控系统</STRONG></SPAN></P>
      <P style="TEXT-INDENT: 30px"><SPAN 
      class=main1>通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。</SPAN></P>
      <P style="TEXT-INDENT: 30px"><IMG style="CURSOR: pointer; ZOOM: 10%" 
      src="红外线遥控器解码程序_谭诚工作室.files/21a.gif" width=287></P>
      <P style="TEXT-INDENT: 0px"><SPAN class=main1><STRONG>2 
      遥控发射器及其编码</STRONG></SPAN></P>
      <P style="TEXT-INDENT: 30px"><SPAN 
      class=main1>遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本NEC的uPD6121G组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:</SPAN></P>
      <P style="TEXT-INDENT: 30px"><SPAN 
      class=main1>采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。</SPAN></P>
      <P style="TEXT-INDENT: 30px"><IMG 
      style="WIDTH: 300px; CURSOR: pointer; ZOOM: 10%" 
      src="红外线遥控器解码程序_谭诚工作室.files/21b.gif" width=414 resized="resized"></P>
      <P style="TEXT-INDENT: 30px"><SPAN 
      class=main1>上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。</SPAN></P>
      <P style="TEXT-INDENT: 30px"><IMG 
      style="WIDTH: 300px; CURSOR: pointer; ZOOM: 20%" 
      src="红外线遥控器解码程序_谭诚工作室.files/21c.gif" width=549 resized="resized"></P>
      <P style="TEXT-INDENT: 30px"><SPAN 
      class=main1>UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01H;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。</SPAN></P>
      <P style="TEXT-INDENT: 30px"><SPAN 
      class=main1>遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间,图4为发射波形图。</SPAN></P>
      <P style="TEXT-INDENT: 30px"><FONT 
      lang=ZH-CN>当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。</FONT></P>
      <H4><FONT lang=ZH-CN face=楷体_GB2312 
      size=3>代码格式(以接收代码为准,接收代码与发射代码反向)</FONT></H4>
      <DIR>①位定义 </DIR><IMG style="CURSOR: pointer" 
      src="红外线遥控器解码程序_谭诚工作室.files/Image4.gif" width=165>       <IMG 
      style="CURSOR: pointer" src="红外线遥控器解码程序_谭诚工作室.files/Image5.gif" width=170> 
            
      <DIR>②单发代码格式 </DIR><IMG style="CURSOR: pointer; ZOOM: 30%" 
      src="红外线遥控器解码程序_谭诚工作室.files/Image6.gif" width=227>           
      <DIR>③连发代码格式 </DIR>
      <P><IMG style="CURSOR: pointer; ZOOM: 60%" 
      src="红外线遥控器解码程序_谭诚工作室.files/Image7.gif" width=189><BR><BR>注:代码宽度算法:</P>
      <P><FONT size=3>16</FONT><FONT lang=ZH-CN face=楷体_GB2312 
      size=3>位地址码的最短宽度:</FONT><FONT size=3>1.12</FONT><FONT lang=ZH-CN 
      face=楷体_GB2312 size=3>×</FONT><FONT size=3>16=18ms</FONT> 16<FONT 
      lang=ZH-CN face=楷体_GB2312 size=3>位地址码的最长宽度:</FONT><FONT 
      size=3>2.24ms</FONT><FONT lang=ZH-CN face=楷体_GB2312 size=3>×</FONT><FONT 
      size=3>16=36ms</FONT> </P>
      <P><FONT lang=ZH-CN face=楷体_GB2312>易知<FONT size=3>8</FONT><FONT lang=ZH-CN 
      face=楷体_GB2312 size=3>位数据代码及其</FONT><FONT size=3>8</FONT><FONT lang=ZH-CN 
      face=楷体_GB2312 size=3>位反代码的宽度和不变:(</FONT><FONT 
      size=3>1.12ms+2.24ms</FONT><FONT lang=ZH-CN face=楷体_GB2312 
      size=3>)×</FONT><FONT size=3>8=27ms</FONT></FONT></P>
      <P><FONT lang=ZH-CN face=楷体_GB2312>∴<FONT size=3>32</FONT><FONT lang=ZH-CN 
      face=楷体_GB2312 size=3>位代码的宽度为(</FONT><FONT size=3>18ms+27ms</FONT><FONT 
      lang=ZH-CN face=楷体_GB2312 size=3>)</FONT><FONT 
      size=3>~(36ms+27ms)</FONT><BR><BR></FONT>1. 
      解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。</P>
      <P>2. 根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。</P>
      <P> </P>
      <P 
      align=left>如果邮购我们开发的51单片机试验板和扩展元件的网友,可以获得如上图所示的红外遥控手柄,这种遥控器的编码格式符合上面的描述规律,而且价格低廉,有32个按键,按键外形比较统一,如果用于批量开发,可以把遥控器上贴膜换成你需要的字符,这为开发产品提供了便利。</P>
      <P style="TEXT-INDENT: 0px"><SPAN 
      class=main1><STRONG>接收器及解码</STRONG></SPAN></P>
      <P style="TEXT-INDENT: 30px"><SPAN 
      class=main1>一体化红外线接收器是一种集红外线接收和放大于一体,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。</SPAN></P>
      <P 
      style="TEXT-INDENT: 30px">下面是一个对51实验板配套的红外线遥控器的解码程序,它可以把上图32键的红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。</P>
      <P 
      align=left>这是站长最新用单片机AT89C51制作的30路红外遥控器,遥控器就是自家的VCD遥控器,接收板用了5片CD4069作为输出缓冲隔离,当按下遥控器30个按键中的一个,接收板对应的一个触点会变成高电平,松开按键,立即恢复成低电平,和TTL兼容<FONT 
      color=#000000 size=+1>。</FONT></P></SPAN></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章 
href="http://hi.baidu.com/tchzx/blog/category/&ordm;&Atilde;&Icirc;&Auml;{&ETH;&iexcl;&AElig;·.&Eacute;ú&raquo;&icirc;.&sup1;&Ecirc;&Ecirc;&Acirc;.&Icirc;&Auml;&Yacute;&Iacute;}">类别:好文{小品.生活.故事.文萃}</A> 
| 浏览(<SPAN id=result></SPAN>) </DIV>
<DIV class=line></DIV>
<SCRIPT language=JavaScript>
allkey=allkey+"99eb9545b360d33f869473b4_4297992f96cb0d381e3089c8_";
</SCRIPT>

<DIV id=in_comment><A name=comment></A>
<DIV class=tit>网友评论:</DIV>
<SCRIPT>
function writecmt(type,id,cmtname,cmturl,cmttime){
	var html1="";
	if(type==1){
		if(cmturl==""){
			html1="<a name='"+id+"'>"+cmtname+"</a> - <span class='date'>"+cmttime+"</span> ";
		}else{
			html1="<a name='"+id+"' href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a> - <span class='date'>"+cmttime+"</span> ";
		}
	}else{
		if(cmtname=="匿名网友"){
			if(cmturl==""){
				html1="<a name='"+id+"'>"+cmtname+"</a> - <span class='date'>"+cmttime+"</span> ";
			}else{
				html1="<a name='"+id+"' href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a> - <span class='date'>"+cmttime+"</span>";
			}
		}else{
			if(cmturl==""){
				html1="<div class='f14' style='display:inline'>网友:<a name='"+id+"'>"+cmtname+"</a> - <span class=\"date\">"+cmttime+"</span></div>";
			}else{
				html1="<div class='f14' style='display:inline'>网友:<a name='"+id+"' href='"+cmturl+"' target='_blank' title='"+cmturl+"'>"+cmtname+"</a> - <span class=\"date\">"+cmttime+"</span></div>";
			}
		}
	}
	document.write(html1);
}

</SCRIPT>

<DIV id=page></DIV></DIV>
<DIV id=in_send>
<FORM name=form1 onsubmit="return checkcmtform()" 
action=http://hiup.baidu.com/tchzx/commit method=post><INPUT type=hidden value=8 
name=ct> <INPUT type=hidden value=1 name=cm> <INPUT type=hidden 
value=4297992f96cb0d381e3089c8 name=spBlogID>
<SCRIPT language=JavaScript>
	document.write("<input type='hidden' name='spRefURL' value='"+window.location.href+"'>");
</SCRIPT>
 
<DIV class=tit>发表评论:</DIV>
<TABLE cellSpacing=5 cellPadding=0 width=620 border=0>
  <TBODY>
  <TR>
    <TD class=f14>姓 名:</TD>
    <TD><INPUT id=spBlogCmtor style="WIDTH: 220px" maxLength=49 
      onchange="checkname('spBlogCmtor')" name=spBlogCmtor>
      <DIV id=nmerror style="DISPLAY: none">*姓名最长为50字节</DIV></TD></TR>
  <TR>
    <TD class=f14>网址或邮箱:</TD>
    <TD><INPUT id=spBlogCmtURL style="WIDTH: 360px" maxLength=128 
      onchange="checkeandu('spBlogCmtURL')" name=spBlogCmtURL> (选填)</TD></TR>
  <TR>
    <TD class=f14 vAlign=top>内 容:</TD>
    <TD><TEXTAREA id=spBlogCmtText style="WIDTH: 520px; HEIGHT: 155px" onfocus=showverkey() name=spBlogCmtText></TEXTAREA></TD></TR>
  <TR id=vercode>
    <TD class=f14 vAlign=top>验证码:</TD>
    <TD vAlign=top><INPUT type=hidden 
      value=E14EE6AE7B1046B3F2E1F9584FD240EFF2F2FEFD2C11B0C940FBA3F7A33BC5BE23A1B7ED5B72363B10B34E6DB436C2C2224C1D995BE135478B1B4F5F445275EB 
      name=spVcode> <INPUT maxLength=4 size=6 name=spVerifyKey 
      autocomplete="off">请输入下图中的四位验证码,字母不区分大小写。<BR>
      <SCRIPT language=JavaScript>

			var imgsrc="http://post.baidu.com/cgi-bin/genimg?E14EE6AE7B1046B3F2E1F9584FD240EFF2F2FEFD2C11B0C940FBA3F7A33BC5BE23A1B7ED5B72363B10B34E6DB436C2C2224C1D995BE135478B1B4F5F445275EB";
			document.write("<img id='verifypic' src='"+imgsrc+"' width='120' height='40'>");

			function newverifypic(){
				document.getElementById("verifypic").src = imgsrc +"&t="+ Math.random();
			}
		</SCRIPT>
      <A title=看不清左边的字符 href="javascript:newverifypic();">看不清?</A> </TD></TR>
  <TR>
    <TD class=f14 vAlign=top>&nbsp;</TD>
    <TD class=f14 
  vAlign=top><INPUT type=submit value=发表评论 name=btn_ok></TD></TR></TBODY></TABLE></FORM></DIV><BR></DIV>
<TABLE height=8 cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD class=modbl width=7>&nbsp;</TD>
    <TD class=modbc>&nbsp;</TD>
    <TD class=modbr width=7>&nbsp;</TD></TR></TBODY></TABLE></DIV></DIV></DIV></DIV>
<SCRIPT language=javascript>
<!--
var hstr="/tchzx/brwstat?key1=1";
document.write("<script src='"+hstr+"&key2="+allkey+"'><\/script>");
//-->
</SCRIPT>
<BR>
<CENTER>
<DIV id=ft>&copy;2007 Baidu</DIV></CENTER>
<SCRIPT>
if(document.getElementById("m_blog"))
{
	var imgarray = document.getElementById("m_blog").getElementsByTagName('img');
	var imgw = document.getElementById("m_blog").offsetWidth;
	imgw =imgw-40;
	for(var i=0; i<imgarray.length; i++){
	if(imgarray[i].className=="blogimg" && imgarray[i].width>=imgw) imgarray[i].width=imgw;
	}
}
</SCRIPT>
</CENTER><IMG style="DISPLAY: none" src=""> </BODY></HTML>

⌨️ 快捷键说明

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