红外遥控发射的码值与实际测得的码值不相同
红外遥控器是SAA3010的rc5飞利浦的发的码值是110 00000 六位二进制码是键值码范围1-63
或是一位翻转111 00000六位二进制码是键值码范围1-63
红外发射是有红外发射接收到低电平无发射接收到高
其中的二进制1发送时是889US低889US高
其中的二进制0发送时是889US高889US低
例如我发6位码值是1fH或19H转成二进制是0001 1111或0001 1001
红外发射的码值是110 00000 011111或110 00000 011001若有翻转为码值是
111 00000 011111或111 00000 011001
我接收的是10 00000 存在table[0]里后6位我存在table[1]里
接收显示出来的总是7f 01就是不发射有时也经常显示这2个值
转成二进制码就该是0111 1111 0000 0001
存在table[0]中的是111 1111 存在table[1] 中的是00 0001
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit d33=P3^3;//红外电路放整流等处理后的红外信号输入端低电平为接收到有红外
sbit moto=P1^2;//振动
sbit led=P1^3;
uchar dd;
uchar shi,ge;
uchar shu=0;
uchar table1[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uchar table[]={0,0};
void delays()//1.3s
{
uint c;
for(c=0;c<32800;c++);
}
void aa()
{
shi=table[0]/16;
ge=table[0]%16;
P2=table1[shi];
P0=table1[ge];
delays();
shi=table[1]/16;
ge=table[1]%16;
P2=table1[shi];
P0=table1[ge];
delays();
P2=0xff;
P0=0xff;
shi=0;
ge=0;
table[0]=0;
table[1]=0;
EX1=1;
}
void main()
{
led=0;
delays();
moto=0;
led=1;
delays();
moto=1;
led=0;
EA=1;
IT1=1;
TMOD=0x10;
ET1=1;
EX1=1;
while(1);
}
void time1() interrupt 3
{
TH1=(65536-1638)/256;//1.778ms
TL1=(65536-1638)%256;
shu++;
if(shu<13)
{
if(shu<7)//这里取的是码值中10 00000这部分
{
dd=dd<<1;
dd=dd|d33;
if(shu==6)
{table[0]=dd;}
}
else//这里取的是后6位的码值
{
dd=0;
dd=dd<<1;
dd=dd|d33;
if(shu==12)
{table[1]=dd;
shu=0;
TR1=0;
aa();}
}
}
}
void int1() interrupt 2
{
TH1=(65536-1228)/256;//机器周期0.9216 1个数周期1.085069
TL1=(65536-1228)%256;//延时1.3335ms
EX1=0;
TR1=1;
}