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

2024-11-22 18:29:11
推荐回答(2个)
回答1:

以NEC格式为例:
按键一次: 依次发送 引导码 + 地址 + 地址取反 + 数据 + 数据取反

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

所以根据这个特点可以识别长按键:
程序接收一帧数据后,提取出地址和数据,然后判断
......
//有地址和数据的,为一次按键
.....
//地址和数据为空的,为重复按键
if((ir_addr_code==0xffff)&&(ir_origin_data==0xff)&&(ir_data==0xff))
{
repeat=1;
key= last_key;

}

回答2:

简单点的话,其实也可以用定时器,比如你定时器记一个time的数,那么在整个遥控的过程中,time不会大于( 隔110ms左右发一次引导码(重复),并不带任何数据(全部为高电平))150/256us约等于600,那么你在一个循环里就可以写 ps:定时器我用的8位自动重装
if(time<600)//相当于长按了
{写你想写的}