51红外对管记编码管代码
时间: 2023-11-12 17:15:23 浏览: 153
这个问题涉及到红外编码的知识,我可以简单介绍一下。
在红外遥控中,通常采用红外编码的方式来传输数据。编码分为两种:一种是MSB编码,另一种是LSB编码。
MSB编码(Most Significant Bit)是指最高位优先编码,也就是说数据位的最高位先被传输,最低位最后被传输。在MSB编码中,通常采用NEC编码协议。
LSB编码(Least Significant Bit)是指最低位优先编码,也就是说数据位的最低位先被传输,最高位最后被传输。在LSB编码中,通常采用RC5、RC6编码协议。
以下是一个简单的51单片机红外编码程序,用于编码NEC协议的红外遥控信号:
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit IR = P3 ^ 2; //红外发射管引脚
void send_code(uchar dat) //发送红外编码
{
uchar i;
for (i = 0; i < 8; i++)
{
IR = 0; //红外发射管发射脉冲
if (dat & 0x01)
delay_us(1300); //发送1的脉冲
else
delay_us(500); //发送0的脉冲
IR = 1; //停止发射
delay_us(550); //延时
dat >>= 1; //移位
}
}
void main()
{
uchar code[] = {0x00, 0xFF, 0x00, 0x00}; //红外编码数据
uchar i;
while (1)
{
for (i = 0; i < 4; i++) //发送数据
send_code(code[i]);
delay_ms(500); //延时
}
}
void delay_us(uint us) //us级延时函数
{
uint i, j;
for (i = us; i > 0; i--)
for (j = 12; j > 0; j--)
;
}
void delay_ms(uint ms) //ms级延时函数
{
uint i, j;
for (i = ms; i > 0; i--)
for (j = 121; j > 0; j--)
;
}
```
注意:以上代码仅供参考,实际使用中需要根据具体的红外编码协议进行相应的修改。
阅读全文