标题: 新手求助,单片机红外遥控控制led程序不稳定 [打印本页]

作者: 白帅比    时间: 2020-6-15 13:51
标题: 新手求助,单片机红外遥控控制led程序不稳定
//最近学了红外遥控,然后想用红外遥控控制led,发现按下去有时候亮,有时候不亮,为什么啊?
//下面这是单片机代码;


#include "reg52.h"                        

typedef unsigned int u16;         
typedef unsigned char u8;

sbit IRIN=P3^2;
sbit led=P2^1;
u8 IrValue[6];
u8 Time;


void delay(u16 i)
{
        while(i--);        
}



void IrInit()
{
        IT0=1;
        EX0=1;
        EA=1;        

        IRIN=1;
}

void main()
{ IrInit();
        if(IrValue[2]==0x45)
        {
                led=~led;
  }

}

void ReadIr() interrupt 0
{
        u8 j,k;
        u16 err;
        Time=0;                                         
        delay(700);        
        if(IRIN==0)               
        {         
               
                err=1000;                                
                while((IRIN==0)&&(err>0))                        
                {                        
                        delay(1);
                        err--;
                }
                if(IRIN==1)                        
                {
                        err=500;
                        while((IRIN==1)&&(err>0))               
                        {
                                delay(1);
                                err--;
                        }
                        for(k=0;k<4;k++)               
                        {                                
                                for(j=0;j<8;j++)        
                                {

                                        err=60;               
                                        while((IRIN==0)&&(err>0))
                                        {
                                                delay(1);
                                                err--;
                                        }
                                        err=500;
                                        while((IRIN==1)&&(err>0))        
                                        {
                                                delay(10);        
                                                Time++;
                                                err--;
                                                if(Time>30)
                                                {
                                                        return;
                                                }
                                        }
                                        IrValue[k]>>=1;         
                                        if(Time>=8)                        
                                        {
                                                IrValue[k]|=0x80;
                                        }
                                        Time=0;                                
                                }
                        }
                }
                if(IrValue[2]!=~IrValue[3])
                {
                        return;
                }
        }                        
}


作者: yzwzfyz    时间: 2020-6-16 15:50
你能用框图画出你的思路吗?
作者: zzh2118    时间: 2020-9-15 08:36
中断函数里面有2个return




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1