NEC红外(ir)解码协议

news/2024/11/8 12:05:12/

目录

    • 一、时序
    • 二、代码实现

一、时序

一个完整的NEC解码协议,由以下几个部分组成,其中数据位为低位先行
在这里插入图片描述

详细的数据格式如下,其中如果一直按住一个按钮的时候,会隔110ms左右发一次引导码
在这里插入图片描述

二、代码实现

#include <string.h>
#include <stdio.h>static uint64_t time_100us = 0;
static bool ir_pin_status = false;
static EN_IR__NEC_STATE_T en_ir_state = EN_IR_NEC_STATE_IDLE;
static uint8_t ir_receive_data_count= 0;
static uint32_t ir_receive_data= 0;
static uint8_t ir_key_code= 0;static void device_ir_NEC_poll(TASK_PARAM)//定时器中断,100us触发一次,根据具体器件实现
{time_100us ++;if(time_100us >60000){time_100us = 0;}
}static void device_ir_external_irq_pressed(void)//外部中断,配置为ir接收引脚,上升沿和下降沿都触发
{ir_pin_status = platform_gpio_get_level(IR_PIN);//获取当前ir输入电平,高电平证明是上升沿触发,反之下降沿switch(en_ir_state ){case EN_IR_NEC_STATE_IDLE ://空闲状态if(ir_pin_status ==0){//下降沿触发en_ir_state = EN_IR_NEC_STATE_PREAMBLE_START_LOW;//状态改为等待9ms低电平引导码}break;case EN_IR_NEC_STATE_PREAMBLE_START_LOW://9ms低电平引导判断if((ir_pin_status ==1)&&(time_100us >=70)&&(time_100us <=110)){//满足9ms电平引导时序en_ir_state = EN_IR_NEC_STATE_PREAMBLE_START_HIGH;//状态改为等待高电平引导码}else{en_ir_state = EN_IR_NEC_STATE_IDLE;//校验失败,返回空闲状态}break;case EN_IR_NEC_STATE_PREAMBLE_START_HIGH://4.5ms高电平引导或repeatif(ir_pin_status ==0){//下降沿触发if((time_100us >=35)&&(time_100us <=60)){//4.5ms高电平引导en_ir_state = EN_IR_NEC_STATE_RECEIVE_DECODE;//状态改为接收数据ir_receive_data_count= 0;//清空接收计次ir_receive_data= 0;//清空接收数据} else if ((time_100us >=15)&&(time_100us <35)){//2.25ms高电平repeaten_ir_state = EN_IR_NEC_STATE_RECEIVE_REPEAT;//状态改为repeat}else{en_ir_state = EN_IR_NEC_STATE_IDLE;//校验失败,返回空闲状态}}else{en_ir_state = EN_IR_NEC_STATE_IDLE;//校验失败,返回空闲状态}break;case EN_IR_NEC_STATE_RECEIVE_DECODE://接收数据if(ir_pin_status == 0){//下降沿触发(即只判断高电平持续时间)if((time_100us <=8)&&(time_100us >=3)){//满足(1.12-0.56ms)存入低电平ir_receive_data >>= 1;}else if((time_100us >=12)&&(time_100us <=20)){//满足(2.25-0.56ms)存入高电平ir_receive_data = ((ir_receive_data >> 1) | 0x80000000);}else{//校验失败en_ir_state = EN_IR_NEC_STATE_IDLE;}if(++ir_receive_data_count >= 32){//接收到4个字节(两个头码和两个数据),后停止接收device_ir_NEC_decode(ir_receive_data);//数据解码en_ir_state = EN_IR_NEC_STATE_IDLE;//回到空闲状态}}break;case EN_IR_NEC_STATE_RECEIVE_REPEAT://自由选择是否继续报上一个键值break;}time_100us = 0;//每次判断完数据,需要把计数清空
}static bool device_ir_NEC_decode(uint32_t code)
{uint8_t head_code_low  = code &0x000000FF; //取出低8位数据uint8_t head_code_high = (code &0x0000FF00) >> 8; //取出低8-16位数据uint8_t key_code       = (code &0x00FF0000) >> 16; //取出低16-24位数据uint8_t key_code_minus = (code &0xFF000000) >> 24;  //取出低24-32位数据if((head_code_low ==IR_NEC_HEAD_CODE_LOW) && \   //判断是否是头码低位(head_code_high ==IR_NEC_HEAD_CODE_HIGH) && \ //判断是否是头码高位(key_code ==((~key_code_minus )&0xFF))){ //判断key_code_minus 是否是key的反码ir_key_code = key_code;//获取键值return true;}ir_key_code = 0return false;
}bool device_ir_NEC_get_key(uint8_t *p_key)//用于给其他应用模块取得键值
{if(!ir_key_code){*p_key = ir_key_code;ir_key_code =0;//获取过键值后,清空键值return true;}return false;
}

http://www.ppmy.cn/news/468876.html

相关文章

nec编码红外遥控原理整理

遥控 &#xff1a;NEC 编码 960nm的波长 晶振为455KHZ&#xff0c;对应的发射频率(载波频率)为38KHZ&#xff0c; 遥控ID为0(即系统识别码)&#xff0c;反码为255&#xff0c;不同的遥控ID有可能不一样。 接收头&#xff1a;1838 遥控码由三部分组成 1、引导码 9ms的高电平 4…

基础——NEC红外遥控器协议

遥控器的编码格式常见有两种&#xff0c;一种是NEC 格式&#xff0c;一种是RC5 格式。遥控器发出的信号&#xff0c;通过一个红外的接收头之后&#xff0c;信号被送到MCU 的一个中断引脚。通过MCU 来识别不同的时序&#xff0c;来实现遥控器按键信号的解码。 1、NEC协议的特征…

NEC红外遥控协议理解与实现

NEC红外遥控协议理解与实现 在上个链接里转载了NEC标准的远程控制协议&#xff0c;家电的遥控器基本遵守这个标准。 红外发射管有2个管脚&#xff0c;发送的是经过38KHz时钟调制过的信号。例如下图使用PWM产生一个等占空时钟信号用于调制。 接收管收下来的信号已经经过了解调…

红外遥控器快速编码解码(NEC)

红外遥控器快速编码解码 NEC编解码模块 红外遥控简介NEC编码红外编解码模块接线说明串口查看数据数据验证总结 原文链接&#xff1a;https://www.yourcee.com/newsinfo/2923957.html 红外遥控简介 红外遥控由发射部分和接收部分两部分组成&#xff0c;发射部分通过控制控制红…

NEC协议——红外遥控的使用

NEC协议是众多红外遥控协议的其中一种&#xff0c;下面以蓝桥杯的单片机开发板实现红外解码。 相关芯片与元器件介绍 此图为跳线帽的解法&#xff0c;在做红外通信时应接3,5&#xff1b;4,6。 此图左为红外发射装置和HX1838集成芯片&#xff0c;放大与接受于一体&#xff0c;…

NEC红外遥控解码

单片机AVR atmel16,将事件和键值通过串口发送出去,注意熔丝位配置时钟。 #include <iom16v.h> #include <macros.h>#define KEY_CUSTOM_CODE 0x22f5 /* 遥控器用户识别码 */ #define KEY_PRESS_EVENT 0x1 /* PRESS按键事件 */ #define KEY_REPEAT_EVEN…

NEC900C服务器系统,nec gdc学习nec900c结构图2018 3 3 nec900c放映机安装.pdf

目录 ▐ 安装前须知 ▐ 如何选择合适的放映机 ▐ 拆箱前检查及准备 ▐ NC900C的安装 ▐ NC900C的维护使用 Page 2 © NEC Corpo at o 2010 NEC Confidential 安装前须知 Page 3 © NEC Corporation 2010 EC Confidential 1 安装前须知 放映机安装前须知 1. 在操作之前应…

NEC协议红外解码

载波Carrier 占空比1/3 频率38kHz(由445kHz产生37.91kHz) Lead code Custom code Custom code Data code Data code Stop Bit 引导码 用户码 用户码 数据码 数据反码 停止位 Lead code引导码 : 载波9ms 没有…