红外线遥控器内部有发射不同对应红外线信号的芯片,而其接收端则是一个光感二极管,该二极管可根据遥控器发射的红外线信号进行相应的电压改变,但是是反相的

故我们只需要在单片机中配置好外部触发中断,然后将二极管连接上相应的中断管脚即可实现引脚电平触发中断

数据格式:

遥控器发出的信号包括三部分:

  1. Leader Code
  2. 系统识别码(共16bits,包括8bits,和反相的8bits)
  3. 操作码(共16bits,包括8bits,和反相的8bits)

接收头接收到的电平也是如此格式,只不过是反相的,其具体电平为:

__________________               _______   _   _   _   _   _   _   _   _   ____   ____   ____   ____   ____   ____   ____   ____                                 ___________________________________               _______   ___________________________________________________________|_____________|       |_| |_| |_| |_| |_| |_| |_| |_| |_|    |_|    |_|    |_|    |_|    |_|    |_|    |_|    |x x x x x x x x|x x x x x x x x|                                   |_____________|       |_|                                                                    |<-    9ms  ->|<4.5ms>||----leader code------|-----custom code 8bit----------|-----------------custom code' 8bit---------------------| key data 8bit |key data'8bit  |<---------------40ms---------------><----9ms-----><2.1ms>--|--------------- 此时的高电平超过40ms,然后出现9ms的低电平,2.1ms的高电平 连发码----------------

0和1均以0.56ms的低电平开始(实际测量是500us的样子),不同的是后面出现的高电平,
如果高电平是0.56ms(实际测量是500us的样子),则表示0,如果高电平是1.68ms(0.56*3=1.68)则表示1

0.56ms:|_|_   _   _
0:     |_| |_| |_   ____   ____
1:     |_|    |_|    |_

写代码的时候只需要检测高电平的时间即可。

信号处理

配置外部中断、引脚使能等代码未贴出

遥控器上每个按键所发出的操作码都是不同的,我们便可根据接收到的操作码执行相应的程序。

注意:最好将系统时钟设置为最高等级。

/* We should ensure the piority of Systick is more than other interrupt */
NVIC_SetPriority(SysTick_IRQn, 0);
void EXTI3_IRQHandler(void)
{u8 Current_Bit = 0, Leader_code_flag = 0;u32 Pulse_Time = 0;Frame_Data = 0;if(EXTI_GetITStatus(REMOTE_EXTI_LINE)){while(1){if(Get_BitData() == 1){/* Compute the high volt time, to judge what kinds */Pulse_Time = Get_HighVolt_Time();/* If the time more than 5ms, we can judge it's out of time */if(Pulse_Time >= 500){break;}/* If the time is between 4ms to 5ms, we can judge it's the leader code */else if((Pulse_Time>=400) && (Pulse_Time<500)) /* 4ms-5ms: The leader code */{/* Set the leader code flag */Leader_code_flag = 1;}/* If the time is between 0.2ms to 1ms, we can judge it's the 0 data bit */else if((Pulse_Time>=20) && (Pulse_Time<100)) /* 0.52ms(0.2ms-1ms): 0 bit */{Current_Bit = 0;}/* If the time is between 1ms to 2ms, we can judge it's the 1 data bit */else if((Pulse_Time>=100) && (Pulse_Time<200)) /* 1.69ms(1ms-2ms): 1 bit */{Current_Bit = 1;}/* If the time is between 2ms to 4ms, we can judge it's the invalid data */else if((Pulse_Time>=200) && (Pulse_Time<400)) /* invalid(2ms-4ms) */{break;}LED1_ON;if (Leader_code_flag == 1) {Frame_Data <<= 1;Frame_Data |= Current_Bit;}}}/* Indicating we transmit 1 frame of data */Frame_Flag = 1;EXTI_ClearITPendingBit(REMOTE_EXTI_LINE);LED1_OFF;Delay(8000); /* 80ms */}
}

