- 什么是红外遥控

红外遥控系统主要由红外发射装置和红外接收装置构成。

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

在这里插入图片描述

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


- 红外信号是怎么传输的

人的眼睛能看到的可见光按波长从长到短排列依次为:红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为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;//或运算,给最高为置1

time=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单片机  红外遥控 引用地址:51单片机—红外遥控

上一篇:51单片机-实践操作
下一篇:51单片机—串口通信

推荐阅读

自己在上学的时候,搞过2年的单片机STM32编程,当时还记得一心想在上面跑个操作系统,UCOS操作系统,但是当时自己为什么要上这个操作系统,不是特别的清楚,后来自己在实际工作中,做了应用软件,感觉有了一些深刻的体会。1.上操作系统有很多资源可以利用,系统的内存管理,线程进程的使用。文件系统的使用,图形系统的使用,这个是你在没有上操作系统的时...
伴随着人工智能的火热,机器人行业也是风生水起。但在2019年世界机器人大会上,中国机器人产业联盟理事长、新松机器人自动化股份有限公司总裁曲道奎却透露了一个多少让人吃惊的信息:2018年,包括发展最快、规模最大的中国在内,高歌猛进的全球机器人市场突然出现了一个拐点,由过去的高速发展变成了低速增长,甚至是负增长——全球工业机器人市场的增速...
据外媒报道,总部位于澳大利亚墨尔本的Rectifier Technologies公司推出了首款双向电动汽车充电器——壁挂式Highbury直流(DC)双向充电器,不仅可以利用家庭和企业的电力给电动汽车充电,还能够将电动汽车的剩余电力卖回给电网。图片来源:Rectifier此种称作“车到电网”(V2G)的技术可以让具有双向充电功能的电动汽车(如日产聆风)车主在用电高峰期时...
近日,江苏芯德半导体科技有限公司(以下简称:芯德半导体)完成A轮投资,投资方包括长石资本、金浦新潮、小米长江产业基金、苏民投、国策投资、辰韬资本、紫金创投等,老股东晨壹资本追加投资。天眼查显示,芯德半导体已于8月27日发生多项工商变更,新增湖北小米长江产业基金合伙企业(有限合伙)等股东,公司注册资本由6.1亿元增加至7亿元。(来源:天眼查...

史海拾趣

问答坊 | AI 解惑

关于非时钟引脚总是在pin planner里出现的问题

现象:       计数分频的方式产生了一个时钟ld1_clk,然后对原时钟clk_24和分频时钟ld1_clk都进行了时钟约束,但是并没有将ld1_clk作为output,奇怪的是,编译完后pin planner里就出现了ld1_clk,手动删掉了之后,再编译还是会 ...…

查看全部问答∨

USB驱动问题

我要做一个东西,主要功能是PC应用程序和一个USB设备通讯,该USB设备的cpu自带了USB接口,通讯时候需要写驱动么?是不是通用的系统自带的USB驱动就能搞定了? 新手,请高手们不吝赐教…

查看全部问答∨

ARM高手请进(求推荐ARM9开发板)

小弟想把LINUX2.6移植到ARM9上去,通过这个学习 驱动编程以及系统移植 现在基础:能看懂驱动,系统的大概 还请路过的大侠能推荐个性价比比较高的三星的2410的板子给ME, 硬件懂的不多,所以以及焊也没那精力 现在考虑的 U龙的 质量有个保证,但是据 ...…

查看全部问答∨

MTK6225 手机开发板(含源代码)

MTK6225 手机开发板(含源代码) 有诚意者请联系 Qq:296662705 硬件特性: 1、 CPU:mtk6225 2、 TFLASH 卡接口 3、 176X220 2.6寸TFT LCD,最高支持320*240*16的TFT LCD 4、 4线触摸屏接口 5、 双声道音频输出 6、 一个Camera 130万像素 ...…

查看全部问答∨

三端变色发光二极管的封装问题.!

型号有2EF302、2EF312、2EF322.. 谁能帮我找下它的尺寸封装. 是不是和三极管一个大小?按三极管来封装就OK了吗?…

查看全部问答∨

【晒经典】LM386音频放大模块

LM386电源电压4--12V,音频功率0.5w。LM386音响功放是由NSC制造的,它的电源电压范围非常宽,最高可使用到15V,消耗静态电流为4mA,当电源电压为12V时,在8欧姆的负载情况下,可提供几百mW的功率。它的典型输入阻抗为50K。特性(Features): 静态 ...…

查看全部问答∨

做小车的设计报告<测试方案及测试条件>是什么意思啊

本帖最后由 paulhyde 于 2014-9-15 04:00 编辑 求助。。。。。。。。。。。。。。。。。。。。。。。  …

查看全部问答∨

【MSP430共享】基于以太网的智能设备控制器的设计与实现

嵌入式系统的发展促进 了智能设备的网络化, 针对家庭智能化 问题 , 提出了智能家居系统的应用模型, 设计了一种基于MS P 4 3 0 F 1 4 9单片机的具有网络接口的智能设备控制器, 分析其硬件接 口电路 、 软件层次结构和应用软件开发方法, 实现了 ...…

查看全部问答∨

求助

I/O模拟I2C,主机读操作(从机向主机发送数据)时,SDA和SCL应该设置成什么状态?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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