红外遥控电源开关一条是火线电源进线,一条是通往灯泡的火线,在送上电的情况下,你可以先测一下两根线,有电的那根就是火线进线,没电的那根就是火线出线,接到开关的火线进火线出就可以了正常情况下开关是没有零线的,都是火线,零线一般用蓝色线,最好喊电工帮你安装,避免发生触电事故。
按键的键码二进制是0x0C。反码就是0xF3,最后跟了一个560us载波停止位。红外遥控由发射部分和接收部分两部分组成,发射部分通过控制控制红外发光管发射出经过调制好的红外线来传递需要发送的信息,接收部分电路由红外接收管等其他红外接收器件接收发射管发射的红外光传递信号给放大器以及其他解码设备来还原红外发射的信息。NEC编码就是红外的一种调制方式,对发射的红外进行特定的编码来发送需要发送的信息,接收端针对发射端的编码进行解码从而达到还原信息。
发射和接收是红外遥控系统的两大组成部分,由应用编/解码集成电路芯片来进行控制。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。NEC协议的编码调制的过程实际是经过了两次的调制,先是将原始码流进行脉宽调制,脉宽调制后其引导码、逻辑值分别表示为“引导码”由9ms高电平和45ms低电平组合表示,“逻辑1”由560µs高电平和168ms低电平组合表示,“逻辑0”由560µs高电平和560µs低电平的组合表示;然后再经过第二轮的载波调制(载波频率38 kHz)以提高发射效率,可以使用逻辑分析仪的单线解码插件。
单片机采用外部中断P33管脚和红外接收头的信号线相连,中断方式为边沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二进制的“1”、“0”码。并将8位 *** 作码提取出来在数码管上显示。
// 解码值在Im[2]中,当IrOK=1时解码有效。
/ 51单片机红外遥控解码程序 /
//用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码
#include <reg52h>
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar f;
#define Imax 14000 //此处为晶振为110592时的取值,
#define Imin 8000 //如用其它频率的晶振时,
#define Inum1 1450 //要改变相应的取值。
#define Inum2 700
#define Inum3 3000
unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
dula=0;
P0=table[show[0]];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[show[1]];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
} //外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
Tc=TH0256+TL0; //提取中断时间间隔时长
TH0=0;
TL0=0; //定时中断重新置零
if((Tc>Imin)&&(Tc<Imax))
{
m=0;
f=1;
return;
} //找到启始码
if(f==1)
{
if(Tc>Inum1&&Tc<Inum3)
{
Im[m/8]=Im[m/8]>>1|0x80; m++;
}
if(Tc>Inum2&&Tc<Inum1)
{
Im[m/8]=Im[m/8]>>1; m++; //取码
}
if(m==32)
{
m=0;
f=0;
if(Im[2]==~Im[3])
{
IrOK=1;
}
else IrOK=0; //取码完成后判断读码是否正确
}
//准备读下一码
}
}
/演示主程序/
void main(void)
{
unsigned int a;
m=0;
f=0;
EA=1;
IT1=1;EX1=1;
TMOD=0x11;
TH0=0;TL0=0;
TR0=1;//ET0=1;
while(1)
{
if(IrOK==1)
{
show[1]=Im[2] & 0x0F; //取键码的低四位
show[0]=Im[2] >> 4;
IrOK=0;
}
for(a=100;a>0;a--)
{
display();
}
}
}
解码程序这个就能实现
红外协议之NEC协议
NEC协议载波:38khz
其逻辑1与逻辑0的表示如图所示:
逻辑1为225ms,脉冲时间560us;逻辑0为112ms,脉冲时间560us。所以我们根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4。
NEC协议格式:
首次发送的是9ms的高电平脉冲,其后是45ms的低电平,接下来就是8bit的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错)。然后是8bit
的命令码(也是从低有效位开始发),而后也是8bit 的命令码的反码。
以上是一个正常的序列,但可能存在一种情况:你一直按着1个键,这样的话发送的是以110ms为周期的重复码,如下图:
就是说,发了一次命令码之后,不会再发送命令码,而是每隔110ms时间,发送一段重复码。
重复码由9ms高电平和225ms的低电平以及560us的高电平组成。
需要注意的是:1838红外一体接收头为了提高接受灵敏度。输入高电平,其输出的是相反的低电平。
NEC解码出来还是有点细微差错。查了很久,也没有收获。心里有点小郁闷。今早起来,仔细地看了看他人的参考代码。突然被下面一个小小的细节折服了。
请注意这段代码:
1 void hal_NEC_decode(uchar addr,uchar addrt,uchar comm,uchar commt)
2 {
3 uchar i,j,k;
4 uchar tmp1=0;
5
6 while(NECFinshFlag==0);
7 NECFinshFlag=0;
8
9 for(i=0,k=1;i<4;i=i+1)
10 {
11 for(j=1;j<=8;j++)
12 {
13 if(NECTimerTable[k++] > 7)
14 {
15 tmp1 |=0x80;
16 }
17 tmp1 >>=1;
18 }
19 switch(i)
20 {
21 case 0:addr=tmp1;break;
22 case 1:addrt=tmp1;break;
23 case 2:comm=tmp1;break;
24 case 3:commt=tmp1;break;
25 }
26 tmp1=0;
27 }
28 }
以上就是关于nec红外遥控怎么接线全部的内容,包括:nec红外遥控怎么接线、nec红外遥控器按键对应的二进制码、使用逻辑分析仪分析红外NEC信号时要注意什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)