STM32 实验21 红外遥控实验
红外遥控综合实验报告

红外遥控综合实验报告一、实验目的通过本次实验,掌握红外遥控的原理和基本应用,了解红外遥控器的工作原理,并通过实际操作掌握红外遥控的编程与控制方法。
二、实验器材- STM32F103RD开发板- 红外遥控接收器- 红外遥控发射器- 电脑三、实验原理红外遥控技术基于红外线的传输和接收。
红外遥控接收器和发射器分别位于遥控器和被控制设备之间,实现信号的传输和解码。
红外遥控器通过发送不同的红外信号来控制不同的设备。
当按下遥控器上的按钮时,红外遥控发射器会发出特定的红外信号。
被控制设备上的红外遥控接收器接收到红外信号后,通过解码判断接收到的信号是什么指令,然后执行相应的操作。
四、实验步骤1. 准备实验器材,将红外遥控接收器和发射器分别连接到开发板上。
2. 在电脑上下载并安装开发板的驱动程序和编程软件。
3. 编写程序,实现红外遥控的编码和传输功能。
使用开发板的GPIO口来控制红外发射器的工作,并通过编程设置红外遥控发射时的频率和协议。
4. 编写程序,实现红外遥控的译码和执行功能。
使用开发板的GPIO口来接收红外遥控接收器的信号,并通过解码判断接收到的信号是什么指令,然后执行相应的操作。
5. 将程序烧录到开发板上,将遥控器和被控制设备连接好。
6. 进行遥控测试,按下遥控器上的按钮,检查被控制设备是否执行了相应的操作。
五、实验结果经过实验,我们成功实现了红外遥控的功能。
按下遥控器上的按钮时,被控制设备能够准确执行相应的操作,例如打开或关闭灯光、调节电风扇的风速等。
六、实验总结本次红外遥控综合实验通过理论与实际操作相结合的方式,让我们更深入地了解了红外遥控的原理和应用。
通过编程与控制的实践,我们进一步加深了对红外遥控技术的理解,提高了程序设计和调试的能力。
红外遥控技术在日常生活中广泛应用于电视、空调、音响、智能家居等各种设备上。
掌握了红外遥控的编程和控制方法,对我们今后的学习和工作都将有很大的帮助。
通过本次实验,我们学会了团队合作和解决实际问题的能力。
红外对射传感器实训报告

一、实训目的本次实训旨在使学生了解红外对射传感器的工作原理、性能特点和应用领域,掌握红外对射传感器的选型、安装、调试及故障排除方法。
通过实训,提高学生的动手能力和实际应用能力。
二、实训时间2023年11月15日三、实训地点学校电子实验室四、实训器材1. 红外对射传感器模块2. STM32开发板3. 5V电源4. 连接线5. 面包板6. 测试电路五、实训内容1. 红外对射传感器工作原理及性能特点2. 红外对射传感器选型及应用3. 红外对射传感器安装与调试4. 红外对射传感器故障排除六、实训过程1. 红外对射传感器工作原理及性能特点红外对射传感器是一种利用红外线进行检测的传感器,主要由发射器、接收器和信号处理电路组成。
当发射器发射的红外线被物体阻挡时,接收器接收到的信号强度会发生变化,从而判断物体是否存在。
红外对射传感器的性能特点如下:(1)响应速度快:红外对射传感器具有较快的响应速度,适用于实时检测。
(2)抗干扰能力强:红外对射传感器对环境光线、温度等因素影响较小,具有较强的抗干扰能力。
(3)安装方便:红外对射传感器安装简单,适用于各种场合。
2. 红外对射传感器选型及应用根据实训要求,我们选择了以下红外对射传感器:(1)型号:HSR-412(2)工作电压:5V(3)输出方式:开关量输出红外对射传感器广泛应用于以下领域:(1)自动门控制系统(2)机器人避障(3)生产线自动检测(4)安全防护3. 红外对射传感器安装与调试(1)将红外对射传感器模块的VCC和GND分别连接到5V电源的正负极。
(2)将红外对射传感器模块的DO输出端连接到STM32开发板的GPIO口。
(3)编写程序,实现红外对射传感器的检测功能。
(4)通过OLED显示屏显示检测到的物体信息。
4. 红外对射传感器故障排除在实训过程中,我们遇到了以下故障:(1)传感器输出信号不稳定:检查连接线和电源,确保连接正确且电源稳定。
(2)传感器检测距离过近:调整红外对射传感器的安装位置,使其与检测物体的距离适中。
STM32单片机红外遥控

