51单片机—红外遥控

发布者:脑力舞者最新更新时间:2021-09-01 来源: eefocus关键字:51单片机  红外遥控 手机看文章 扫描二维码
随时随地手机看文章

- 什么是红外遥控

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

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

在这里插入图片描述

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


- 红外信号是怎么传输的

人的眼睛能看到的可见光按波长从长到短排列依次为:红、橙、黄、绿、青、蓝、紫。其中红光的波长范围为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单片机—串口通信

推荐阅读最新更新时间:2024-11-13 12:21

51单片机驱动ADC0808电路图C51及汇编程序
这两天刚刚完成了一个用C编写的程序,这是我第一个用C语言编写的程序,并且调试成功。 第一个C程序,值得纪念,也值得以后参考。 本程序的功能是: 1.ADC0808转换功能;    2.数据16进制显示; 3.串行通信数据。 C51程序:工程文件下载: http://www.51hei.com/f/0808_c.rar #include absacc.h # inc lude reg51.h #define uchar unsigned char #define uint unsigned int sbit START=P3^6; //启动转换 sbit OE=P3^
[单片机]
<font color='red'>51单片机</font>驱动ADC0808电路图C51及汇编程序
DHT11温湿度检测器 基于51单片机的proteus仿真
单片机源程序如下: #include reg52.h /////////////头文件 //////////////////////////////////////////////////////////////////////////// void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str); void ConfigTimer0(unsigned int ms); unsigned char IntToString(unsigned char *str, int dat); extern bit Start18B20(); ex
[单片机]
DHT11温湿度检测器 基于<font color='red'>51单片机</font>的proteus仿真
ADC0809做的51单片机8路电压采集
#include reg52.h float shuju; unsigned char sj; unsigned int gata; unsigned char gw,sw,bw; unsigned char kk,tdao; //4联共阳数码管,最高位显示通道号,其他三位为电压值 unsigned char code shuzi ={ 0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90}; unsigned char code duanxuan ={0x0f,
[单片机]
时钟芯片DS1302+AT89C2051的红外遥控LED电子钟电路设计与制作
自制LED电子钟在很多电子报刊杂志上都可以见到,但大多数在断电后都要重新设置时间等参数,给使用带来很多不便。也有用后备电池作为备用电源的,但往往体积较大。本文介绍的LED电子钟克服了以往的弊端,而且采用了家电通用的红外遥控器进行控制,方便使用。有一路闹铃输出,可以通过遥控器设置闹铃时间及允许与否。 一.工作原理 DS1302为达拉斯公司的一种实时时钟芯片,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32768 Hz 晶振 。 AT89C2051作为主控芯片,一是对接收到的红外遥控编码进行判断识别,并执行相应的处理;第二就是定期的读取时钟芯片DS1302中的时间并把小时和肥
[单片机]
时钟芯片DS1302+AT89C2051的<font color='red'>红外遥控</font>LED电子钟电路设计与制作
基于51单片机的六足仿生机器人
一、整体框架: (1)设计功能: ①能完成多方向行走以及其他的自定义的动作。(前进,后撤,左右转,避障); ②可自动避障; ③通过手机蓝牙下令他的下一步动作。 (2)功能框架: (3)使用器材: ①STC89C52单片机、74LS04(反相器); ②蓝牙串口通信模块; ③超声波测距模块; ④9G舵机18个; ⑤PVC线槽若干(模具); ⑥PCB转印板; ⑦螺丝螺母若干。 ⑦keil3软件 二、工作原理: (1)蓝牙串口通讯模块: 蓝牙串口通讯模块接收手机蓝牙软件发送字符串信号,单片机通过串口通讯协议处理蓝牙模块接收到的信息,再根据信息的内容来判断机器人将进行的下一步行动。 (2)超声波测距模块: 超声波模块向某一方向发射
[单片机]
基于<font color='red'>51单片机</font>的六足仿生机器人
51单片机简易温度采集与控制装置
MCU型号:IAP15F2K61S2 还好是1T的单片机,不知道换成普通的12T单片机会不会跪。。终于调统了,不过温度采集不太稳定,有1度的波动。 /*  **********************************************************************                      简易温度采集与控制装置  文件名:main.c  功能概述:      初始化数码管显示温度区间和当前温度,温度上限和温度下限默认为30度      和20度,用户可以通过矩阵键盘输入自己设定的温度区间,键盘提供set和clear      功能,首先按下set进入设置模式, 
[单片机]
8051单片机教程第十二课:逻辑运算类指令
单片机教程第十二课:逻辑运算类指令: 对累加器A的逻辑操作: CLRA;将A中的值清0,单周期单字节指令,与MOVA,#00H效果相同。 CPLA;将A中的值按位取反 RLA;将A中的值逻辑左移 RLCA;将A中的值加上进位位进行逻辑左移 RRA;将A中的值进行逻辑右移 RRCA;将A中的值加上进位位进行逻辑右移 SWAPA;将A中的值高、低4位交换。 例:(A)=73H,则执行CPLA,这样进行: 73H化为二进制为01110011, 逐位取反即为10001100,也就是8CH。 RLA是将(A)中的值的第7位送到第0位,第0位送1位,依次类推。 例:A中的值为68H,执
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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