一.红外通信基础

1.红外线原理

红外线是波长在760nm~1mm之间的非可见光。红外通信装置由红外发射管和红外接受管组成,红外发射管是能发射出红外线的发光二极管,发射强度随着电流的增大而增大;红外接受管是一个具有红外光敏感特征的PN节的光敏二极管,只对红外线有反应,产生光电流。

2.信号调制原理

  • 基带信号:从信号源发出没有经过调制的原始信号,特点是频率较低,信号频率从0开始,频谱较宽。
  • 调制:就是用待传送信号去控制某个高频信号的幅度、相位、频率等参量变化的过程,即用一个信号去装载另一个信号。

红外遥控器使用38KB的载波对原始信号进行解调,原理如下

调制后产生一定频段的高低电平,但红外接收头接受到的信号和调制后的信号电平相反。

3.NEC协议

红外遥控由多种协议控制,这里介绍最主要,应用最广的NEC协议。NEC数据格式:引导码、用户码、用户码(或者用户码反码)、按键键码和键码反码,最后一个停止位。

  • 引导码:9ms的载波+4.5ms的空闲。
  • 比特值“0”:560us的载波+560us的空闲。
  • 比特值“1”:560us的载波+1.68ms的空闲。

    协议规定低位首先发送。一串信息首先发送9ms的AGC(自动增益控制)的高脉冲,接着发送4.5ms的起始低电平,接下来是发送四个字节的地址码和命令码。如果你一直按那个按键,一串信息也只能发送一次,一直按着,发送的则是以110ms为周期的重复码。

二.实验例程

1.实验原理

产生下降沿,进入外部中断0的中断函数,延时一下之后检IO口是否还是低电平,是就等待9ms的低电平过去。等待完9ms低电平过去,再去等待4.5ms的高电平过去。接着开始接收传送的4组数据先等待560us的低电平过去检测高电平的持续时间,如果超过1.12ms那么是高电平(高电平的的持续时间为1.69ms,低电平的持续时间为565us。)检测接收到的数据和数据的反码进行比较,是否等到的数据是一样的。

2.实验说明

本实验通过单片机控制红外接受设备接受红外发送设备发送的信号,并通过数码管的显示判断是否接受到信号。实验接线为JP10接J12,J6的A,B,C分别接P2.2,P2.3,P2.4。

3.源代码

