OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2651|回复: 7

按着遥控器的+,-键不放,让数值连续的增加或减少,解码程序该怎么写?

[复制链接]

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2019-3-22 15:18:11 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 rjx007 于 2019-3-22 15:19 编辑


按着遥控器的+,-键不放,让数值连续的增加或减少,解码程序该怎么写?
我原来的程序是按一下,数值变一下的。

最佳答案

查看完整内容[请看2#楼]

都说了我们例程就支持了 还要解答么? 下载测试就行了。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-3-22 15:18:12 | 显示全部楼层

都说了我们例程就支持了
还要解答么?
下载测试就行了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-3-22 17:55:37 | 显示全部楼层
用的原子配的遥控器和开发板?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-3-23 02:57:15 | 显示全部楼层
你看下遥控器的波形,就知道怎么操作了。我们例程是支持的。
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
 楼主| 发表于 2019-3-31 10:08:58 | 显示全部楼层
本帖最后由 rjx007 于 2019-3-31 10:11 编辑

这是我原来使用的红外遥控程序,可以单次按键,使用没有问题,在AVR单片机里使用的,用INT0中断。现在想增加长按键,即按住不放,数码管的数字可以连续增加或减少,我也知道是要判断连发码,但搞了几天也没搞出来,请教高手。应如何在原代码的基础上增加判断连发码的功能,诚信求教了。
uchar IR_buf[4]={0x00,0x00,0x00,0x00};  //IR_buf[0]、IR_buf[1]为用户码低位、用户码高位接收缓冲区
                                                             // IR_buf[2]、IR_buf[3]为键数据码和键数据码反码接收缓冲区

/********us延时程序,延时时间0.14ms(140us*)*******/
void Delayus(uint x)
{
        char i, j;
        for(i=0;i<x;i++)
      {for(j=0;j<210;j++);}
}


interrupt [EXT_INT0] 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[2]!=~IR_buf[3])                //将键数据反码取反后与键数据码码比较,若不等,表示接收数据错误,放弃
    { GICR |=(1<<INT0);    return;}      
            
  HW_Status=1;
}

void RR()    //遥控器键控处理程序
{
        if(HW_Status==1)
           {   static uchar m;
                  if((IR_buf[2]==0xfb)||(IR_buf[2]==e))           //音量加
                        {
                                if( VOLUME_1<98)
                                        {++ VOLUME_1;}
                                else if( VOLUME_1>=98)
                                        { VOLUME_1=98;}                           
                        }
                  if((IR_buf[2]==0xfa)||(IR_buf[2]==b))        //音量减
                        {
                                if( VOLUME_1>0)
                                        {-- VOLUME_1;}                          
                        
                        }
          }
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
 楼主| 发表于 2019-4-1 10:20:16 | 显示全部楼层
有哪位能具体指导一下吗?先谢谢了!
回复

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
 楼主| 发表于 2019-4-2 09:04:38 | 显示全部楼层
无人解答?
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2019-4-3 08:26:31 | 显示全部楼层
你这代码也是厉害了,在中断服务函数中使用while死等,有卡死的可能
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-23 11:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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