📄 红外编码.c
字号:
#include <AT89x51.H>
bit OP;
unsigned count;
unsigned endcount;
unsigned char flag;
char iraddr1;
char iraddr2;
void sendirdata(char p_irdata);
void delay(void);
main()
{int i;
count=0;
flag=0;
OP=0;
P3_7=1;
// EA=0;
TMOD=0X12;
// ET0=1;
TH0=0Xf3;
TL0=0Xf3;
// TR0=1;
// TR1=1;
TCON=0X50;
IE=0X9F;
iraddr1=3;
iraddr2=252;
for(i=0;i<3;i++)
{
delay();
sendirdata(12);
}
while(1);
}
/***********************************************************/
void timeint(void) interrupt 1
{
count++;
if(flag==1)
{
P3_7=~P3_7;
}
else{P3_7=1;}
}
/*********************************************************************/
void sendirdata (char p_irdata)
{
int i;
char irdata=p_irdata;
//发送9ms的起始码
TR0=0;
endcount=340;//340*13=00us
flag=1;
count=0;
TR0=1;
do{}while(count<endcount);
//发送4.5ms的结果码
endcount=165;//117
flag=0;
count=0;
do{}while(count<endcount);
//发送十六地址的前八位
irdata=iraddr1;
for(i=0;i<8;i++)
//先发送0.56ms的38kHz的红外波
{ endcount=20;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=70;//41
}
else
{endcount=20;//15
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
irdata=iraddr2;
for(i=0;i<8;i++)
{
endcount=20;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=70;//41
}
else
{
endcount=20;//15
}
flag=0;
count=0;
do{}while (count<endcount);
irdata=irdata>>1;
}
//发送八位数据
irdata=p_irdata;
for(i=0;i<8;i++)
{
endcount=20;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{endcount=70;//41
}
else
{endcount=20;//15
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
//发送八位数据的反码
irdata=~p_irdata;
for(i=0;i<8;i++)
{
endcount=20;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{endcount=70;//41
}
else
{endcount=20;//15
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
endcount=20;
flag=1;
count=0;
do{}while(count<endcount);
flag=0;
}
/*************************************************************/
void delay(void)
{
int i,j;
for(i=0;i<4;i++)
{
for(j=0;j<1;j++)
{}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -