找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1009|回复: 3
打印 上一主题 下一主题
收起左侧

诚信求教,avr单片机红外遥控长按键的问题

[复制链接]
跳转到指定楼层
楼主
ID:226556 发表于 2019-3-31 10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是ATMEGA8a,单次按键没有问题,但自己搞了几天处理连发码都没搞出来,诚信请教如何判断是连发码?

  1. uchar IR_buf[4]={0x00,0x00,0x00,0x00};  //IR_buf[0]、IR_buf[1]为用户码低位、用户码高位接收缓冲区
  2.                                                               // IR_buf[2]、IR_buf[3]为键数据码和键数据码反码接收缓冲区

  3. /********us延时程序,延时时间0.14ms(140us*)*******/
  4. void Delayus(uint x)
  5. {
  6.          char i, j;
  7.         for(i=0;i<x;i++)
  8.       {for(j=0;j<210;j++);}
  9. }

  10. interrupt [EXT_INT0] void ext_int0_isr(void)
  11. {
  12.    uchar i,j,sum=0;  
  13.    GICR |=(0<<INT0);
  14.    Delayus(20);                                //延时20*0.14MS  ,2.8MS
  15.    for(i = 0;i < 14;i++)
  16.       {
  17.          Delayus(1);
  18.          if(IRIN)                            //9MS内有高电平,则判断为干扰,退出处理程序
  19.          {
  20.            GICR |=(1<<INT0);
  21.                   return;                                    //返回
  22.          }
  23.       }

  24.    while(!(IRIN));                          //等待9ms低电平过去

  25.    for(i=0;i<4;i++)           
  26.     {
  27.       for(j=0;j<8;j++)         
  28.       {
  29.          while(IRIN);                         //等待4.5ms高电平过去
  30.          while(!(IRIN));                 //等待变高电平
  31.          while(IRIN)                          //计算高电平时间
  32.           {
  33.              Delayus(1);                        //延时0.14ms
  34.              sum++;                                    //对0.14ms延时时间进行计数
  35.              if(sum >= 30)              //高电平时间过长,则退出处理程序
  36.              {
  37.                GICR |=(1<<INT0);
  38.                return;
  39.              }   
  40.           }

  41.        IR_buf[i] = IR_buf[i] >> 1;      //接受一位数据

  42.        if(sum >= 6)
  43.           {IR_buf[i] = IR_buf[i] | 0x80;}   //若计数值大于6(高电平时间大于0.56),则为数据1

  44.        sum = 0;                  //若计数小于6,数据最高位补"0",说明收到的是"0",同时计时清零
  45.      }
  46.    }
  47.   if(IR_buf[2]!=~IR_buf[3])                //将键数据反码取反后与键数据码码比较,若不等,表示接收数据错误,放弃
  48.     { GICR |=(1<<INT0);    return;}      
  49.             
  50.   HW_Status=1;
  51. }  

  52. void RR()    //遥控器键控
  53. {
  54.         if(HW_Status==1)
  55.      {   static uchar m;
  56.                  if((IR_buf[2]==0xfb)||(IR_buf[2]==e))              //音量加
  57.                         {
  58.                                 if( VOLUME_1<98)
  59.                                         {++ VOLUME_1;}
  60.                                 else if( VOLUME_1>=98)
  61.                                         { VOLUME_1=98;}                           
  62.                         }
  63.                 if((IR_buf[2]==0xfa)||(IR_buf[2]==b))        //音量减
  64.                         {
  65.                                 if( VOLUME_1>0)
  66.                                         {-- VOLUME_1;}                          
  67.                         
  68.                         }
  69. void RR()    //遥控器键控处理
  70. {
  71.         if(HW_Status==1)
  72.      {   static uchar m;
  73.                  if((IR_buf[2]==0xfb)||(IR_buf[2]==e))              //音量加
  74.                         {
  75.                                 if( VOLUME_1<98)
  76.                                         {++ VOLUME_1;}
  77.                                 else if( VOLUME_1>=98)
  78.                                         { VOLUME_1=98;}                           
  79.                         }
  80.                 if((IR_buf[2]==0xfa)||(IR_buf[2]==b))                                        //音量减
  81.                         {
  82.                                 if( VOLUME_1>0)
  83.                                         {-- VOLUME_1;}                          
  84.                         
  85.                         }
  86. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:277550 发表于 2019-3-31 23:45 | 只看该作者
引导信号、低电平、重复记号,,,,,这判断


~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:226556 发表于 2019-4-4 19:05 | 只看该作者
继续求解
回复

使用道具 举报

地板
ID:160500 发表于 2019-4-4 21:12 | 只看该作者
不同的编码芯片有不同的编码方式,先看你所用的编码芯片是什么,再找数据手册看
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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