求教:按着遥控器的+,-键不放,让数值连续的增加或减少.
按着遥控器的+,-键不放,让数值连续的增加或减少,解码程序该怎么写?我原来的程序是按一下,数值变一下的。 一直收到同一个键值,当成长按,然后改怎么处理就怎么处理。 你看过红外协议没有,看过了就知道怎么写了 以前家用的红外遥控器编码是用特殊的信号表示repeat的 按着不放收到的是连发码,根本就没有重发键值,红外协议确实需要了解一下 就是发一次,然后告诉你,
又发了一次,内容和上次一样,内容就不发了。。。。
又发了一次,内容和上次一样,内容就不发了。。。。
又发了一次,内容和上次一样,内容就不发了。。。。 请问楼主需要红外解码的方案吗?可以联系我 按压加速,单位时间内接收到1-5次时,数字按照采集的次数改变,单位时间内接收到5-10次时,数字改变加倍,10次以上三倍-5倍,原理就是这样的 NEC的红外码里面有重发码,看看NEC码的协议就好了 电视机的声音加减就是这样。 是需要 修改一下 按键 扫描程序, 网上 搜 键盘 扫描 按键连发 ,有实例程序 搞了几天,还是搞不定,哪位高手能详细指导一下啊?最好有参考代码,先谢谢了! 提醒楼主,重复发帖违反版规的哦! 6121红外格式的,有检测重复码 楼主应该是没有认真阅读红外遥控的编码规则,否则就不会这样问了。长按时,遥控器是要发送重复码的,接收端在收到重复码时,就认为遥控器当前的按键没有释放,然后该怎么动作就怎么动作。给楼主附上一份多年前网上找回来的红外遥控器编码资料,可以参考一下。
已仔细看过红外协议,也按协议说的检测了重发码,但是仍然搞不定,唉。。。。。。 磁动力网站还有木有了 本帖最后由 rjx 于 2019-3-31 10:12 编辑
这是我原来使用的红外遥控程序,可以单次按键,使用没有问题,在AVR单片机里使用的,用INT0中断。现在想增加长按键,即按住不放,数码管的数字可以连续增加或减少,我也知道是要判断连发码,但搞了几天也没搞出来,请教高手。应如何在原代码的基础上增加判断连发码的功能,诚信求教了。
uchar IR_buf={0x00,0x00,0x00,0x00};//IR_buf、IR_buf为用户码低位、用户码高位接收缓冲区
// IR_buf、IR_buf为键数据码和键数据码反码接收缓冲区
/********us延时程序,延时时间0.14ms(140us*)*******/
void Delayus(uint x)
{
char i, j;
for(i=0;i<x;i++)
{for(j=0;j<210;j++);}
}
interrupt void ext_int0_isr(void) //用中断来处理接收到的红外信号。
{
uchar i,j,sum=0;
GICR |=(0<<INT0); //开INT0中断
Delayus(20); //延时20*0.14MS,2.8MS
for(i = 0;i < 14;i++)
{
Delayus(1);
if(IRIN) //9MS内有高电平,则判断为干扰,退出处理程序
{
GICR |=(1<<INT0);
return; //返回
}
}
while(!(IRIN)); //等待9ms低电平过去
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IRIN); //等待4.5ms高电平过去
while(!(IRIN)); //等待变高电平
while(IRIN) //计算高电平时间
{
Delayus(1); //延时0.14ms
sum++; //对0.14ms延时时间进行计数
if(sum >= 30) //高电平时间过长,则退出处理程序
{
GICR |=(1<<INT0);
return;
}
}
IR_buf = IR_buf >> 1; //接受一位数据
if(sum >= 6)
{IR_buf = IR_buf | 0x80;} //若计数值大于6(高电平时间大于0.56),则为数据1
sum = 0; //若计数小于6,数据最高位补"0",说明收到的是"0",同时计时清零
}
}
if(IR_buf!=~IR_buf) //将键数据反码取反后与键数据码码比较,若不等,表示接收数据错误,放弃
{ GICR |=(1<<INT0); return;}
HW_Status=1;
}
void RR() //遥控器键控处理程序
{
if(HW_Status==1)
{ static uchar m;
if((IR_buf==0xfb)||(IR_buf==e)) //音量加
{
if( VOLUME_1<98)
{++ VOLUME_1;}
else if( VOLUME_1>=98)
{ VOLUME_1=98;}
}
if((IR_buf==0xfa)||(IR_buf==b)) //音量减
{
if( VOLUME_1>0)
{-- VOLUME_1;}
}
} 遥控的种类没说,电视的、车子的。。。。
页:
[1]