找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 916|回复: 3
打印 上一主题 下一主题
收起左侧

单片机接受到一个红外信号后怎么复位

[复制链接]
跳转到指定楼层
楼主
ID:944932 发表于 2021-12-15 11:40 来自触屏版 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
接受到一个信号后,这个信号一直存在,停不下来了
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-12-15 13:08 | 只看该作者
接受到一个信号? 是一个低电平? 还是解析完成后的一个编码?

如果是解析完成后的一个编码, 那么和接收就没有任何关系了, 是你处理逻辑了.
通常解析完一个编码,会置一个标志,如:  Resolution_End = 1;
然后,判断编码的程序, 是通过  if(Resolution_End == 1)   来对这个解析完的编码进行后续操作,完了之后 Resolution_End = 0;  就不会再次操作了,  这个 Uart 中断标志位 RI = 1, IF(RI) , RI =0  ,其实 是一个道理。
回复

使用道具 举报

板凳
ID:944932 发表于 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;                }        }                        }
回复

使用道具 举报

地板
ID:908826 发表于 2021-12-15 15:37 | 只看该作者
你找找例程参考一下吧,一般是考虑标准位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表