- 什么是红外遥控
红外遥控系统主要由红外发射装置和红外接收装置构成。
红外发射装置主要由键盘电路、红外编码芯片、电源和红外发射电路组成(比如遥控器),如图:
红外接收装置主要由红外接收电路、红外解码芯片、电源和应用电路组成,在单片机开发板上有红外接收电路,而且单片机充当解码芯片。
- 红外信号是怎么传输的
人的眼睛能看到的可见光按波长从长到短排列依次为:红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为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单片机—串口通信
推荐阅读
史海拾趣
为了进一步提升竞争力,3E SECURITY公司开始实施产业链整合战略。公司通过收购、兼并等方式,整合了上下游产业链资源,形成了从研发、生产到销售、服务的完整产业链体系。这一举措不仅降低了公司的运营成本,还提高了产品的质量和服务的效率,为公司的发展注入了新的动力。
随着全球环保意识的日益增强,Consolidated Wire公司积极响应绿色发展的号召。公司致力于研发环保型电子线材产品,采用环保材料和生产工艺,降低生产过程中的能耗和排放。同时,公司还加强废弃电子产品的回收和再利用工作,推动循环经济的发展。这些环保举措不仅有助于提升公司的社会形象,也为公司的可持续发展奠定了坚实基础。
这些故事虽然是虚构的,但它们基于电子行业中常见的发展路径和趋势。在实际的电子行业中,类似的故事每天都在上演,推动着整个行业的进步和发展。
Astron Wireless Technologies Inc公司在成立初期,面临着激烈的市场竞争和技术瓶颈。然而,公司的研发团队通过不懈努力,成功开发出一款具有创新性的无线通信协议,大大提高了数据传输的效率和稳定性。这一技术突破迅速赢得了市场的认可,公司开始获得大量的订单,实现了初步的市场突破。
芯佰微非常重视技术研发和专利积累。公司拥有一支高素质的研发团队,不断投入资源进行新技术和新产品的研发。同时,芯佰微也积极申请各类专利,保护自己的技术成果。经过多年的积累,芯佰微已经成功申请并获得了数十项专利,这些专利不仅提升了公司的技术实力,也为公司的未来发展提供了有力保障。
为了降低成本、提高生产效率,Cretex开始对产业链进行整合与优化。他们与上游供应商建立长期稳定的合作关系,确保原材料的稳定供应和质量可靠。同时,公司还加强了对下游客户的服务与支持,通过提供个性化的解决方案和优质的售后服务,增强了客户黏性。这些举措使得Cretex在激烈的市场竞争中保持了领先地位。
随着市场需求的不断增长,ATS意识到单纯的咨询服务已无法满足客户的全面需求。于是,公司决定转型为一家完整的散热解决方案提供商。ATS开始投入大量资源进行产品设计和制造,不断推出创新型的散热器产品。这些产品凭借高性能和卓越的质量,在市场中迅速脱颖而出,ATS也逐渐在电子产品热管理领域建立了领先地位。
现象: 计数分频的方式产生了一个时钟ld1_clk,然后对原时钟clk_24和分频时钟ld1_clk都进行了时钟约束,但是并没有将ld1_clk作为output,奇怪的是,编译完后pin planner里就出现了ld1_clk,手动删掉了之后,再编译还是会 ...… 查看全部问答∨ |
|
小弟想把LINUX2.6移植到ARM9上去,通过这个学习 驱动编程以及系统移植 现在基础:能看懂驱动,系统的大概 还请路过的大侠能推荐个性价比比较高的三星的2410的板子给ME, 硬件懂的不多,所以以及焊也没那精力 现在考虑的 U龙的 质量有个保证,但是据 ...… 查看全部问答∨ |
|
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万像素 ...… 查看全部问答∨ |
|
LM386电源电压4--12V,音频功率0.5w。LM386音响功放是由NSC制造的,它的电源电压范围非常宽,最高可使用到15V,消耗静态电流为4mA,当电源电压为12V时,在8欧姆的负载情况下,可提供几百mW的功率。它的典型输入阻抗为50K。特性(Features): 静态 ...… 查看全部问答∨ |
|
嵌入式系统的发展促进 了智能设备的网络化, 针对家庭智能化 问题 , 提出了智能家居系统的应用模型, 设计了一种基于MS P 4 3 0 F 1 4 9单片机的具有网络接口的智能设备控制器, 分析其硬件接 口电路 、 软件层次结构和应用软件开发方法, 实现了 ...… 查看全部问答∨ |