红外NEC协议详细描述
时间: 2023-10-02 07:14:07 浏览: 382
红外NEC(Nippon Electric Company)协议是一种常用的红外遥控协议,用于控制各种消费电子设备,例如电视、音响、空调等。该协议定义了红外信号的时间序列和编码方式。
NEC协议的红外信号由一组脉冲信号组成,每个脉冲的持续时间和频率是固定的。以下是NEC协议的详细描述:
1. 起始位(Leader Code):高电平信号,持续时间为9毫秒(ms),表示传输开始。
2. 起始位间隔(Leader Code Gap):低电平信号,持续时间为4.5毫秒,表示起始位结束。
3. 数据位(Custom Code & Data Code):每个数据位由一个高电平信号和一个低电平信号组成。高电平信号的持续时间为560微秒(μs)表示0,持续时间为1690微秒表示1。
4. 数据间隔(Data Gap):低电平信号,持续时间
相关问题
NEC红外编码协议详细资料
NEC(日本电气公司)红外编码协议是一种常见的红外遥控编码协议,广泛应用于各种消费电子产品,例如电视机、DVD播放器、机顶盒等。以下是NEC红外编码协议的详细资料:
1. 编码格式:
NEC红外编码协议的编码格式非常简单,由32位二进制编码组成,其中包括以下三个部分:
- leader code(引导码):由16位连续的逻辑1组成,以一个逻辑0结束,其持续时间为9ms。
- custom code(自定义码):由8位二进制编码组成,用于区分不同厂商的遥控器。
- data code(数据码):由8位二进制编码组成,表示具体的遥控指令。
2. 时间序列:
NEC红外编码协议中,每个二进制位的持续时间相同,为1.125ms,而逻辑0的持续时间为2.25ms。因此,整个32位编码的持续时间为2.25×32+9=75.69ms。
3. 解码方式:
NEC红外编码协议的解码方式非常简单,通常采用红外接收器进行解码。接收到红外信号后,先判断引导码是否正确,然后解码自定义码和数据码。如果自定义码和数据码都正确,则表示接收成功,可以执行相应的遥控指令。
以上是NEC红外编码协议的详细资料,希望对你有所帮助。
51单片机发送nec协议红外编码
在51单片机中,可以通过使用定时器和外部中断来实现NEC红外编码的发送。以下是一个简单的示例代码,你可以根据自己的需求进行修改:
```c
#include <reg51.h>
#define FREQ_OSC 12000000UL // 晶振频率
#define T_US (1.0 / FREQ_OSC * 12) // 1个机器周期所用的时间(us)
#define IR_PORT P2 // 红外发射器连接的端口
#define IR_PIN 0 // 红外发射器连接的引脚
#define IR_OUT 0 // 红外发射器输出高电平的时间(单位:us)
#define IR_HEADER_MARK 9000 // NEC协议头部的引导码的高电平时间(us)
#define IR_HEADER_SPACE 4500 // NEC协议头部的引导码的低电平时间(us)
#define IR_BIT_MARK 560 // NEC协议数据位的高电平时间(us)
#define IR_ONE_SPACE 1690 // NEC协议数据位为1的低电平时间(us)
#define IR_ZERO_SPACE 560 // NEC协议数据位为0的低电平时间(us)
#define IR_END_MARK 560 // NEC协议结束码的高电平时间(us)
unsigned char ir_data[] = {0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF};
void delay_us(unsigned int t)
{
while (t--) {
_nop_();
_nop_();
}
}
void ir_send_bit(unsigned char bit)
{
if (bit) {
IR_PORT |= (1 << IR_PIN);
delay_us(IR_OUT);
IR_PORT &= ~(1 << IR_PIN);
delay_us(IR_ONE_SPACE - IR_OUT);
} else {
IR_PORT |= (1 << IR_PIN);
delay_us(IR_OUT);
IR_PORT &= ~(1 << IR_PIN);
delay_us(IR_ZERO_SPACE - IR_OUT);
}
}
void ir_send(unsigned char *data, unsigned char len)
{
unsigned char i, j;
// 发送头部的引导码
IR_PORT &= ~(1 << IR_PIN);
delay_us(IR_HEADER_SPACE);
IR_PORT |= (1 << IR_PIN);
delay_us(IR_HEADER_MARK - IR_OUT);
IR_PORT &= ~(1 << IR_PIN);
delay_us(IR_HEADER_SPACE);
// 发送数据位
for (i = 0; i < len; i++) {
for (j = 0; j < 8; j++) {
ir_send_bit((data[i] >> j) & 0x01);
}
}
// 发送结束码
IR_PORT &= ~(1 << IR_PIN);
delay_us(IR_END_MARK);
}
void main()
{
while (1) {
ir_send(ir_data, sizeof(ir_data) / sizeof(unsigned char));
delay_ms(1000); // 发送间隔1秒钟
}
}
```
在上述代码中,我们定义了红外发射器连接的端口和引脚,并且定义了NEC协议的编码格式。然后使用`ir_send()`函数来发送红外编码,该函数会将数据位和结束码按照NEC协议的格式发送出去。
你可以将`ir_data`数组替换为你要发送的数据,然后将代码烧录进51单片机中即可。注意在使用前需要根据实际情况进行修改端口和引脚号。