红外线遥控器原理及编程相关推荐

  1. 红外线遥控器解码原理

    红外线遥控是目前使用最广泛的一种通信和遥控手段.由于红外线遥控装置具有体积小.功耗低.功能强.成本低等特点,因而,继彩电.录像机之后,在录音机.音响设备.空凋机以及玩具等其它小型电器装置上也纷纷采用红 ...

  2. STM32入门开发: 制作红外线遥控器(智能居家-万能遥控器)

    一.环境介绍 MCU: STM32F103ZET6 编程软件环境: keil5 红外线传输协议:  NEC协议---38KHZ载波:.NEC协议是红外遥控协议中常见的一种. 编码发送思路:  延时函数 ...

  3. TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书

    作者:蒋子阳 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-01-01 TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书 ISBN:97875170682 ...

  4. 郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.1 线性系统的预测...

    7.1.1 回归与现代预测 7.1.2 最小二乘法 7.1.3 代码实现 (1)导入数据 def loadDataSet(self,filename): #加载数据集X = [];Y = []fr = ...

  5. trident原理及编程指南

    trident原理及编程指南 @(STORM)[storm, 大数据] trident原理及编程指南 一理论介绍 一trident是什么 二trident处理单位 三事务类型 1spout类型 2st ...

  6. 郑捷《机器学习算法原理与编程实践》学习笔记(第四章 推荐系统原理)(三)SVD...

    4.5.1 SVD算法回顾 A = U∑VT 其中:A是N*M的矩阵,U是M*M的方阵(里面向量正交,称为左奇异向量),∑是一个M*N的矩阵,VT是一个N*N的矩阵(里面向量正交,右奇异向量) 那么奇 ...

  7. Contiki源码+原理+功能+编程+移植+驱动+网络(转)

    源:Contiki源码+原理+功能+编程+移植+驱动+网络 请链接:http://www.rimelink.com/nd.jsp? id=31&_np=105_315 假设您对于用Contik ...

  8. EZ-USB FX2单片机原理、编程及应用 读书笔记

    EZ-USB FX2 单片机原理.编程及应用 PDF图书下载 第1章. 简介 1.5 Tokens and PIDs 四种handshake包: ■ ACK (Acknowledge) means ' ...

  9. 步进电机工作原理与编程

    步进电机工作原理与编程 本章将介绍在嵌入式平台UP-NETARM2410-S中步进电机的实现.步进电机在各个领域诸如机器人.智能控制.工业控制等方面都有着广泛的应用空间,本章着重介绍步进电机的工作原理 ...

最新文章

  1. 初中计算机指导教师意见,初中信息技术教学计划(推荐3篇)
  2. Play框架拾遗之五:其他知识点
  3. linux Vi搜索和替换字符串
  4. python怎么让游戏倒计时_Python如何让倒计时效果的在固定区域刷新
  5. MySQL安装教程图解
  6. 消息中间件(Kafka/RabbitMQ)收录集
  7. Android Studio 突然出现很多红色波浪线或红色感叹号解决方案
  8. PAT真题乙类1006 换个格式输出整数
  9. 李飞飞:在物体识别之后,计算机视觉还要多久才能理解这个世界?
  10. mysql memory优点_MySQL Memory存储引擎:优势及性能测试
  11. 3-4笔刷的详细设定
  12. c++ List、Vector、Stack、Queue使用
  13. EDA技术实用教程 | 复习十一 | 状态机的特点和分类
  14. 欺骗的艺术——你被社工了吗?
  15. 移动IPv6光猫登录的一般ip地址账号与密码,移动光猫变桥接模式
  16. 鸿蒙能用谷歌地图,华为鸿蒙更进一步,牵手世界级应用,谷歌GMS或彻底再见
  17. 买房税费大攻略!哪些费用必须交?
  18. 如何同步修改git项目名称和本地项目名称
  19. 黑莓java文件怎么安装程序_黑莓开发环境搭建windows7+eclipse+BlackBerry Java Plug+JDK6...
  20. 我的PPT可以“吐泡泡”!你的可以吗?1分钟教会你怎么做

热门文章

  1. 超嗜热酶综述翻译,《Hyperthermophilic Enzymes: Sources, Uses, and Molecular Mechanisms for Thermostability》
  2. Core Data入门
  3. 关于H.264 x264 h264 AVC1之间的那些事
  4. DeFi 需要什么才能成为主流?
  5. 折腾了半天,发现在lightswitch下有个解决FTP等功能的好方法。
  6. OOA、OOD、OOP详解
  7. 研扬携手Intel®积极拓展人工智能解决方案
  8. 【Unity之c#专题篇】—核心章题单实践
  9. [原创]FineUI秘密花园(一) — 为什么选择FineUI?
  10. ros电脑摄像头标定,并用rviz查看