89C51单片机之红外通信 ----自学笔记

发布者:gamma14最新更新时间:2021-11-01 来源: eefocus关键字:89C51  单片机  红外通信 手机看文章 扫描二维码
随时随地手机看文章

一、概述

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


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

高电平持续时间<1ms时    为位0


七、硬件设计

该电路是集成的,红外接收头的输出管脚接至单片机 P32 管脚上,为了保证红外接收头输出管脚默认为高电平,需外接一个上拉电阻,同 样的与单片机 IO 口连接就相当于外接了 10K 上拉电阻。 由于该模块电路是集成的,所以红外接收头的输出管脚与单片机 P32 管脚连接使用即可。

八、软件设计

 

/*

       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;i<3;i++)

{

switch(i) //位选,选择点亮的数码管,

{

case(0):

LSA=1;LSB=1;LSC=1; break;//显示第0位

case(1):

LSA=0;LSB=1;LSC=1; break;//显示第1位

case(2):

LSA=1;LSB=0;LSC=1; break;//显示第2位 

}

P0=DisplayData[i];//发送数据

delay(100); //间隔一段时间扫描

P0=0x00;//消隐

}

}

 

 

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

* 函数名         : IrInit()

* 函数功能    : 初始化红外线接收

* 输入           : 无

* 输出          : 无

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

 

void IrInit()

{

IT0=1;//下降沿触发

EX0=1;//打开中断0允许

EA=1; //打开总中断

 

IRIN=1;//初始化端口

}

 

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

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出    : 无

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

void main()

{

IrInit();

while(1)

{

DisplayData[0] = smgduan[IrValue[2]/16];

DisplayData[1] = smgduan[IrValue[2]%16];

DisplayData[2] = smgduan[16];

    DigDisplay();

}

}

 

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

* 函数名         : ReadIr()

* 函数功能    : 读取红外数值的中断函数

* 输入           : 无

* 输出          : 无

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

 

void ReadIr() interrupt 0

{

u8 j,k;

u16 err;

Time=0;  

delay(700); //7ms

if(IRIN==0) //确认是否真的接收到正确的信号

{  

err=1000; //1000*10us=10ms,超过说明接收到错误的信号

/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时

侯,程序死在这里*/

while((IRIN==0)&&(err>0)) //等待前面9ms的低电平过去 

