PIC16F877A单片机接收BA5104红外线遥控解码程序

发布者:朱雀最新更新时间:2019-11-21 来源: 51hei关键字:PIC16F877A  单片机接收  BA5104  红外线遥控  解码 手机看文章 扫描二维码
随时随地手机看文章

//熟悉使用单片机进行红外线遥控解码

//1、首先根据BA5104遥控IC的编码形式进行解码

//2、把解码出来的按键用LED指示

//**************************************************


//**************************************************

//硬件设置:

//1、SW1开关2闭合,其他断开

//2、SW2开关1闭合,其他断开

//3、SW4开关全部闭合

//**************************************************


//**************************************************

//*****************定义头文件**********************

//**************************************************

#include

#include"delay.h"


//**************************************************

//******************定义配置位*********************

//**************************************************

__CONFIG(0x3545);       

//FLASH代码不保护,RB6和RB7为调试模式,FLASH不写保护,数据代码不保护

//RB3为数字IO口,低电压复位使能,上电延时开,看门狗开,4M晶体XT振荡器


//**************************************************

//******************定义常量***********************

//**************************************************

#define uchar unsigned char 

#define uint  unsigned int

#define IR  RE2


//**************************************************

//******************定义变量***********************

//**************************************************

uint rdata1,data;


//***********************************************

//函 数 名:port_init();

//入口参数:无

//出口参数:无

//函数作用:端口初始化

//说    明:

//***********************************************

void port_init(void)

{

  PORTA=0X00;    //设置RA口输出低电平

  PORTD=0X00;    //设置RD口输出低电平

  PORTE=0X00;    //设置RE口输出低电平

  ADCON1=0X07;   //设置RA口,RE口为普通IO口

  TRISA=0X00;    //设置RA口为输出口

  TRISD=0X00;    //设置RD口为输出口

  TRISE=0X04;    //设置RE2口为输入口,其他为输出口

  OPTION=0X8F;   //分频给WDT,分频比为128

}


//***********************************************

//函 数 名:scan();

//入口参数:无

//出口参数:无

//函数作用:遥控接收扫描函数

//说    明:

//***********************************************

void scan(void)

  uchar i,count=0;

  rdata1=0;                  //变量清零

  IR=0;                      //先输入低电平

  if(IR)                     //判断是否有遥控信号,高电平为有遥控信号

  {

    while(IR){CLRWDT();;}    //等待32ms延时

    for(i=0;i<12;i++)        //依次接收12位数据

    {

      while(!IR)             //等待低电平信号结束

      {

        DelayUs(20);         //延时50us, 20*2.5us=50us

        count++;

        if(count>25){break;} //延时大于1.25ms,跳出

      }

      if(count<7){return;}   //延时小于300us,为干扰跳出

      else if((count>6)&&(count<11)){rdata1|=0x00;} //延时在350-500us,判定为0

      else if(count>20){rdata1|=0x01;} //延时在1ms,判定为1

      rdata1=rdata1<<1;                //移位准备接收下一位数据

      count=0;                         //变量清零

      while(IR){CLRWDT();}             //等待高电平结束,接收下一位

    }

  }

}


//***********************************************

//函 数 名:delayms(uchar time);

//入口参数:time

//出口参数:无

//函数作用:延时

//说    明:

//***********************************************

void delayms(uchar time)

{

  uint i;

  while(time--)

  {

    for(i=93;i>0;i--){;}

  }

}


//***********************************************

//函 数 名:buzzer();

//入口参数:无

//出口参数:无

//函数作用:产生警报声

//说    明:

//***********************************************

void buzzer(void)

{

  RA5=1;         //RE1输出高电平

  delayms(200);

  RA5=0;         //RE1输出低电平

}


//***********************************************

//函 数 名:display();

//入口参数:无

//出口参数:无

//函数作用:显示函数

//说    明:

//***********************************************

void display(void)

{

  switch(data)        

  {

    case 0x0D81:RD0=!RD0;buzzer();break;

    case 0x0D82:RD1=!RD1;buzzer();break;

    case 0x0D84:RD2=!RD2;buzzer();break;

    case 0x0D88:RD3=!RD3;buzzer();break;

    case 0x0D90:RD4=!RD4;buzzer();break;

    case 0x0DA0:RD5=!RD5;buzzer();break;

    case 0x0DC3:RD6=!RD6;buzzer();break;

    case 0x0DC6:RD7=!RD7;buzzer();

  }

}


//***********************************************

//函 数 名:main();

//入口参数:无

//出口参数:无

//函数作用:MAIN函数

//说    明:

//***********************************************

void main(void)

  port_init();            //调用端口初始化函数

  while(1)

  {

    scan();               //调用遥控扫描函数

    if(data!=rdata1)

    {

      data=rdata1&0x0fff; //保留接收数据的低12位

      display();          //调用遥控按键显示函数

    }

  }

}


关键字:PIC16F877A  单片机接收  BA5104  红外线遥控  解码 引用地址:PIC16F877A单片机接收BA5104红外线遥控解码程序

上一篇:PIC16F877A单片机的PWM输出程序
下一篇:dsPIC30F6014控制DS18B20温度+CAN总线的发送程序

推荐阅读最新更新时间:2024-11-17 12:41