/**************************************> File Name: 红外通信原理> Author: pengshp> Mail: pengshp3@outlook.com> Date: 2015年 7 月 27 日
***************************************/
#include<reg51.h>
#define GPIO_DIG P0sbit LSA  = P2^2;
sbit LSB  = P2^3;
sbit LSC  = P2^4;
sbit IRIN = P3^2;                           //红外接收器位声明unsigned char code DIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char DisplayData[8];               //用来存放要显示的8位数的值
unsigned char IrValue[6];                   //用来存放读取到的红外值
unsigned char Time;void DigDisplay();                          //动态显示函数
void IrInit();
void DelayMs(unsigned int);void main()
{IrInit();while(1){IrValue[4]=IrValue[2]>>4;           //高位IrValue[5]=IrValue[2]&0x0f;         //低位DisplayData[0] = 0x00;DisplayData[1] = DIG_CODE[IrValue[4]];DisplayData[2] = DIG_CODE[IrValue[5]];DisplayData[3] = 0x76;    DisplayData[4] = 0x00;DisplayData[5] = DIG_CODE[IrValue[4]];DisplayData[6] = DIG_CODE[IrValue[5]];DisplayData[7] = 0x76;DigDisplay();   }
}void DelayMs(unsigned int x)                 //0.14ms误差 0us
{unsigned char i;while(x--){for (i = 0; i<13; i++);}
}void IrInit()
{IT0=1;                                   //下降沿触发EX0=1;                                   //打开中断0允许EA=1;                                    //打开总中断IRIN=1;                                  //初始化端口
}void ReadIr() interrupt 0
{unsigned char j,k;unsigned int err;Time=0;                  DelayMs(70);if(IRIN==0)                              //确认是否真的接收到正确的信号{    err=1000;                            //1000*10us=10ms,超过说明接收到错误的信号while((IRIN==0)&&(err>0))            //等待前面9ms的低电平过去        {           DelayMs(1);err--;} if(IRIN==1)                          //如果正确等到9ms低电平{err=500;while((IRIN==1)&&(err>0))        //等待4.5ms的起始高电平过去{DelayMs(1);err--;}for(k=0;k<4;k++)                 //共有4组数据{               for(j=0;j<8;j++)             //接收一组数据{err=60;     while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去{DelayMs(1);err--;}err=500;while((IRIN==1)&&(err>0))//计算高电平的时间长度。{DelayMs(1);          //0.14msTime++;err--;if(Time>30){EX0=1;return;}}IrValue[k]>>=1;          //k表示第几组数据if(Time>=8)              //如果高电平出现大于565us,那么是1{IrValue[k]|=0x80;}Time=0;                  //用完时间要重新赋值                            }}}if(IrValue[2]!=~IrValue[3])          //反码取反后与原码相同则说明信号接受正确{return;}}
}void DigDisplay()
{unsigned char i;unsigned int j;for(i=0;i<8;i++){switch(i)                           //位选,选择点亮的数码管{case(0):LSA=0;LSB=0;LSC=0; break;   //显示第0位case(1):LSA=1;LSB=0;LSC=0; break;   //显示第1位case(2):LSA=0;LSB=1;LSC=0; break;   //显示第2位case(3):LSA=1;LSB=1;LSC=0; break;   //显示第3位case(4):LSA=0;LSB=0;LSC=1; break;   //显示第4位case(5):LSA=1;LSB=0;LSC=1; break;   //显示第5位case(6):LSA=0;LSB=1;LSC=1; break;   //显示第6位case(7):LSA=1;LSB=1;LSC=1; break;   //显示第7位 }GPIO_DIG=DisplayData[i];            //发送段码j=10;                               //扫描间隔时间设定while(j--); GPIO_DIG=0x00;                      //消隐}
}

:红外遥控原理具体参考资料:传送门

51单片机学习笔记【九】——红外通信实验相关推荐

  1. 51单片机学习笔记-6串口通信

    6 串口通信 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓库 ...

  2. 51单片机学习笔记-15 红外遥控

    15 红外遥控 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓 ...

  3. 51单片机学习笔记(串口通信 LED点阵屏 DS1302)

    四.串口通信 1.基本概念 通信中最重要的两个方面: 信息表示和解析方法: 信息的传输方法. 通信双方事先需要约定好信息的表示方法和解析方法,做到一致,否则信息不能有效传递. 信号的传输方法是指经过编 ...

  4. 51单片机学习笔记_6 IO通信:电脑与单片机之间的通信

    通信 通信基础知识 单片机还可以通过IO口实现多种通信. 串行通信:一条数据线,一次发1bit,发很久. 并行通信:多条数据线,同时发送,发的速度快多了但是费用高.接收困难.抗干扰性差. 异步通信:发 ...

  5. 51单片机学习 串行口通信实验

    文章目录 一.实验目的 二.原理 三.实验内容 一.实验目的 掌握串行口工作方式的程序设计,掌握单片机通信程序设计方法. 二.原理 发送指令:MOV SBUF,A 接收指令:MOV A,SBUF 1. ...

  6. [51单片机学习笔记TWO]----蜂鸣器

    蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...

  7. 51单片机学习--定时器--中断--串口通信

    51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...

  8. 51单片机学习笔记1 简介及开发环境

    51单片机学习笔记1 简介及开发环境 一.51单片机 1. STC89C52单片机简介 2. 命名规则 3. 封装 (1)PDIP (2)LQFP (3)PLCC (4)PQFP 二.STC8051结 ...

  9. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

  10. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

最新文章

  1. NeHe OpenGL第三十九课:物理模拟
  2. 立刻停止使用AUFS,开启Overlay!
  3. python中常见的流程结构-【Python2】04、Python程序控制结构
  4. HlpViewer.exe 单独打开
  5. Problem F. Grab The Tree HDU - 6324(树形dp+博弈)
  6. [转载] Python中定义函数,循环语句,条件语句
  7. Hadoop只输出Key不输出Value的小技巧‏
  8. 项目接力:售前、售中、售后
  9. php网页设计课程设计dreamweaver8_Dreamweaver 8.0 多媒体网页制作教程
  10. IPFS - 可快速索引的版本化的点对点文件系统
  11. 下载NVIDIA官方驱动教程
  12. STM32F030软件SPI控制74HC165
  13. DI的概念和实现原理—Spring系列介绍
  14. .Header Manipulation漏洞
  15. 张萌韩墨羽——Ument_Share集成
  16. 【CS224n】(lecture7)机器翻译NMT,seq2seq和attention
  17. PMP项目管理认证费多少钱?证书到期了怎么办
  18. cytoscape使用教程
  19. 前端面试题个人汇总(精简知识要点 总结话术) / 前端小知识 保持学习 (年终奖年终奖 心心念念年终奖)
  20. Serif 和 Sans-serif 字体的区别

热门文章

  1. iOS定位获取城市名
  2. java jasperReports导出PDF字体加粗失效
  3. 百度飞桨—— 车牌识别学习与修改
  4. 混合效应模型和广义线性模型计算R方的函数sem.model.fits
  5. java读取tif文件_java读取TIF,TIFF文件方法
  6. 数组和集合之间的转化
  7. Ansys APDL的超声换能器的模态分析(更新中)
  8. linux(ubantu)系统如何安装vim编辑器以及如何使用vim
  9. 程序员自学编程的6种方法,高效学习
  10. python小学教材全解_小学教材全解五年级数学上人教版