{

delay(1);

err--;

if(IRIN==1) //如果正确等到9ms低电平

{

err=500;

while((IRIN==1)&&(err>0)) //等待4.5ms的起始高电平过去

{

delay(1);

err--;

}

for(k=0;k<4;k++) //共有4组数据

{

for(j=0;j<8;j++) //接收一组数据

{

 

err=60;

while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去

{

delay(1);

err--;

}

err=500;

while((IRIN==1)&&(err>0)) //计算高电平的时间长度。

{

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;

}

}

}

关键字:89C51  单片机  红外通信 引用地址:89C51单片机之红外通信 ----自学笔记

上一篇:关于51单片机数码管消影
下一篇:STC89C52概念 ----- 自学笔记

推荐阅读最新更新时间:2024-11-12 16:15

C语言和汇编语言在开发单片机时各有哪些优缺点?
汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。 C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高。 对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆
[单片机]
意法半导体STM32F4高性能微控制器新增基本型产品线
国,2016年10月09日 横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)的高性能STM32F4微控制器(MCU)系列产品新增入门级产品,推出存储容量更大、功能更多的新产品,以及首个工作温度高达125 C的STM32F4微控制器。同时,新升级的快速入门套件有助于开发人员挖掘新功能。 新的STM32F412和高温STM32F410 微控制器在经济实惠的基本型产品线内给设计人员带来更多选择,集成84MHz(STM32F401产品线)和100MHz (STM32F410/F411/F412产品线) ARM Cortex -M4处理器内核、1
[嵌入式]
意法半导体STM32F4高性能<font color='red'>微控制器</font>新增基本型产品线
PIC18f4520单片机驱动H1632的C语言程序
#include p18f4520.h #include delays.h //#pragma config OSC = HS //配置内部振荡器Fosc/4 RA7,IO口RA7 //#pragma config PWRT =OFF //#pragma config BOREN = OFF //#pragma config WDT = OFF //#pragma config MCLRE = ON //#pragma config PBADEN = OFF //#pragma config LVP = OFF #define CLK PORTCbits.RC3 #define DAT PORTCbits.RC5 #define
[单片机]
干货 | 用GD32替换STM32,这些细节你一定要知道!
GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出来的。所以GD32和STM32有很多地方都是一样的。 不过GD32毕竟是不同的产品,不可能所有东西都沿用STM32,有些自主开发的东西还是有区别的。 相同的地方我们就不说了,下面列一下不同的地方。 01 内核 GD32采用二代的M3内核,STM32主要采用一代M3内核,下图是ARM公司的M3内核勘误表,GD使用的内核只有752419这一个BUG。 02 主频 使用HSE(高速外部时钟):GD32的主频最大108M,STM32的主频最大72M 使用HSI(高速内部时钟):GD32的主频最大10
[单片机]
基于单片机的汽车酒驾监测系统设计
本文以模块化的设计思路,其核心电路为单片机最小系统,感应电路为红外传感应电路,控制电路采用继电器,检测电路为酒精浓度检测模块,无线通讯模块则采用wifi模块。 当红外传感器检测到驾驶室驾驶员进入,系统开始进入工作状态,此时,驾驶员想要发动汽车,须向传感器呼出气体,当检测到驾驶员呼出气体酒精浓度超标后,由继电器控制车内点火部分电路断开,此时汽车无法发动,并在显示电路中显示驾驶员酒精含量,由模块传入服务器端,作为一次记录。 若驾驶者想要发动汽车,须等待酒精传感器恢复时间过后,再次向其提供气体样本,直至检测结果显示酒精含量合格后,方可发动汽车。 一、酒精浓度检测电路设计 酒精传感器的基本原理可简述为将探测到的酒精浓度转
[单片机]
基于<font color='red'>单片机</font>的汽车酒驾监测系统设计
基于MSP430单片机驱动NRF24L01无线模块发送C语言程序
MCU:MSP430F16X系列,RF无线模块:NRF24L01,液晶显示:ST7920串行控制128*64液晶,发送数据是把4X4矩阵键盘对应的键值发送出去。IRQ是采用中断查询法,具体的可以参考下面代码: //p4口为液晶屏 //p1口中断 //nRF24L01无线通信 //p5.0 csn //p5.1 mosi //p5.3 sck //p5.2 miso //p1.2 irq //p5.7 ce //ST7920串行控制128*64液晶 //rst p4.3 复位 //rs p4.0 片选 //rw p4.1 数据 //E p4.2 时钟 #include msp430x16x.h #include s
[单片机]
MCU是怎样输出PWM波形的
在电力电子控制中,PWM几乎是无处不在的,不论是AC/DC,DC/AC,还是DC/DC,都涉及到PWM,PWM具体是什么可以自行百度,网上资料非常多,这里就不再赘述。在电力电子变换里面,PWM波形生成有两种方式,模拟和数字,专用的模拟IC不在此文探讨范围之内,本文主要介绍怎样用MCU来生成PWM。 在所有的MCU里,都会有Timer定时器,PWM就是通过这个外设生成的,基本的原理可以通过下图(以STM32F407的寄存器为例)来解释。 计数器TIM_CNT对输入时钟进行计数,比如输入时钟是1MHz(50%占空比方波),对时钟的每一个上升沿(或者下降沿)从数字0开始计数,计数到TIM_ARR=999,一共计数1000个,经历的时
[单片机]
<font color='red'>MCU</font>是怎样输出PWM波形的
【GD32 MCU 入门教程】二、GD32 MCU 烧录说明 (2)SWD/JTAG在线下载
GD32系列MCU支持SWD和JTAG(部分型号不支持)接口进行下载调试,这些功能通过ARM CoreSight组件的标准配置和链状连接的TAP控制器来实现的。调试和跟踪功能集成在ARM Cortex-M内核中。调试系统支持串行(SW)调试和跟踪功能,部分型号也支持JTAG调试。调试和跟踪功能具体请参考下列文档: Cortex-M4技术参考手册; ARM调试接口V5结构规范。 目前GD32 MCU主要支持的调试下载设备有:J-linkV8/V9、U-link、标准的CMSIS-DAP调试工具如GD-link。SWD/JTAG的优势在于及下载和调试功能一体,可直接在集成开发环境IDE(如MDK、IAR)中进行下载和在线仿真。同时
[单片机]
【GD32 <font color='red'>MCU</font> 入门教程】二、GD32 <font color='red'>MCU</font> 烧录说明 (2)SWD/JTAG在线下载
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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