STM32单片机红外遥控红外遥控接口电路STM32单片机红外遥控程序源代码#include "sys.h"#define LED_RED PBout(12) //红色发光二极管控制管脚初始化PB12 #define LED_GREEN PBout(13) //绿色发光二极管控制管脚初始化PB13 #define LED_YELLOW PBout(14) //黄色发光二极管控制管脚初始化PB14 #define LED_BLUE PBout(15) //蓝色发光二极管控制管脚初始化PB15 #define BEEP PBout(5) //蜂鸣器端口定义PB5#define RDATA PAin(1) //红外数据输入脚//红外遥控识别码(ID),每款遥控器的该值基本都不一样,但也有一样的//我们选用的遥控器识别码为0#define REMOTE_ID 0static u8 fac_us=0; //us延时倍乘数static u16 fac_ms=0; //ms延时倍乘数void delay_init(u8 SYSCLK);void delay_ms(u16 nms);void delay_us(u32 nus);void Led_Init(void); //发光二极管控制管脚初始化void Red_Led_Light(void); //点亮红色发光二极管void Green_Led_Light(void); //点亮绿色发光二极管void Yellow_Led_Light(void); //点亮黄色发光二极管void Blue_Led_Light(void); //点亮蓝色发光二极管void Red_Led_Goout(void); //熄灭红色发光二极管void Green_Led_Goout(void); //熄灭绿色发光二极管void Yellow_Led_Goout(void); //熄灭黄色发光二极管void Blue_Led_Goout(void); //熄灭蓝色发光二极管void Beep_Init(void);void Beep_Tweet(void);void Beep_Silent(void);extern u8 Remote_Cnt; //按键次数,此次按下键的次数extern u8 Remote_Rdy; //红外接收到数据extern u32 Remote_Odr; //命令暂存处u32 Remote_Odr=0; //命令暂存处u8 Remote_Cnt=0; //按键次数,此次按下键的次数u8 Remote_Rdy=0; //红外接收到数据void Remote_Init(void); //红外传感器接收头引脚初始化u8 Remote_Process(void); //红外接收到数据处理u8 Pulse_Width_Check(void); //检查脉宽extern u8 USART_RX_BUF[64]; //接收缓冲,最大63个字节.末字节为换行符extern u8 USART_RX_STA; //接收状态标记//如果想串口中断接收,请不要注释以下宏定义//#define EN_USART1_RX //使能串口1接收void uart_init(u32 pclk2,u32 bound);/*************************************************************开发板上电后,用红外遥控器对着开发板上的红外接收头。
stm32 实验报告

