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

📄

📁 常用单片机程序范例代码
💻
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0045)http://www.hseda.com/electric/hwjm1/hwjm1.htm -->
<HTML><HEAD><TITLE>红外线遥控器解码程序</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.2722" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId></HEAD>
<BODY>
<DIV align=center>
<CENTER>
<TABLE id=AutoNumber1 style="BORDER-COLLAPSE: collapse" borderColor=#c0c0c0 
cellSpacing=0 cellPadding=0 width="71%" border=1>
  <TBODY>
  <TR>
    <TD width="100%"><MAP name=FPMap0><AREA shape=RECT coords=148,54,196,74 
        href="http://www.hseda.com/main.htm"><AREA shape=RECT 
        coords=220,53,271,76 
        href="http://www.hseda.com/fpga/fpgaindex.htm"><AREA shape=RECT 
        coords=345,54,412,75 href="http://www.hseda.com/mcu/index.htm"><AREA 
        shape=RECT coords=431,53,517,77 
        href="http://www.hseda.com/electric/dzindex.htm"><AREA shape=RECT 
        coords=536,54,586,76 
        href="http://www.hseda.com/download/downindex.htm"><AREA shape=RECT 
        coords=600,54,651,75 
        href="http://bbs.6to23.com/4/default.asp?name=zhangzhenyan"><AREA 
        shape=RECT coords=667,52,753,73 
        href="http://www.hseda.com/link/link1.htm"><AREA shape=RECT 
        coords=287,55,332,73 
      href="http://www.hseda.com/dsp/dspindex.htm"></MAP><IMG height=78 
      src="红外线遥控器解码程序.files/header1.jpg" width=757 useMap=#FPMap0 
border=0></TD></TR>
  <TR>
    <TD width="100%">
      <TABLE height=2237>
        <TBODY>
        <TR>
          <TD style="FONT-SIZE: 18px" align=middle width="100%" height=65>
            <P align=center><FONT 
        color=#000066><B>红外线遥控器解码程序</B></FONT></P></TD></TR>
        <TR>
          <TD style="FONT-SIZE: 14px" align=middle width="100%" height=2164>
            <TABLE cellSpacing=0 cellPadding=0 align=center border=0>
              <TBODY>
              <TR>
                <TD style="FONT-SIZE: 14px">这里我们以红外线遥控编码芯片为<SPAN 
                  class=main1>uPD6121G</SPAN>(或者是 HT622、7461等芯片)为例来说明用单片机实现<A 
                  name=0></A><B 
                  style="COLOR: black; BACKGROUND-COLOR: #ffff66">红外遥控解码</B>的详细过程,站长琢磨这个解码程序花了相当多的精力,期间几经修改逐步完善,后来还用它开发了几个小产品,希望能对网友学习单片机有所帮助。 

                  <P> </P>
                  <P 
                  align=left>红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。</P>
                  <P style="TEXT-INDENT: 0px"><SPAN class=main1><B>1 
                  红外遥控系统</B></SPAN></P>
                  <P style="TEXT-INDENT: 30px"><SPAN 
                  class=main1>通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。</SPAN></P>
                  <P style="TEXT-INDENT: 30px"><IMG height=164 src="" 
                  width=287></P>
                  <P style="TEXT-INDENT: 0px"><SPAN class=main1><B>2 
                  遥控发射器及其编码</B></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 height=131 src="" 
                  width=414></P>
                  <P style="TEXT-INDENT: 30px"><SPAN 
                  class=main1>上述“0”和“1”组成的32位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。</SPAN></P>
                  <P style="TEXT-INDENT: 30px"><IMG height=136 src="" 
                  width=549></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 height=47 src="" width=165>       <IMG 
                  height=59 src="" width=170>       
                  <DIR>②单发代码格式 </DIR><IMG height=125 src="" width=227>           

                  <DIR>③连发代码格式 </DIR>
                  <P><IMG height=104 src="" 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><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><B>接收器及解码</B></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></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE> </TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>

⌨️ 快捷键说明

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