使用LCD1602显示红外遥控器按键内容

本文将详细介绍如何利用LCD1602液晶显示器来展示红外遥控器所发送的按键内容,并深入解析红外NEC协议的编码机制。通过本项目的学习,读者不仅能够掌握基本的硬件连接与编程技能,还能对红外通信技术有一定的理解。
准备工作:
材料:
材料名称
数量
备注
C51开发板
1
LCD1602显示屏
1
红外遥控
1
1
红外遥控介绍





123
- 红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射的红外光转换为相应的电信号,再送后置放大器。
- 红外LED波长:940nm
- 通信方式:单工,异步
- 通信协议标准:NEC标准
2
原理介绍

首先是左边的发射电路,当IN给高电平时,电路不导通,红外LED不亮,接收头输出高电平。而当IN给低电平时,电路导通红外LED以38KHz频率闪烁发光,接收头输出低电平。中间那个也是类似的,只不过需要自己去模拟38KHZ的发射信号。
然后是接收电路,将数据传入红外接收器,经过滤波以及各种解码操作,他就会通过OUT口输出,我们对输出的信号进行分析就行。
- 空闲状态:红外LED不亮,接收头输出高电平
- 发送低电平:红外LED以38KHz频率闪烁发光,接收头输出低电平
- 发送高电频:红外LED不亮,接收头输出高电平
3
NEC编码

NEC协议采用脉冲间隔的方式编码每一位数据,用不同数据位的时间间隔来表示不同的逻辑位。NEC编码的载波频率为38KHz。
- 数据位的逻辑0/1
- 逻辑"0":560us的下电频+560us的上电频,总时长为1.12ms。
- 逻辑"1":560us的下电频+1690us上电频,总时长为2.25ms(为逻辑0的二倍)。
- 命令帧
- 格式为:start(起始位)+address(地址码)+~address(地址码反码)+command(命令码)+~command(命令码反码)
- 起始位:每个序列均以9ms的脉冲(称为AGC脉冲)(是逻辑数据位使用的脉冲562.5us的16倍)开始。 接下来是4.5毫秒的空闲:(可以理解这一过程是每一帧的起始标志)
- 地址码:遥控器的标识符,防止不同品牌
- 地址码和反码:数据验证,接受完32bit后,第二个字节取反和第一个字节进行比对
- 命令码:命令码代表键码
- 命令码反码:和第二位进行一样的数据验证处理
- 重复码
- 按住遥控器上的一个键,命令帧也只会发送一次。 只要按键保持按下状态,就会每110毫秒发送一次重复码。 该重复码的组成为 9ms的AGC脉冲 + 2.25ms的空闲间隔 + 560µs的脉冲。
4
遥控键码

每个按键对应的键码。
5
创建工程









1234567
- 双击运行keil5软件
- 在Keil5软件界面中,选择“Project”菜单下的“New uVision Project...”选项
- 在弹出的对话框中,浏览到您想要存放代码的目录。如果您还没有为此项目创建专门的文件夹,请在此时创建一个,命名为“红外遥控”。
- 在选定的文件夹内,输入项目名称,例如“Project”,然后点击“保存”。
- 在窗口中使用Search查找我们使用的型号(AT89c52)单片机
- 选定单片机型号后,会有提示是否加入启动文件,这暂时不需要,选择"否"即可。
- 在项目的左侧导航栏中,找到“Source Group 1”。这是默认的源文件组,您可以在其中添加自己的源文件。
- 右键点击“Source Group 1”,选择“Add New Item to Group 'Source Group 1'...”。
- 在弹出的对话框中,选择文件类型为“C File (.c)”,然后在文件名一栏输入“main”,点击“Add”按钮。这样就创建了一个名为
main.c
的C语言源文件,并将其添加到了项目中。
6
导入文件及配置





123
在创建完工程并添加了主程序文件之后,确实需要对项目进行一些额外的设置,以确保编译后的输出符合需求。以下是如何设置项目以生成HEX文件的具体步骤:
设置项目生成HEX文件
- 打开项目设置:
- 在Keil uVision5的主界面上方,找到并点击“Project”菜单。
- 从下拉菜单中选择“Options for Target 'Target 1'...”(假设您的目标是默认的“Target 1”)。如果您的目标名称不同,请选择相应的目标。
- 导航到Output选项卡:
- 在弹出的“Options for Target”对话框中,使用对话框头部标签页导航到“Output”选项卡。
- 勾选“Create HEX File”:
- 在“Output”选项卡中,找到“Create HEX File”复选框,并勾选它。这将确保在编译项目时生成HEX文件。
- 保存设置:
- 完成上述设置后,点击“OK”按钮保存设置并关闭对话框。
验证设置
为了确保设置正确,可以尝试编译项目:
- 编译项目:
- 点击工具栏上的“Build”按钮(通常是一个锤子图标),或者从“Project”菜单中选择“Build Target”。
- 检查输出:
- 如果编译成功,您可以在项目的输出目录中找到生成的HEX文件。默认情况下,HEX文件会保存在项目目录的“Debug”或“Release”子目录中。
添加外部文件
- 双击"Source Group1"目录
- 弹出"Add File to Group 'Source Group'",把附件部分文件下载复制到当前位置并点击add添加到当前分组
LCD1602.c
4.95KB
Timer0.h
203B
IR.h
701B
Timer0.c
938B
Delay.c
153B
Delay.h
85B
Int0.c
263B
LCD1602.h
655B
IR.c
3.58KB
Int0.h
75B
7
编写代码

#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "IR.h"
unsigned char Num;
unsigned char Address;
unsigned char Command;
void main()
{
LCD_Init();
LCD_ShowString(1,1,"ADDR CMD NUM");
LCD_ShowString(2,1,"00 00 000");
IR_Init();
while(1)
{
if(IR_GetDataFlag() || IR_GetRepeatFlag()) //如果收到数据帧或者收到连发帧
{
Address=IR_GetAddress(); //获取遥控器地址码
Command=IR_GetCommand(); //获取遥控器命令码
LCD_ShowHexNum(2,1,Address,2); //显示遥控器地址码
LCD_ShowHexNum(2,7,Command,2); //显示遥控器命令码
if(Command==IR_VOL_MINUS) //如果遥控器VOL-按键按下
{
Num--; //Num自减
}
if(Command==IR_VOL_ADD) //如果遥控器VOL+按键按下
{
Num++; //Num自增
}
LCD_ShowNum(2,12,Num,3); //显示Num
}
}
}








更多相关项目
猜你喜欢
评论/提问(已发布 0 条)

