51单片机红外通信控制LED为什么控制不了
时间:10-02
整理:3721RD
点击:
代码如下:#include "reg52.h" typedef unsigned int u16;
typedef unsigned char u8;
sbit led1=P2^0;
sbit led2=P2^1;
sbit IRIN=P3^2;
u8 IrValue[6];
u8 Time;
u8 DisplayData[8];
void delay(u16 i)
{
while(i--);
}
void control ()
{
if(IrValue[2] = 0x44)
led1 = 1;
else if (IrValue[2] = 0x46)
led1 =0;
}
void IrInit()
{
IT0=1;//???μ??′¥·¢
EX0=1;//′ò?a?D??0?êDí
EA=1; //′ò?a×ü?D??
IRIN=1;//3?ê??ˉ???ú
}
void main()
{
IrInit();
while(1)
{
control ();
}
}
void ReadIr() interrupt 0
{
u8 j,k;
u16 err;
Time=0;
delay(700); //7ms
if(IRIN==0) //è·è?ê?·???μ??óê?μ??yè·μ?D?o?
{
err=1000; //1000*10us=10ms,3?1y?μ?÷?óê?μ?′í?óμ?D?o?
/*μ±á???ì??t???a??ê??-?·£?è?1?óDò???ì??t?a?ùμ?ê±oòì?3??-?·£??aμ?3ìDò3?′íμ?ê±
o?£?3ìDò?à?ú?aà?*/
while((IRIN==0)&&(err>0)) //μè′y?°??9msμ?μíμ???1yè¥
{
delay(1);
err--;
}
if(IRIN==1) //è?1??yè·μèμ?9msμíμ???
{
err=500;
while((IRIN==1)&&(err>0)) //μè′y4.5msμ??eê???μ???1yè¥
{
delay(1);
err--;
}
for(k=0;k<4;k++) //12óD4×éêy?Y
{
for(j=0;j<8;j++) //?óê?ò?×éêy?Y
{
err=60;
while((IRIN==0)&&(err>0))//μè′yD?o??°??μ?560usμíμ???1yè¥
{
delay(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //??????μ???μ?ê±??3¤?è?£
{
delay(10); //0.1ms
Time++;
err--;
if(Time>30)
{
return;
}
}
IrValue[k]>>=1; //k±íê?μú??×éêy?Y
if(Time>=8) //è?1???μ???3???′óóú565us£????′ê?1
{
IrValue[k]|=0x80;
}
Time=0; //ó?íêê±??òa??D??3?μ
}
}
}
if(IrValue[2]!=~IrValue[3])
{
return;
}
}
}
按下遥控的键没有任何反应,
如果control改为如下所示
void control ()
{
led1=1;led2=1;
if(IrValue[2] = 0x44)
led1 = 0;
else if (IrValue[2] = 0x46)
led2 =0;
}
则LED1一开始就亮着而且按任何建LED1都会闪一下
是程序的问题吗?还是硬件的问题
typedef unsigned char u8;
sbit led1=P2^0;
sbit led2=P2^1;
sbit IRIN=P3^2;
u8 IrValue[6];
u8 Time;
u8 DisplayData[8];
void delay(u16 i)
{
while(i--);
}
void control ()
{
if(IrValue[2] = 0x44)
led1 = 1;
else if (IrValue[2] = 0x46)
led1 =0;
}
void IrInit()
{
IT0=1;//???μ??′¥·¢
EX0=1;//′ò?a?D??0?êDí
EA=1; //′ò?a×ü?D??
IRIN=1;//3?ê??ˉ???ú
}
void main()
{
IrInit();
while(1)
{
control ();
}
}
void ReadIr() interrupt 0
{
u8 j,k;
u16 err;
Time=0;
delay(700); //7ms
if(IRIN==0) //è·è?ê?·???μ??óê?μ??yè·μ?D?o?
{
err=1000; //1000*10us=10ms,3?1y?μ?÷?óê?μ?′í?óμ?D?o?
/*μ±á???ì??t???a??ê??-?·£?è?1?óDò???ì??t?a?ùμ?ê±oòì?3??-?·£??aμ?3ìDò3?′íμ?ê±
o?£?3ìDò?à?ú?aà?*/
while((IRIN==0)&&(err>0)) //μè′y?°??9msμ?μíμ???1yè¥
{
delay(1);
err--;
}
if(IRIN==1) //è?1??yè·μèμ?9msμíμ???
{
err=500;
while((IRIN==1)&&(err>0)) //μè′y4.5msμ??eê???μ???1yè¥
{
delay(1);
err--;
}
for(k=0;k<4;k++) //12óD4×éêy?Y
{
for(j=0;j<8;j++) //?óê?ò?×éêy?Y
{
err=60;
while((IRIN==0)&&(err>0))//μè′yD?o??°??μ?560usμíμ???1yè¥
{
delay(1);
err--;
}
err=500;
while((IRIN==1)&&(err>0)) //??????μ???μ?ê±??3¤?è?£
{
delay(10); //0.1ms
Time++;
err--;
if(Time>30)
{
return;
}
}
IrValue[k]>>=1; //k±íê?μú??×éêy?Y
if(Time>=8) //è?1???μ???3???′óóú565us£????′ê?1
{
IrValue[k]|=0x80;
}
Time=0; //ó?íêê±??òa??D??3?μ
}
}
}
if(IrValue[2]!=~IrValue[3])
{
return;
}
}
}
按下遥控的键没有任何反应,
如果control改为如下所示
void control ()
{
led1=1;led2=1;
if(IrValue[2] = 0x44)
led1 = 0;
else if (IrValue[2] = 0x46)
led2 =0;
}
则LED1一开始就亮着而且按任何建LED1都会闪一下
是程序的问题吗?还是硬件的问题