- 什么是红外遥控

红外遥控系统主要由红外发射装置和红外接收装置构成。
红外发射装置主要由键盘电路、红外编码芯片、电源和红外发射电路组成(比如遥控器),如图:

红外接收装置主要由红外接收电路、红外解码芯片、电源和应用电路组成,在单片机开发板上有红外接收电路,而且单片机充当解码芯片。

- 红外信号是怎么传输的

人的眼睛能看到的可见光按波长从长到短排列依次为:红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为0.62~0.72微米,红外遥控就是利用波长为0.76至1.5微米之间的近红外线来传送控制信号的。
红外信号的发射由红外发射电路中的红外发光二极管完成,通常情况下为了提高抗干扰能力与降低电源消耗,遥控器将遥控信号(二进制脉冲码)调制在载波(载波是传送信息的物理基础和承载工具)上经放大后发送至红外二极管,再由二极管转换为红外信号发送出去。
遥控器上不同的按键有着不一样的键值,按下相对应的键,红外二极管就会发送对应的信号,接收装置接收到信号后会对信号进行信号解调后会得到相应按键的键值,再根据不同的键值执行相应的操作。

- NEC协议

就像串口通信一样,红外通信也有其自己的通信协议,我们一般遵循NEC协议。
NEC规定红外二极管每次发送的信号的数据格式如下:

发送的数据主要由引导码、用户码1、用户码2、数据码、数据反码组成。引导码相当于暗号,当接收装置接收到正确的引导码后就开始读取数据,俩组用户码是为了区别其他的红外发射器发射的信号,数据码中的内容就对应着相应的键值,数据反码是为了在接收信号后检验信号的正确性。(引导码是“9ms高电平+4.5ms低电平”)
这样我们虽然清楚了信号的发送形式,但是怎么表达数据发送中的高低位(“0"和"1”)呢?这又涉及到NEC的位定义了,规定:“0.56ms高电平+0.565ms低电平”代表“1”;“0.56ms高电平+1.69ms低电平”代表“0”,就是说“0”与“1”的不同就是他们低电平所持续的时间不同。(PS:发送数据时从最低位开始发送)

不知道读者注意到黑体字标出的发送没,为什么要刻意强调是发送时的呢?因为单片机接收到的数据格式与发送时的恰恰相反,就是说接收时的引导码是“9ms低电平+4.5ms高电平”;“0”是“0.56ms低电平+0.565ms高电平”;“1”是“0.56ms低电平+1.69ms高电平”。这一点我们要格外注意,因为后续我们在解码程序中是以接收到的数据为准的!!!

- 程序分析

敲代码之前首先要对程序有一个清楚的认识,即明白要做哪几个模块?这些模块之间要怎么联系起来?在下做的一个程序是把从红外发射器中接收到数据经过处理后显示在数码管上,这样看来我的程序就需要如下几个模块:
1.初始化模块:包括初始化红外接收引脚(把P3.2外部中断引脚作为红外接收引脚)、打开外部中断允许位;
2.延时模块:延时模块主要用来分析高低电平持续的时间,从而判断对应的位是“0”还是“1”;
3.解码模块:利用外部中断函数interrupt 0进行数据解码,其任务是检验并接收正确的数据信号,对用户码和数据码进行分析,即通过检测高低电平持续的时间来判断相应的位是“0”还是“1”。然后得出相对应的键值,把键值对应的数反馈到程序中;
4.显示模块:其主要任务是接收解码模块反馈的数值,并将数值显示在数码管上;
5.主函数模块:整合前几个模块。
程序如下:

#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit a=P2^2;//a、b、c是控制位选的三个引脚
sbit b=P2^3;
sbit c=P2^4;
sbit IR=P3^2;//将红外接收引脚和外部中断0引脚定义在一起,
这样一旦接收到信号就进入中断函数进行解码
uint jz=0,time;//jz存的是键值相对应的数值
uchar irdata[4],duan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};
//duan[17]存的是数码管段选显示0~F的数据;irdata[4]存的是一组用户码和数据码、数据反码void dy(uint n)   //延时一次约为0.01ms 用来判断脉冲时间
{while(n--);}void xs(uint x)   //数码管显示
{
a=0;b=0;c=0;//因为我遥控器上的数只有0~9,所以就位选时控制一个数码管就行
P0=duan[x];//显示数字}void init()       //初始化
{
IT0=1;//确定中断0(红外接收)的触发方式为下降沿触发
EX0=1;//打开外部中断0和总中断的允许位
EA=1;
IR=1;           //相当于打开外部中断0  此处意义为红外接收器打开
}void hhh() interrupt 0   //执行中断:进行读取信号  最后产生键值
{
uint i,j,k;
dy(700);//能进入中断函数就代表IR已经为0,此处的延时是为了判断延时的大体时间
if(IR==0)
{
k=1000;
while(IR==0&&(k>0))//检测引导码中9ms低电平
{
dy(1);
k--;
}
if(IR==1)//判断高电平
{
k=500;
while(IR==1&&(k>0))//检测引导码中4.5ms高电平
{
dy(1);
k--;
}
for(i=0;i<4;i++)  //开始读取用户码和数据和数据反码,
因为用户码和数据码、数据反码共有4组,所以外层有四组循环
{for(j=0;j<8;j++)//每组数据有八位,故内层循环有八组,每次循环读一位{if(IR==0){k=70;while(IR==0&&(k>0))//检测0.56ms的低电平{k--;dy(1);}}if(IR==1)//进入高电平时间,这一块比较核心,它判断了高电平持续时间的长短{time=0;k=500;while(IR==1&&k>0)//开始检测高电平{dy(10);time++;//time是以0.1ms为单位,因为dy(10);k--;}if(time>30) return ;irdata[i]>>=1; //移位运算,空出最高为为下一次采集做准备if(time>=8)//如果高电平持续时间超过0.85ms代表位是“1”irdata[i]|=0x80;//或运算,给最高为置1time=0;//重置}}
}
}
if(irdata[2]!=~irdata[3])//irdata[2]与irdata[3]分别是数据码和数据反码 ,此操作是检验数据准确性
return;
}
switch(irdata[2])//反馈键值所对应的数值
{
case 0x16:jz=0;break;
case 0x0c:jz=1;break;
case 0x18:jz=2;break;
case 0x5e:jz=3;break;
case 0x08:jz=4;break;
case 0x1c:jz=5;break;
case 0x5a:jz=6;break;
case 0x42:jz=7;break;
case 0x52:jz=8;break;
case 0x4a:jz=9;break;
case 0x45:jz=10;break;
default:break;
}}void main()
{
init();//初始化
while(1)
xs(jz);//显示数值
}

51单片机—红外遥控相关推荐

  1. 【【51单片机红外遥控小风车】】

    51单片机红外遥控小风车 今天结束了51单片机的学习,明天开始学习stm32 我是学习江科大的视频一步一步完成的 ,他讲的非常好,非常好 特别通俗易懂 学习复刻他的作品我也自己创作了一些 但是现在暂时 ...

  2. 基于51单片机红外遥控人体感应自动车库门控制设计(程序+Proteus仿真+原理图+PCB图+参考论文+开题报告+任务书等)

    一.硬件方案 单片机的红外遥控人体感应自动门控制系统设计的实现主要有电源5V供电.单片机最小系统.红外感应遥控模块,红外一体接收头,按键电路,步进电机驱动电路,指示灯电路组成.. 二.设计功能 1.如 ...

  3. 63、基于51单片机红外遥控人体感应自动门控制系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.PCB图 六.Protues仿真 七.程序 部分代码 八.资料包括 摘要 伴随着电气技 ...

  4. 基于51单片机+红外遥控解码+LCD1602显示

    红外遥控解码(NEC) 基本介绍 什么是红外线? 红外线系统的组成 发射管和接收管 红外遥控发射(载波频率) 重要介绍 NEC协议 数据格式(必看) 位定义(必看) 编写程序思路(2种) 方式一 方式 ...

  5. 51单片机——红外遥控 C语言入门编程

    目录 红外发射装置: NEC码: 红外接收设备: 1.红外遥控:数码管上显示红外解码遥控器键值 红外遥控方法一:外部中断+延时 2.红外遥控:红外遥控控制LCD1602画面上的值 红外遥控方法二:外部 ...

  6. 51单片机 驱动步进电机 C语言 lcd,51单片机红外遥控控制步进电机的LCD显示源程序...

    /******************************************************************************* * 实验名              ...

  7. (毕业设计资料)基于51单片机红外无线遥控智能家电控制系统设计

    基于51单片机红外遥控定时开关智能家电插座设计 本系统由STC8C52单片机电路+时钟DS1302电路+LCD1602液晶显示电路+按键电路+继电器控制电路+蜂鸣器报警电路+红外传感器电路+电源电路组 ...

  8. 51单片机红外电子密码锁【红外对管矩阵键盘数码管LCD1602显示模块】

    系统功能 51单片机红外电子密码锁系统主要由红外线编码电路.红外线解码开锁电路.掉电保护电路.声光提示报警电路.键盘及显示电路等组成,编写相应的程序代码并进行结果测试和仿真演示. 利用红外遥控技术和单 ...

  9. 51单片机-红外计算器

    51单片机-红外计算器 1.硬件:普中-A2开发板 使用哪些硬件资源? 1.1.LCD1602液晶显示器 1.2.红外接收头 1.3.红外遥控器 2.软件介绍: 2.1.共分为8个.c文件. 2.1. ...

  10. 51单片机红外通信及控制LED灯(LCD1602显示)

    51单片机红外通信及控制LED灯(LCD1602显示) 大家好,又和大家见面了,离上一次DS18B20传感器的文章已经过去了一个星期了,这期我将给大家带来,基于STC89C52芯片和HS0038红外接 ...

最新文章

  1. 蚂蚁金服开源增强版 Spring Boot 的研发框架!
  2. 小红书做直播的背后,隐藏了什么秘密?
  3. 如何兼容並蓄Android Studio 與 Eclipse 的優點, 減少顧此失彼的缺憾
  4. 利用Python实现矩阵乘法并与numpy的结果比较
  5. python开发网页视频播放器_HTML5 VideoAPI,打造自己的Web视频播放器
  6. 20170429,上市公司2016年报全出炉(附最新排行榜)
  7. csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别...
  8. Python爬虫框架Scrapy学习笔记原创
  9. 《CLR via C#》之线程处理——线程池与任务
  10. Maven构建Web项目
  11. hadoop namenode启动不了_hadoop全分布式是个什么鬼?!动手搭建Hadoop(4)
  12. 数据库简介(初步了解数据库)
  13. 如何将class文件反编译成java文件
  14. 浏览器User Agent Switcher Options实现模拟浏览器 附(UA下载)
  15. 使用百度API实现热点(WIFI)、GPS、基站定位
  16. Excel中,把数字和汉字分开的方法
  17. OpenGL PBO渲染视频数据 [转]
  18. 基于vue框架的二手书交易网站
  19. nyoj451 光棍节的快乐
  20. python葡萄酒数据_用python进行葡萄酒质量预测

热门文章

  1. 【VUE】微商城(四)----封装轮播图组件,axios安装使用
  2. 使用rpm 安装wget
  3. Python编程 | 颜色分类
  4. 【统计学笔记】正态概率图与Q-Q图
  5. 关于KERNEL_SECURITY_CHECK_FAILURE蓝屏(BSOD)0x00000139错误解决思路
  6. 《机器学习与计算力学的结合及应用初探 》论文学习
  7. codeBook背景建模
  8. 仿金蝶电商ERP进销存系统多仓库版
  9. 锐浪报表数据源access_锐浪报表应用系列三
  10. 人工智能案例:车厂特斯拉的花式AI应用...