stm32 实验报告STM32 实验报告一、引言STM32是一款由STMicroelectronics公司推出的32位单片机系列,具有高性能、低功耗和丰富的外设资源等特点。
本篇实验报告将介绍我在学习和实践STM32过程中的一些经验和成果。
二、实验目的本次实验的目的是通过使用STM32单片机,实现一个简单的温度监测系统。
通过该实验,我希望能够熟悉STM32的开发环境,掌握基本的硬件连接和编程方法,并能够成功运行一个简单的应用程序。
三、实验步骤1. 硬件连接:将STM32单片机与温度传感器、LCD显示屏等硬件设备连接起来。
确保连接正确,避免短路或接触不良的情况。
2. 开发环境搭建:下载并安装STM32CubeIDE,配置开发环境。
这是一个集成开发环境,支持STM32系列的开发和调试。
3. 编写代码:使用C语言编写一个简单的程序,实现温度传感器数据的读取和显示。
在编写代码过程中,需要熟悉STM32的寄存器和外设配置,以及相关的函数库。
4. 编译和烧录:将编写好的代码进行编译,生成可执行文件。
然后使用JTAG或SWD接口将可执行文件烧录到STM32单片机中。
5. 测试和调试:将STM32单片机连接到电源,观察LCD显示屏上是否正确显示当前的温度数值。
如果有错误或异常情况,需要进行调试和排查。
四、实验结果经过以上的实验步骤,我成功地实现了一个简单的温度监测系统。
在LCD显示屏上,我可以清晰地看到当前的温度数值,并且该数值能够实时更新。
通过与实际温度计的对比,我发现该系统的测量结果相当准确。
五、实验总结通过这次实验,我对STM32单片机的开发和应用有了更深入的了解。
我学会了如何搭建开发环境、编写代码、编译和烧录程序,并且成功实现了一个简单的应用。
在实验过程中,我也遇到了一些问题,但通过查阅资料和与同学的交流,我能够及时解决这些问题。
在今后的学习和实践中,我将进一步探索STM32单片机的功能和应用领域。
我希望能够深入研究更复杂的项目,并挖掘出更多的潜力。
基于stm32的红外遥控风扇设计毕业论文

毕业论文基于Android的红外智能风扇设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
基于STM32控制的万能学习型红外遥控器

设计一个万能学习型遥控器,其具体设计指标要求如下:
①用红外发射管作为系统的红外发射模块。
②用按键来切换学习型红外遥控的学习模式与非学习模式。当用户操作进入非学习模式下是,通过按下发射信号的按钮来控制红外编码信号的发射。
③当用户按下学习键,系统处于学习模式,此时将被学习的红外遥控器对准红外接收头,按下被学习遥控器的按键发射红外信号,系统完成红外编码的捕捉和记录。
④当学习型遥控器处于学习模式时,再按学习键退出学习模式,进入非学习模式状态。
⑤在非学习模式下按下红外发射键,还原红外编码并发送红外信号,实现控制其红外遥控的智能家电。
⑥在此硬件设计时,要尽力做到硬件模块简单方便、性能稳定且易于实现,促使整个系统电路简化。
⑦软件设计流程清晰,且软件程序思维清晰,要做到以最为简单的程序实现系统所需功能。
人们常常会浪费过多时间来寻找控制各种各样家用智能电器遥控器。为了解决人们同时使用众多遥控器的烦恼,于是越来越多的自学习型遥控器也就诞生了。不过现在市场上的红外遥控器,基于成本的考量,绝大部分都是采用455KHz的陶振[2]来驱动,选择以12分频系数,其载波频率约为38KHz,此设计方法也使学习型遥控器的设计变得更加简单。但是现在市面上许多常见的遥控器大多都只能控制几种产品,并不是真正实现“万能”红外遥控器[3]功能。
1.4.3方案的比较和选择
方案一,以单片机(AT89C51)为主控搭建硬件平台系统,所需外围芯片和元器件较为繁多,成本较高。实现所需功能的原理和方法也较为复杂,需有单片机产生38KHz的载波信号,使得单片机的负荷繁重,同时单片机的主板低,捕捉红外信号时由于单片机主频低,误差较大。该方案成本高,编程算法和电路搭建较为复杂,可靠性和后期的扩展性低,所以方案一不适合该设计。方案二,采用ARM架构ARM Cortex-M3的STM32系列的芯片STM32F103C8为该系统的主控,主控内部集成了丰富的资源,且功能强大,搭建后可用ARM内核芯片推出的仿真器J-Link进行在线联调,使得编程更为方便,大大降低了系统软件编程的难度,而且具有成本低、可扩展性强、功耗低、高性能[7]等特点。显而易见选用方案二对系统的后期扩展较为有益,故本设计选用方案二作为系统的设计方案。
STM32F0开发板实验-红外线发射

