21ic电子技术开发论坛

标题: 做了一个红外解码的程序 [打印本页]

作者: llia    时间: 2020-1-18 10:46
标题: 做了一个红外解码的程序
设一个变量a,遥控上的一个键对应给a一个固定值,这个没问题,但是我想按一下遥控的某个键实现a++,就不行了, 按一下  显示出来的a的值并不是连续变化的,是不是因为按一次遥控接受了多次数据?

作者: wangpe    时间: 2020-1-18 10:49
没懂你意思

作者: wangpe    时间: 2020-1-18 10:52

按一下  显示出来的a的值并不是连续变化的

这是怎么变化的呢?

作者: langgq    时间: 2020-1-18 10:55
我想要的效果是按一下 a的值加1  但现在是不定的有时候是加1有时候加2有时候3  什么都有

作者: wangzsa    时间: 2020-1-18 10:59

你看看是不是按键按一次的时候,多次调用了a++的程序,设置一个标志位,确定按一次的时候,只调用一次a++程序

作者: zhanghqi    时间: 2020-1-18 11:02
不妨采用现成的解码芯片YIRTX01。

作者: zhanglli    时间: 2020-1-18 11:05
你红外怎么解码的? 协议中最后部分有长按次数啊 用那个去判断!!

作者: lium    时间: 2020-1-18 11:10
因为楼主没有做松手识别,一直按住就会一直执行a++。

作者: guoyt    时间: 2020-1-18 11:13
按下遥控器某键时令发送的编码第x位置1,解码程序判断x位==1就调用一次a++

作者: hanwe    时间: 2020-1-18 11:16
没有代码。怎么分析呢?

作者: yufe    时间: 2020-1-18 11:19
设置状态标志  正确解到码后置标志位  再到主循环去判断这个标志为是否置位 置位就+1  并且清标志位

作者: wangpe    时间: 2020-1-18 11:22
大多数遥控器在按下按键时,按规则不停发射对应此键的编码,这是导致不断加 1 的原因。
设定 a 为固定值也有这个过程,只不过每次都是该值,所有没有表现出问题。

可以这样处理,设置一个定时器,每检测到一次有效编码,检测此定时器,如果定时器值为 0,说明是一次“键下”事件,进行相应的处理;如果定时器不为 0,说明是“键压”事件,不进行加 1 处理,或进行“键压”事件处理。

作者: langgq    时间: 2020-1-18 11:26
处理完上述事件后,设定定时器的值,使定时器“归 0”的的时间大于 2 倍红外编码发射速率,若红外编码每秒发射 20 次,可以将定时器设定为 100mS。

作者: wangzsa    时间: 2020-1-18 11:32
对,不要忘记在中断程序中对定时器倒数计时。

作者: llia    时间: 2020-1-18 11:35
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位





欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/)