求单片机红外遥控解码识别长按和短按键的C语言例子

求单片机红外遥控解码识别长按和短按键的C语言例子,第1张

以NEC格式为例:

按键一次: 依次发送 引导码 + 地址 + 地址取反 + 数据 + 数据取反

按键: 隔110ms左右发一次引导凳颂码(重复),并不带任何数据(全部为高枣雹郑电平)

所以根据这个特点可以识别长按键:

程序接收一帧数据后,提取出地址和数据,然后判断

......

//有地址和数据的,为一次按键

.....

//地址肆早和数据为空的,为重复按键

if((ir_addr_code==0xffff)&&(ir_origin_data==0xff)&&(ir_data==0xff))

{

repeat=1

key= last_key

}

按下时返皮发送正常的编码,发送完毕,若按键依然按下,则发送重复码,重复码和引导码有共同的特点,就是周期短了一些(引导:13.5ms;重复:11.25ms),这个不就可以区分了吗?

只要接收的码周期是13.5,即一历冲组新发送的编码肢世歼,若是11.25则是重复码,重复码时,则将之前接收到的编码作为本次接收到的编码处理即可。

坚持一个原则,授正弯神之以渔,举一反三。

关于这个问题,程序匠人曾经写过一个短文叫“按键漫谈”,图文并茂,可以去百度文库里搜索一下。

如何区别“短击”和“长击”?

a) 定义一个变量:KEY_JSQ = 按键闭合计数器 b) 定义一个常数:AN_CJ_DL = 按键长闹稿击时间常数

c) 定时检测按键,当按键闭合时,KEY_JSQ按一定的频率递增; d) 当KEY_JSQ>= AN_CJ_DL 时,确认一次有效长击。

e)

当按键释放时,再判一次KEY_JSQ,如果KEY_JSQ<AN_CJ_DL,则说明刚才释放的那次击键为“短击”

f) 需要指出的是,当一个按键上同时支持“短击”和“长击”时, 二者的执行时

机是不同的。 i. 一般来说,“长击”一旦被检测到就立即执行。 ii. 而对于“短击”来说,因为当按键举亏刚被按下时,系统无法预知本次击键的

时间长度,所以,“短击”必须在释放后再执行。

g) 当按键释放后,KEY_JSQ应当被清零。

判断完成之后,红外编码,然后发射


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12311042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存