1659|2

2

帖子

0

资源

一粒金砂(初级)

红外遥控长按键的问题 [复制链接]

用的是ATMEGA8a,单次按键没有问题,但自己搞了几天处理连发码都没搞出来,诚信请教如何判断是连发码?

  • 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      {for(j=0;j<210;j++);}
  • }
  • interrupt [EXT_INT0] void ext_int0_isr(void)
  • {
  •    uchar i,j,sum=0;
  •    GICR |=(0<   Delayus(20);                                //延时20*0.14MS  ,2.8MS
  •    for(i = 0;i < 14;i++)
  •       {
  •          Delayus(1);
  •          if(IRIN)                            //9MS内有高电平,则判断为干扰,退出处理程序
  •          {
  •            GICR |=(1<                  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<               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<
  •   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;}
  •                         }
  • 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;}
  •                         }
  • }




回复

3998

帖子

0

资源

版主

连发得看遥控器,有的遥控器单按也是连发

回复

71

帖子

0

资源

宇宙尘埃

了解了解
个人签名FTP

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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表