51单片机综合学习系统之 红外线遥控
大家好,通过以前的学习,我们已经对51单片机综合学习系统的使用方法及学习方式有所了解与熟悉,学会了12864点阵型液晶显示的基本知识,体会到了综合学习系统的易用性与易学性,这一期我们将一起学习红外线遥控的基本原理与使用方法。 先看一下我们将要使用的51单片机综合学习系统能完成哪些实验与产品开发工作:分别有流水灯,数码管显示,液晶显示,按键开关,蜂鸣器奏乐,继电器控制,IIC总线,SPI总线,PS/2实验,AD模数转换,光耦实验,串口通信,红外线遥控,无线遥控,温度传感,步进电机控制等等。 上图是我们将要使用的51单片机综合学习系统硬件平台,本期实验我们用到了综合系统主机,1602液晶屏、超薄型红外线遥控
[单片机]
51<font color='red'>单片机</font>综合学习系统之 <font color='red'>红外线</font><font color='red'>遥控</font>篇
单片机解码PPM信号
无线遥控就是利用高频无线电波实现对模型的控制。如天地飞的的6通道2.4 GHz遥控器,一套200多块,具有自动跳频抗干扰能力,从理论上讲可以让上百人在同一场地同时遥控自己的模型而不会相互干扰。而且在遥控距离方面也颇具优势,2.4 GHz遥控系统的功率仅仅在100 mW以下,而它的遥控距离可以达到1km以上。 遥控器发射机、接收机原理 每个通道信号脉宽0~2ms,变化范围为1~2ms之间。1帧PPM信号长度为20ms,理论上最多可以有10个通道,但是同步脉冲也需要时间,模型遥控器最多9个通道。 PPM格式 只连接了通道3(油门) arduino要测量脉宽时间很简单。有专门的库函数pulseIn( )
[单片机]
<font color='red'>单片机</font><font color='red'>解码</font>PPM信号
CD-ROM格式数据的软解码模块设计
摘要:介绍应用于嵌入式系统的CD-ROM格式数据软解码模块的设计方法;分析CD-ROM格式的数据结构,给出EDC及ECC解码算法的软件实现方法以及该模块的软件流程图。 关键词:CD-ROM格式 软解码 EDC检错 ECC纠错 引言 CD-ROM是目前应用非常广泛的大容量、低成本的存储设备。为了减小误码率,原始数据经过格式化编码和信道编码后,才写入CD-ROM盘片中;在读取时,则需经过信道解码和格式化解码后才能得到所需的原始数据。CD-ROM数据的读写过程如图1所示。 在一般的音像设备(如VCD机)和个人电脑中,CD-ROM数据的解码过程是由专用解码芯片来完成的;而CD-ROM不但可以应用在音像设备和个人电脑中,还可以
[手机便携]
如何用单片机实现FSK来电显示解码
原理: 此项目的关键是,FSK是连续相位的,且高电平与低电位的频率不成倍数关系(1200Hz与2200Hz).采用测量脉冲宽度的话不容易确定上升沿与下降沿.理论上用A\\D转换后的幅值对时间查表可确定上升下降沿,但软硬件太复杂,还不如买成品fsk解调IC.我采用的办法是测量脉冲宽度,因为数据是异步串行通讯方式,由1到0的下降沿来确定时钟,即由1200hz到2200hz的改变来确定,关键是1200到2200的改变是任意相位的,而不是从0相位开始.说明白点,用单片机不停测脉冲宽度,先是1200的宽度,突然来了个脉冲宽度在1200与2200之间,这说明下降沿在这个脉冲内的某个时间,怎么确定这个时间呢?经过我周密计算 :--) ,公式
[单片机]
解调/解码器二合一机顶盒芯片【意法半导体(ST)】
中国,2011年1月27日 —— 全球机顶盒(STB)芯片领导供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码STM)进一步扩大其高性能且具价格竞争力的机顶盒产品策略,推出两款新的标清(SD)机顶盒和高清(HD)机顶盒系统级芯片。新产品能够让标清机顶盒和高清机顶盒采用相同的印刷电路板(PCB)设计,并能让设备厂商沿用针对上一代产品所开发的软件。 意法半导体家庭视频产品部营运副总裁Eric Jumelet表示:“通过推出这两款下一代解调器/解码器二合一芯片,意法半导体让电视运营商和设备厂商能够满足终端用户对差异化服务和高价格竞争力日益增长的需求。” STi7162高清机顶
[家用电子]
解调/<font color='red'>解码</font>器二合一机顶盒芯片【意法半导体(ST)】
STM8单片机无线315&433脉宽自适应_通用解码程序
单片机源程序如下: /* RFINT不能用PA1 要改板 改在PC6 */ /* Includes ------------------------------------------------------------------*/ #define MAIN_C #include ALL.h void Delay(u16 nCount) { /* Decrement nCount value */ while (nCount != 0) { nCount--; } } //10ms定时中断初始 在PWM时可更改 void TIME1_CONFIG(void) { /* Init TIMER 1 *
[单片机]
为DTV地面广播接收机选择高质量的解调解码芯片
当前,数字电视产业的发展如火如荼,标准的制订、数字电视整体平移、终端制造商争先推出高清数字电视和机顶盒,这些都传递了一个声音:数字电视产业化革命即将到来。 在数字电视相关技术中,接收机的设计技术难度高,而能否实现高质量的接收性能又直接影响到数字电视终端节目显示的效果。那么,如何选择一款具有良好接收性能的数字电视解调芯片呢?这需要进行系统地评估以确定最佳解决方案。在下文中作者将从数字电视地面广播系统的特点、接收机中降低干扰的常见电路和ATSC地面接收机的测试方法等方面来进行阐述,希望能为数字电视生产厂商提供一些参考,以便更系统性地选择高质量的解调解码芯片。 数字电视地面广播系统的特点 真正的数字电视广播是指图像和声音都经过数字
[家用电子]
TMS320C6201在MPEG-4视频解码器中的应用
  引言   随着网络和多媒体技术的发展,视觉通信的重要性和需求急剧增加,如桌面视频会议、移动终端、基于因特网的视音频通信等。随之而来的是视频压缩技术的迅速发展和视频压缩标准的不断推出。国际运动图像编码专家组(MPEG)先后推出了MPEG-1、MPEG-2和MPEG-4.MPEG-4是由国际运动图像专家组于1998年11月制定的。它是一个面向多媒体应用的压缩标准,其应用覆盖范围远大于MPEG-1和MPEG-2等标准。从移动可视电话到专业视频编辑,既支持自然图像,也支持计算机合成图像。最重要的是它支持交互功能。这是由于MPEG-4采用了与其它标准不同的、基于对象的图像描述方式。目前,国内有关MPEG-4应用技术的研究及开发的工作正
[家用电子]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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