89C51单片机之红外通信 您所在的位置:网站首页 单片机红外接收模块怎么接线 89C51单片机之红外通信

89C51单片机之红外通信

2024-07-17 10:30| 来源: 网络整理| 查看: 265

一、概述

常见的红外线遥控器:空调遥控器,电视机遥控器。

1.1、什么是红外线 人眼可见光按波长从长到短排列,依次为:红、橙、黄、绿、青、蓝、紫。红光的波长范围为0.62~0.76um(微米)。紫光的波长范围位0.38~0.46um(微米) 。       1米(m)=1000000微米(um)比紫光波长还短的叫紫外线。比红光波还长的叫红外线。红外线遥控就是利用波长位0.76~1.5um(微米)之间的近红外线来传送控制信号的。 1.2、红外系统的组成 红外系统的组成:红外发射装置和红外接收设备两大部分组成。红外发射装置的组成:由键盘电路、红外编码芯片、电源和红外发射电路组成。红外接收设备的组成:红外接收电路、红外解码芯片、电源和应用电路组成。通常为了使信号更好的被发射端发送出去,经常会将二进制数据信号调成位脉冲信号,通过红外发射管发射。脉冲信号调制的两种方式: 通过脉冲宽度来实现信号调制的脉宽调制(PWM)。通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)。 二、红外发射管 红外遥控发射装置(红外遥控器):由红外编码电路,键盘电路,电源电路和红外发射电路组成。红外发射电路的主要元件:红外发光二极管。实质是一只特殊的发光二极管。红外发光二极管内部材料不同于普通的发光二极管,在其两端施加一定电压时,便发出红外线,而不是可见光。目前红外发光二极管发出的红外线波长为940左右,其外形与普通φ5发光二极管相同。

三、红外遥控器发射 红外遥控器为了提高抗干扰性能和降低电源消耗;红外遥控器常用的载波方式传送二进制编码,常用的载波频率为38KHz,由发射端所使用的455kHz晶振来决定的。发射端要对晶振进行整数分频,分频系数一般采取12,所以455kHz/12  约为  37.9kHz  取整四舍五入38kHz.也有一些遥控系统采用36kHz、40kHz、56kHz等,一般由发射短晶振的振荡频率来决定。通常的红外遥控器是将遥控信号(二进制脉冲码),调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去。二进制脉冲的形式有多种,其中最为常用的是PWM码(脉冲宽度调制码)和PPM码(脉冲位置调制码,脉冲串之间的时间间隔来实现信号调制)如果要开红外接收设备,一定要直到红外遥控器的编码方式和载波频率,选取一体红外接收头和制定解码方案。

 

四、红外线接收

红外接收设备的组成:由红外接收电路,红外解码,电源和应用电路组成。

红外遥控器接收器的主要作用是将遥控器发射出来的红外信号转换位电信号,再放大、限幅、检波,整形、形成遥控指令脉冲,输出至遥控微处理器。

成品红外接收头的封装有两种:一种由铁皮屏蔽;一种是塑料封装;有三只脚,即电源正(VDD)、电源负(GEN)和数据输出(VOUT)。

注意:成品红外接收头的载波频率,另外在遥控编码芯片输出的波形与接收头端接收到的波形。

五、数据格式

数据格式:由引导码(起始码)、用户码、数据码和数据码反码组成,编码总占领32位。数据反码:是数据码反相后的编码,编码用于对数据的纠错。注意:第二阶段的用户码也可以在遥控应用中被设置成第一段用户码的反码。 数据码: 1111 0000 数据码反码: 0000 1111

 

六、位定义

用户码或数据码中的每一个位可以是‘1’,也可以是位‘0’。区分‘0’和‘1’是利用脉冲的时间间隔来区分,这种编码方式称为脉冲位置调制方式,英文简写PPM。(红外遥控器的编码方式)

由上图可区分,位0和位1;位0和位1的低电平时间相同,高电平时间不同,位0高电平持续时间为0.56ms,位1高电平时间为1.69ms,但也不是绝对的,如位0高电平持续时间在0.56ms上下浮动,故而取0.56~1.69ms中间值,1ms.

高电持平续时间 >1ms时  为位1高电平持续时间红外接收模块 P32-->J11 2,单片机-->动态数码管模块 J22-->J6 P22-->J9(A) P23-->J9(B) P24-->J9(C) */ #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; sbit IRIN=P3^2; u8 IrValue[6]; u8 Time; u8 DisplayData[8]; u8 code smgduan[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的显示码 /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函数名 :DigDisplay() * 函数功能 :数码管显示函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void DigDisplay() { u8 i; for(i=0;i0)) //等待前面9ms的低电平过去 { delay(1); err--; } if(IRIN==1) //如果正确等到9ms低电平 { err=500; while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去 { delay(1); err--; } for(k=0;k0)) //计算高电平的时间长度。 { delay(10); //0.1ms Time++; err--; if(Time>30) { return; } } IrValue[k]>>=1; //k表示第几组数据 if(Time>=8) //如果高电平出现大于565us,那么是1 { IrValue[k]|=0x80; } Time=0; //用完时间要重新赋值 } } } if(IrValue[2]!=~IrValue[3]) { return; } } }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有