单片机实验(十四)红外遥控

本文详细解析了80S52单片机红外遥控模块的工作原理及信号时序,介绍了DT9122D遥控器的信号读取方法,包括引导码、用户码、键位码的识别,以及如何通过位信号判别实现0、1的读取。同时提供了具体的代码实现。

80S52:红外遥控模块

功能:显示遥控按键对应用户码毫无作用

红外遥控是类似于之前的串口通信但没有波特率的说法,主要就是按照红外遥控器发出信号的时序进行分析。

如我实验使用的DT9122D遥控器可从说明书中查得其信号时序(如下图)
信号时序图
图中的引导码前9ms为高电平后4.5ms为低电平表示红外信号的开始,是用于过滤噪声的。后面的用户码和键位码组成的32位信号才是表征键位的,键数据反码主要起到验证信号真伪的作用。

而用户编码的组成方式很有意思,图上读入的低(高)八位的用户编码的1、2、3、4…位 是真正的低(高)用户编码的8、7、6、5…位,键位码也一样。

注意:信号读入后经过接收器处理,高低电平会倒置(如下图)在这里插入图片描述

其次,信号读入的关键在0、1的判别。0、1在红外遥控信号中用一组高低电平表示,其区别在于“接收解码”中高电平的持续时间(即宽度),在DT9122D遥控器上0持续0.56ms,1持续1.69ms,思路是每次接收完位信号前半段的低电平,并接收的高点平后延时tms(0.56ms<t<1.69ms),之后若信号仍为高电平则该位为1反之为0。

下面是具体代码实现。

准备工作

数码管显示模块我抄我自己

#define date P0//用于数码管显示
#define place P2//用于数码管显示
typedef unsigned int u16;
typedef unsigned char u8;
sbit IRIN=P3^2;//红外信号i/o,利用了外部中断
u8 code number[]={
   
   0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};
//数码管显示字库
u8 code where[]={
   
   0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值