标题: 单片机接受到一个红外信号后怎么复位 [打印本页]

作者: 茉莉星瞳    时间: 2021-12-15 11:40
标题: 单片机接受到一个红外信号后怎么复位
接受到一个信号后,这个信号一直存在,停不下来了
作者: 188610329    时间: 2021-12-15 13:08
接受到一个信号? 是一个低电平? 还是解析完成后的一个编码?

如果是解析完成后的一个编码, 那么和接收就没有任何关系了, 是你处理逻辑了.
通常解析完一个编码,会置一个标志,如:  Resolution_End = 1;
然后,判断编码的程序, 是通过  if(Resolution_End == 1)   来对这个解析完的编码进行后续操作,完了之后 Resolution_End = 0;  就不会再次操作了,  这个 Uart 中断标志位 RI = 1, IF(RI) , RI =0  ,其实 是一个道理。
作者: 茉莉星瞳    时间: 2021-12-15 13:21
188610329 发表于 2021-12-15 13:08
接受到一个信号? 是一个低电平? 还是解析完成后的一个编码?

如果是解析完成后的一个编码, 那么和接收就 ...

就是做的个红外密码锁,通过解析红外遥控器键值来有具体操作,然后按下一个按键以后会一直有这个信号的处理程序在执行,这是读取键值的程序,该怎么改一下呢
void ReadIr() interrupt 0{        unsigned char j,k;        unsigned int err;        Time=0;                                                 DelayMs(70);        if(IRIN==0)                        {                                         err=1000;                                                while((IRIN==0)&&(err>0))                                        {                                                DelayMs(1);                        err--;                }                 if(IRIN==1)                                        {                        err=500;                        while((IRIN==1)&&(err>0))                                         {                                DelayMs(1);                                err--;                        }                        for(k=0;k<4;k++)                                        {                                                                for(j=0;j<8;j++)                                        {                                        err=60;                                                        while((IRIN==0)&&(err>0))                                        {                                                DelayMs(1);                                                err--;                                        }                                        err=500;                                        while((IRIN==1)&&(err>0))                                                {                                                DelayMs(1);//0.14ms                                                Time++;                                                err--;                                                if(Time>30)                                                {                                                        EX0=1;                                                        return;                                                }                                        }                                        IrValue[k]>>=1;                                                if(Time>=8)                                                                {                                                IrValue[k]|=0x80;                                        }                                        Time=0;                                                                                                }                        }                }                if(IrValue[2]!=~IrValue[3])                {                                                return;                }        }                        }
作者: 13205495918    时间: 2021-12-15 15:37
你找找例程参考一下吧,一般是考虑标准位。




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