19.2 数据格式
具体参考《18. VS838 红外线接收》。
BSP_Configuration();//调用硬件初始化函数 NVIC_Configuration();//调用中断优先级初始化函数 Company_Information(); while(1) {
IR_Send_Data(); //红外发送数据 delay_ms(1000); //延时 1 秒 } } void Company_Information(void) { printf("*********【众拳-独角兽 STM32F072VB 开发板】**************\r\n"); printf(" 论坛网址: \r\n"); printf(" 淘宝网店: \r\n"); printf(" 关注微信公众平台微信号【zxkj-ly】\r\n"); printf(" STM32F0 开发板技术交流 QQ 群【373645551】\r\n"); printf(" 哈尔滨卓恩科技开发有限公司\r\n"); printf("*******************************************************\r\n"); } void BSP_Configuration(void)//硬件初始化函数 { RCC_Configuration();//调用时钟初始化函数 LED_GPIO(); RS232_GPIO();//调用 232 控制管脚初始化函数 RS232_Configuration();//调用 232 通讯格式初始化函数 TIM3_PWM_IR_GPIO();//调用 TIM3 定时器 PWM 波形控制管脚初始化函数 TIM3_PWM_IR_Config();//调用 TIM3 定时器 PWM 波形通讯格式初始化函数 } void RCC_Configuration(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//设置 A 端口时钟使能 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);//设置 C 端口时钟使能 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOE, ENABLE);//设置 E 端口时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//设置 TIM3 时钟复用使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//设置串口 1 复用使能 }
基于STM32的智能家居红外控制系统研究与设计

基于STM32的智能家居红外控制系统研究与设计基于STM32的智能家居红外控制系统研究与设计智能家居系统已经成为人们生活中不可或缺的一部分。
随着科技的发展,越来越多的设备和家居设施可以通过智能控制实现自动化操作,为人们的生活带来更多的便利和舒适。
红外控制技术作为智能家居的一个重要组成部分,在家电遥控、安防监控、照明控制等方面有着广泛的应用。
本文将重点介绍一种采用STM32微控制器的智能家居红外控制系统的研究与设计。
该系统以红外控制为基础,通过智能算法和网络通信实现对家居设备的远程控制和监控。
首先,我们介绍STM32微控制器。
STM32是意法半导体公司推出的一系列基于ARM Cortex-M内核的微控制器产品,具有性能高、功耗低、易于开发等特点。
它具备丰富的外设资源和强大的处理能力,非常适合用于智能家居系统的设计。
基于STM32的智能家居红外控制系统主要包括硬件设计和软件设计两部分。
在硬件设计方面,系统通过红外收发模块实现与家电设备的红外通信。
同时,通过传感器模块采集环境数据,如温度、湿度、光照等信息,以实现对室内环境的感知和控制。
此外,为了实现远程控制和监控,系统还需要集成网络通信模块,如Wi-Fi或以太网模块,用于与用户手机或电脑进行数据交互。
在软件设计方面,系统主要包括红外通信协议解析、数据处理和网络通信等功能。
首先,红外通信协议解析模块负责解析红外遥控信号,将其转换为控制指令。
然后,数据处理模块根据用户的控制指令对家居设备进行相应操作。
最后,网络通信模块将室内环境数据和设备状态等信息发送到用户的手机或电脑上,实现远程监控和控制。
智能算法是该系统的关键技术之一。
通过分析室内环境数据和用户的使用习惯,系统可以学习并优化设备的控制策略,提高用户体验和设备能效。
比如,根据室内温度和湿度的变化,系统可以自动调整空调的运行模式,实现温湿度的舒适控制。
另外,系统也可以根据用户的作息时间和习惯,自动调节灯光亮度和色温,提供个性化的照明服务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//初始化红外接收引脚的设置
//开启中断,并映射
void Remote_Init(void)
{
RCC->APB2ENR|=1<<2;
//PA 时钟使能
GPIOA->CRL&=0XFFFFFF0F;
GPIOA->CRL|=0X00000080; //PA1 输入
GPIOA->ODR|=1<<1;
//PA.1 上拉
接着是发送 4 个 8 位二进制码,第一二个是遥控识别码(REMOTE_ID),第一个为
正码(0),第二个为反码(255),接着两个数据是键值,第一个为正码
第二个为反码.发送完后 40ms,遥控再发送一个 9ms 低,2ms 高的脉冲,
表示按键的次数,出现一次则证明只按下了一次,如果出现多次,则可
以认为是持续按下该键.
POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(60,50,"Mini STM32"); LCD_ShowString(60,70,"REMOTE TEST"); LCD_ShowString(60,90,"ATOM@ALIENTEK"); LCD_ShowString(60,110,"2010/6/17");
321
3.21.2 硬件设计
本实验采用中断解码(也可以采用输入捕获解码),本节实验功能简介:开机在 LCD 上显示 一些信息之后,即进入等待红外触发,如过接收到正确的红外信号,则解码,并在 LCD 上显示 键值和所代表的意义,以及按键次数等信息。同样我们也是用 LED0 来指示程序正在运行。
所要用到的硬件资源如下: 1)STM32F103RBT6。 2)DS0(外部 LED0)。 3)TFTLCD 液晶模块。 4)红外接收头。 5)红外遥控器。 前面三部分,在之前的实例已经介绍过了,遥控器属于外部器件,遥控接收头在板子上, 与MCU的连接原理图如下:
{
res=Pulse_Width_Check();//获得此次高脉冲宽度
if(res==250)break;//非有用信号
if(res>=200&&res<250)OK=1; //获得前导位(4.5ms)
else if(res>=85&&res<200) //按键次数加一(2ms)
{
Remote_Rdy=1;//接受到数据
{
u8 t=0;
while(RDATA)
{
t++;delay_us(20);
if(t==250)return t; //超时溢出
}
return t;
}
//处理红外接收
/*-------------------------协议--------------------------
323
开始拉低 9ms,接着是一个 4.5ms 的高脉冲,通知器件开始传送数据了
LCD_ShowString(30,130, "KEYVAL:"); LCD_ShowString(130,130,"KEYCNT:"); LCD_ShowString(30,150, "SYMBOL:"); while(1) {
if(Remote_Rdy) {
key=Remote_Process(); LCD_ShowNum(86,130,key,3,16);//显示键值 LCD_ShowNum(186,130,Remote_Cnt,3,16);//显示按键次数 switch(key) {
Remote_Cnt++;//按键次数增加
break;
}
else if(res>=50&&res<85)RODATA=1;//1.5ms
else if(res>=10&&res<50)RODATA=0;//500us
(OK)
{
Remote_Odr<<=1;
Remote_Odr+=RODATA;
Remote_Cnt=0; //按键次数清零
#include "remote.h"
#include "delay.h"
//Mini STM32 开发板
//红外遥控接收 驱动函数
//正点原子@ALIENTEK
//2010/6/17
u32 Remote_Odr=0; //命令暂存处
u8 Remote_Cnt=0; //按键次数,此次按下键的次数
u8 Remote_Rdy=0; //红外接收到数据
Ex_NVIC_Config(GPIO_A,1,FTIR);//将 line1 映射到 PA.1,下降沿触发.
MY_NVIC_Init(2,1,EXTI1_IRQChannel,2);
}
//检测脉冲宽度
//最长脉宽为 5ms
//返回值:x,代表脉宽为 x*20us(x=1~250);
u8 Pulse_Width_Check(void)
图 3.21.2.2 红外遥控器
322
3.21.3 软件设计
打开上一节的工程,首先在 HARDWARE 文件夹下新建一个 REMOTE 的文件夹。然后新
建一个 remote.c 和 remote.h 的文件保存在 REMOTE 文件夹下,并将这个文件夹加入头文件包
含路径。
打开 remote.c 文件,输入如下代码:
图 3.21.2.1 红外遥控接收头与 STM32 的连接电路图 红外遥控接收头与 STM32 的 PA1 通过跳线帽连接,这个在硬件上要连接上,否则 PA1 将 得不到信号,我们采用中断解码,PA1 对应的中断为中断 1,所以在程序设计的时候,我们只 要开启中断 1,然后在中断里执行解码就可以了。 开发板配套的红外遥控器外观如下:
}
}
}
EXTI->PR=1<<1;
//清除中断标志位
}
//处理红外键盘
//返回相应的键值
u8 Remote_Process(void)
{
u8 t1,t2;
324
t1=Remote_Odr>>24; //红外解码 t2=(Remote_Odr>>16)&0xff; Remote_Rdy=0;//清除标记 if(t1==(u8)~t2&&t1==REMOTE_ID)//检验遥控识别码(ID) {
u8 key; u8 t; Stm32_Clock_Init(9);//系统时钟设置 delay_init(72); //延时初始化 uart_init(72,9600); //串口 1 初始化
325
LCD_Init(); LED_Init(); Remote_Init();
//初始化液晶 //LED 初始化 //初始化红外接收
extern u8 Remote_Cnt; //按键次数,此次按下键的次数 extern u8 Remote_Rdy; //红外接收到数据 extern u32 Remote_Odr; //命令暂存处 void Remote_Init(void); //红外传感器接收头引脚初始化 u8 Remote_Process(void); //红外接收到数据处理 u8 Pulse_Width_Check(void);//检查脉宽 #endif 这里的 REMOTE_ID 就是我们开发板配套的遥控器的识别码,对于其他遥控器可能不一样, 只要修改这个为你所使用的遥控器的一致就可以了。其他是一些函数的声明,我们保存此部分 代码,然后在 test.c 里面修改主函数如下: int main(void) {
3.21 红外遥控实验
ALIENTKE MiniSTM3 开发板给使用者配备了标准的红外接收头和一个很小巧的红外遥控 器。本节将向大家介绍,如何在 ALIENTEK MiniSTM32 开发板上实现红外遥控器的控制。本 节分为如下几个部分:
3.21.1 红外遥控简介 3.21.2 硬件设计 3.21.3 软件设计 3.21.4 下载与测试
t1=Remote_Odr>>8; t2=Remote_Odr; if(t1==(u8)~t2)return t1; //处理键值 } return 0; } 该部分代码比较简单,主要是通过中断解码,解码程序是按照前面介绍的 NEC 码来解的, 在这里我们就不再多说了。保存 remote.c,然后把该文件加入 HARDWARE 组下。接下来打开 remote.h 在该文件里面加入如下代码: #ifndef __RED_H #define __RED_H #include "sys.h" //Mini STM32 开发板 //红外遥控接收 驱动函数 //正点原子@ALIENTEK //2010/6/17 #define RDATA PAin(1) //红外数据输入脚 //红外遥控识别码(ID),每款遥控器的该值基本都不一样,但也有一样的. //我们选用的遥控器识别码为 0 #define REMOTE_ID 0
图 3.21.1.1 按键 2 所对应的红外波形 从图中可以看到,其地址码为 0,控制码为 168。可以看到在 100ms 之后,我们还受到了 几个脉冲,这是 NEC 码规定的连发码(由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高 电平组成),如果在一帧数据发送完毕之后,按键仍然没有放开,则发射重复码,即连发码,可 以通过统计连发码的次数来标记按键按下的长短/次数。
红外遥控的编码目前广泛使用的是:NEC Protocol 的 PWM(脉冲宽度调制)和 Philips RC-5 Protocol 的 PPM(脉冲位置调制)。我们配套的遥控器使用的是 NEC 协议,其特征如 下: 1、8 位地址和 8 位指令长度; 2、地址和命令 2 次传输(确保可靠性) 3、PWM 脉冲位置调制,以发射红外载波的占空比代表“0”和“1”; 4、载波频率为 38Khz; 5、位时间为 1.125ms 或 2.25ms; NEC 码的位定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us 脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。而遥控 接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到 的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高。 NEC 遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。同步码 由一个 9ms 的低电平和一个 4.5ms 的高电平组成,地址码、地址反码、控制码、控制反码均是 8 位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(可 用于校验)。 我们遥控器的按键 2 按下时,从红外接收头端收到的波形如下: