51单片机红外控制解码详解

发布者:电竞狂人最新更新时间:2017-01-20 来源: eefocus关键字:51单片机  红外控制  解码 手机看文章 扫描二维码
随时随地手机看文章

红外遥控发射芯片采用PPM编码方式,当发射器按键按下后,将发射一组108ms的编码脉冲。遥控编码脉冲由前导码、8位用户码、8位用户码的反码、8位操作码以及8位操作码的反码组成。通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个9ms的低电平(起始码)和一个4. 5ms的高电平(结果码)组成,作为接受数据的准备脉冲。以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。如果按键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2. 5ms)组成。

单片机采用外部中断INTI管脚和红外接收头的信号线相连,中断方式为边沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二进制的“1”、“0”码。并将8位操作码提取出来在数码管上显示。

// 解码值在Im[2]中,当IrOK=1时解码有效。 
/* 51单片机红外遥控解码程序 */
//用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码

#include
#define uchar unsigned char 
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar f;

#define Imax 14000    //此处为晶振为11.0592时的取值, 
#define Imin 8000    //如用其它频率的晶振时,
#define Inum1 1450    //要改变相应的取值。
#define Inum2 700 
#define Inum3 3000

unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;

 


void delay(uchar i)
{
  uchar j,k; 
for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}

void display()
{
   dula=0;
   P0=table[show[0]];
   dula=1;
   dula=0;
   
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   
   P0=table[show[1]];
   dula=1;
   dula=0;
   
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
}


//外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
 Tc=TH0*256+TL0;                                               //提取中断时间间隔时长
 TH0=0; 
    TL0=0;              //定时中断重新置零
 if((Tc>Imin)&&(Tc      { 
  m=0;
        f=1;
  return;
      }       //找到启始码
   if(f==1)
      {
        if(Tc>Inum1&&Tc    {
   Im[m/8]=Im[m/8]>>1|0x80; m++; 
       }
      if(Tc>Inum2&&Tc        {
         Im[m/8]=Im[m/8]>>1; m++; //取码
  }
  if(m==32) 
   {
         m=0;  
         f=0;
         if(Im[2]==~Im[3]) 
      {
           IrOK=1; 
   }
        else IrOK=0;   //取码完成后判断读码是否正确
     }
               //准备读下一码
   }
 
}


/*演示主程序*/
void main(void)
{
    unsigned int  a;
   
 m=0;
    f=0;
 EA=1;
 
 IT1=1;EX1=1;
 
 TMOD=0x11;  
 TH0=0;TL0=0;
 TR0=1;//ET0=1;

 while(1)
 {
 
       if(IrOK==1) 
  {
      show[1]=Im[2] & 0x0F;     //取键码的低四位
           show[0]=Im[2] >> 4;  
           IrOK=0;
     
  }
           for(a=100;a>0;a--)
          {
    display();
   }
 
 }
}


关键字:51单片机  红外控制  解码 引用地址:51单片机红外控制解码详解

上一篇:51单片机时钟与周期
下一篇:按键数码管数值前移

推荐阅读最新更新时间:2024-03-16 15:31

51单片机H桥电路控制电机正反转和PWM调速
搭了个H桥电路,控制电机的正反转和PWM调速,程序是网上的,改改引脚就能用,电路和源程序如下: 功能:P1.1按键停止,P1.2左转,P1.3右转,P1.0调速 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit PW1=P0^0 ; sbit PW2=P0^1 ; //控制电机的两个输入 sbit accelerate=P1^0 ; //调速按键 sbit stop=P1^1 ; //停止按键 sbit left=P1^2 ; //左转按键 sbit right=P1^3 ; //右转按键
[单片机]
<font color='red'>51单片机</font>H桥电路<font color='red'>控制</font>电机正反转和PWM调速
详解80C51单片机的四种I/O口
在80C51单片机中有4个双向的8位I/O口P0~P3,在无片外存储器的系统中,这4个I/O口的每一位都可以作为准双向通用I/O使用。 在具有片外存储器的系统中,P0口作为地址线的低8位以及双向数据总线,P2口作为高8位的地址线。这4个I/O口除了可以按字节寻址外,还可以按位寻址。 P0口 下图给出了P0口的逻辑结构,它由一个锁存器,两个三态输入缓冲器,一个多路复用开关,一个与门,一个非门以及控制电路和驱动电路组成。 “锁存器,是数字电路中的一种具有记忆功能的逻辑元件。锁存,就是把信号暂存以维持某种电平状态,在数字电路中则可以记录二进制数字信号 0 和 1 。 只有在有锁存信号时输入的状态被保存到输出,直到下一个锁
[单片机]
详解80C<font color='red'>51单片机</font>的四种I/O口
pc机与89C51单片机的串口通信编程
一、pc机上的串口通信编程过程如下: 1.建立项目 打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点); 2.在项目中插入MSComm控件 选择Project菜单下Add To Project子菜单中的 Components and Controls 选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。 选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省
[单片机]
pc机与89C<font color='red'>51单片机</font>的串口通信编程
红外线遥控器软件解码程序(能解大部分遥控器的编码)
红外线一开始发送一段13.5ms的引导码,引导码由9ms的高 电平 和4.5ms的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则 遥控器 则发送一段重复码,重复码由9ms的高电平,2.25ms的低电平,跟着是一个短脉冲,本程序是免费给大家,版权所有,不得用于商业目的,如需用到本程序到商业上请与本人联系经本人同意后方可用于商业目的,本程序经过试用,能解大部分遥控器的 编码 ! #include at89x52.h #define NULL 0x00//数据无效 #define RESET 0X01//程序复位 #define REQUEST 0X02//请求信号 #defi
[单片机]
关于51单片机字符串 EEPROM存储与读取的问题
题目如下 通过串口助手控制 LCD 显示屏,通过 LCD1602 显示并保存在 EEPROM 中,实现 数据的掉电保存(例 如:串口向单片机发送一串英文字符,该字符在 LCD 上显示出 来,若按下 k1 则实现数据的保存,按下 k2 实 现读取上次保存的数据,显示在 1602 上) 效果如下 #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 #include i2c.h #include string.h typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbi
[单片机]
关于<font color='red'>51单片机</font>字符串 EEPROM存储与读取的问题
51单片机学习笔记———7.按键法配置定时器
如果用延时函数来对按键进行检测的话,会消耗单片机的内存,不是很好,于是我们有以下方法: unsigned char cnt1 = 0XFF; cnt1 = (cnt1 1)|KEY1; if(cnt1!=0x00) { KeyLock = 0; } else if (KeyLock==0) { KeyNum = 1; KeyLock = 1;//防止按键触发 }
[单片机]
51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码
1. 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称。目前教科书基本都是以早期的MCS-51为原型,讲解微机的原理及其接口技术的。早期的51单片机功能都较弱,需扩展rom,ram等才能组成一个较复杂的系统。而现今流行的8位51单片机都比早期芯片作了较多的功能扩展,性能强劲。生产51单片机的厂家有很多,像atmel的at80c51系列,华邦w78c051系列,宏晶stc80c51系列等,其中台湾宏晶stc系列51单片机在国内尤为流行。因此,笔者采用宏晶性价比较高的一款51单片机stc12c5a60s2来作开发讲解。该款51单片机已经是宏昌第N代产品了,其主要特征如下: 1.1. 增强型8051 CP
[单片机]
<font color='red'>51单片机</font>开发系列一-<font color='red'>51单片机</font>开发环境搭建以及入门汇编代码
P-Product加盟Tensilica合作伙伴网络, 移植编解码器至HiFi 2音频引擎
美国加州SANTA CLARA 2007年9月26日讯 –Tensilica公司日前宣布P-Product公司加入其Xtensions合作伙伴网络。P-Product公司在Tensilica公司HiFi 2 音频引擎上已经移植了音频软件,并在音视频软件移植方面拥有相当重要的专业技术。 Tensilica移动多媒体总监Larry Przywara表示,“有兴趣进行自定义专门的音频编解码器移植的客户可选择P-Product公司,因为他们拥有Tensilica公司HiFi2音频引擎平台编程的技能。凭借其移植和算法优化方面的丰富经验,P-Product公司将是我们HiFi2客户的优先选择。” P-Product公司CEO Michael
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved