我将电视遥控器的红外编码放到单片机stc89c52中,电视机没有反应,请帮忙查看一下代码中
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632404EV22ZS.png电视遥控器2号键发射后被红外一体化接收头接收到的32位38 c7 02 fd (原文件名:QQ截图电视遥控器发射.png)
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_632405X2BIL0.png
相应的通过单片机发射的38 c7 02 fd (原文件名:QQ截图单片机发射a.png)
贴上程序的编码过程
#include<reg52.h>
sbit OP=P3^3;
static unsigned int count,z;
static unsigned int endcount;
static unsigned char flag;
unsigned chariraddr1=0x38;
unsigned chariraddr2=0x02;
void delay(int j)
{
while(j--);
}
void int0() interrupt 1
{
TH0=0xe6;
TL0=0xe6;
count++;
if(flag==1)OP=~OP;
else OP=0;
}
void SendIRdata()
{
int i;
unsigned char irdata ;
endcount=242;//发送9ms的起始码
// endcount=223;
flag=1;
count=0;
do{}while(count<endcount);
endcount=122; //发送4.5ms的结果码
// endcount=117;
flag=0;
count=0;
do{}while(count<endcount);
irdata=iraddr1;//发送十六位地址的前八位
for(i=0;i<8;i++)
{
endcount=17;//先发送0.56ms的38KHZ红外波(即编码中0.56ms的低电平)
//endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
//if(irdata-(irdata/2)*2)//判断二进制数个位为1还是0
if(irdata%2==1)
{
endcount=38;//1为宽的高电平
//endcount=41;
}
else
{
endcount=17; //0为窄的高电平
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
irdata=~iraddr1;//发送十六位地址的后八位
for(i=0;i<8;i++)
{
endcount=17;
flag=1;
count=0;
do{}while(count<endcount);
//if(irdata-(irdata/2)*2)
if(irdata%2==1)
{
endcount=38;
}
else
{
endcount=17;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
irdata=iraddr2;//发送八位数据
for(i=0;i<8;i++)
{
endcount=13;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata%2==1)
{
endcount=42;
}
else
{
endcount=13;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
irdata=~iraddr2;//发送八位数据的反码
for(i=0;i<8;i++)
{
endcount=13;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata%2==1)
{
endcount=42;
}
else
{
endcount=13;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
endcount=13;
flag=1;
count=0;
do{}while(count<endcount);
endcount=1084;
flag=0;
count=0;
do{}while(count<endcount);
endcount=244;
flag=1;
count=0;
do{}while(count<endcount);
endcount=61;
flag=0;
count=0;
do{}while(count<endcount);
endcount=17;
flag=1;
count=0;
do{}while(count<endcount);
flag=0;
}
void main()
{
OP=0;
//TH0=0xe6;
//TL0=0xe6;
TH0=0xe6;
TL0=0xe6;
TMOD=0x02;
TR0=1;
ET0=1;
EA=1;
while(1)
{
P0=0x00;
SendIRdata();
for(z=0;z<5;z++)delay(30000);
}
}
页:
[1]