仪表用的遥控器非常不灵敏,经常自动退出,请问是什么原因?

2019-07-21 02:13发布

u32 Remote_Odr=0;           //ÃüáîÔY′æ′|
u8  Remote_Cnt=0;    //°′¼ü′Îêy,′Ë′ΰ′ϼüμÄ′Îêy
u8  Remote_Rdy=0;    //oìía½óêÕμ½êy¾Y   
//3õê¼»ˉoìía½óêÕòy½ÅμÄéèÖÃ
//¿aÆôÖD¶Ï,2¢ó3éä
void Remote_Init(void)
{                                                         
        GPIO_InitTypeDef GPIO_InitStructure;        //GPIO
        NVIC_InitTypeDef NVIC_InitStructure;        //ÖD¶Ï
        EXTI_InitTypeDef EXTI_InitStructure;        //ía2¿ÖD¶ÏÏß
                 
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE );          

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;  //éÏà-êäèë
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);  

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);          //Ñ¡Ô&#241A1ËùÔúμÄGPIO1ü½ÅóÃ×÷ía2¿ÖD¶ÏÏß·EXIT1               

        EXTI_InitStructure.EXTI_Line = EXTI_Line1;        //ía2¿Ïß·EXIT1
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                        //éèíaía2¿ÖD¶ÏÄ£ê½:EXTIÏß·ÎaÖD¶ÏÇëÇó
        EXTI_Mode_Event ;//éèÖà EXTIÏß·Îaê¼tÇëÇó
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  //ía2¿ÖD¶Ï′¥·¢ÑØÑ¡Ôñ:éèÖÃêäèëÏ߷ϽμÑØÎaÖD¶ÏÇëÇó
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;                //ê1Äüía2¿ÖD¶ÏDÂ×′ì¬
        EXTI_Init(&EXTI_InitStructure);                //¸ù¾YEXTI_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèEXTI¼Ä′æÆ÷       

        NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //ê1Äü°′¼üËùÔúμÄía2¿ÖD¶Ïí¨μà
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÏèÕ¼óÅÏ輶2¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; //′óóÅÏ輶1¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //ê1Äüía2¿ÖD¶Ïí¨μà
        NVIC_Init(&NVIC_InitStructure); //¸ù¾YNVIC_InitStructÖDÖ¸¶¨μÄ2Îêy3õê¼»ˉíaéèNVIC¼Ä′æÆ÷
}   
//¼ì2aÂö3å¿í¶è
//×î3¤Âö¿íÎa5ms
//·μ»ØÖμ:x,′ú±íÂö¿íÎax*20us(x=1~250);
u8 Pulse_Width_Check(void)
{
    u8 t=0;         
    while(RDATA)
    {         
                t++;delay_us(19);                                         
     if(t==250)return t; //3¬ê±òç3ö
    }
    return t;
}                          
//′|àíoìía½óêÕ  
/*-------------------------D-òé--------------------------
¿aê¼à-μí9ms,½ó×ÅêÇò»¸ö4.5msμĸßÂö3å,í¨ÖaÆ÷¼t¿aê¼′«Ëíêy¾YáË
½ó×ÅêÇ·¢Ëí4¸ö8λ¶t½øÖÆÂë,μúò»¶t¸öêÇò£¿Ø궱eÂë(REMOTE_ID),μúò»¸öÎa
ÕyÂë(0),μú¶t¸öÎa·′Âë(255),½ó×Åὸöêy¾YêǼüÖμ,μúò»¸öÎaÕyÂë
μú¶t¸öÎa·′Âë.·¢Ëííêoó40ms,ò£¿ØÔù·¢Ëíò»¸ö9msμí,2ms¸ßμÄÂö3å,
±íê¾°′¼üμÄ′Îêy,3öÏÖò»′ÎÔòÖ¤Ã÷Ö»°′ÏÂáËò»′Î,èç1û3öÏÖ¶à′Î,Ôò¿é
òÔèÏÎaêÇ3ÖDø°′ϸüü.
---------------------------------------------------------*/                 
//ía2¿ÖD¶Ï·tÎñ3ìDò          
void EXTI1_IRQHandler(void)
{      
        u8 res=0;
    u8 OK=0;
    u8 RODATA=0;                    
        while(1)
    {                   
        if(RDATA)//óD¸ßÂö3å3öÏÖ
        {
                                          
            res=Pulse_Width_Check();//»ñμÃ′Ë′θßÂö3å¿í¶è  
                               
                                                   
            if(res==250)break;//·ÇóDóÃDÅoÅ
            if(res>=200&&res<250)OK=1; //&#187;&#241;μ&#195;&#199;°μ&#188;&#206;&#187;(4.5ms)
            else if(res>=85&&res<200)  //°′&#188;ü′&#206;êy&#188;óò&#187;(2ms)
            {         
                                                    
                      Remote_Rdy=1;//&#189;óêüμ&#189;êy&#190;Y
                Remote_Cnt++;//°′&#188;ü′&#206;êy&#212;&#246;&#188;ó
                                                         // dispnone(3412);
                                                   break;
            }
            else if(res>=50&&res<85){RODATA=1;}//1.5ms
            else if(res>=10&&res<50){RODATA=0;}//500us
            if(OK)
            {   
                                                          
                Remote_Odr<<=1;
                Remote_Odr+=RODATA;
                Remote_Cnt=0; //°′&#188;ü′&#206;êy&#199;&#229;á&#227;
            }   
        }
    }                      
        EXTI_ClearITPendingBit(EXTI_Line1);  //&#199;&#229;3yEXTI1&#207;&#223;&#194;·1ò&#198;e&#206;&#187;         
}  
//′|àíoìía&#188;ü&#197;ì
//·μ&#187;&#216;&#207;àó|μ&#196;&#188;ü&#214;μ
u8 Remote_Process(void)
{               
    u8 t1,t2;   
    t1=Remote_Odr>>24; //μ&#195;μ&#189;μ&#216;&#214;·&#194;&#235;
    t2=(Remote_Odr>>16)&0xff;//μ&#195;μ&#189;μ&#216;&#214;··′&#194;&#235;
          Remote_Rdy=0;//&#199;&#229;3y±ê&#188;&#199;                      
    if(t1==(u8)~t2&&t1==REMOTE_ID)//&#188;ì&#209;éò£&#191;&#216;ê&#182;±e&#194;&#235;(ID)&#188;°μ&#216;&#214;·
    {  
                         
        t1=Remote_Odr>>8;
        t2=Remote_Odr;        
        if(t1==(u8)~t2)return t1; //′|àí&#188;ü&#214;μ  
    }     
    return 0;
}
u8 keymatch(void)
{   u8 irdata;
          irdata=Remote_Process();
    switch(irdata)
        {
          case 48: return(1);
          case 24: return(2);
          case 122: return(3);
          case 16: return(4);
          case 56: return(5);
          case 90: return(6);
          case 66: return(7);
          case 74: return(8);
          case 82: return(9);
          case 104: return(17);
          case 194: return(11);
          case 34: return(12);
          case 226: return(13);
          case 224: return(14);
          case 168: return(15);
          case 144:  return(16);
          case 162: return(0);
          case 152: return(18);
          case 176: return(19);
          case 2: return(20);
          default:return(99);
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
fumanchu
1楼-- · 2019-07-21 02:38
 精彩回答 2  元偷偷看……
HXYDJ
2楼-- · 2019-07-21 03:26
示波器看看遥控器按下的波形有没有失真,硬件没问题了,再去程序中找问题。
fumanchu
3楼-- · 2019-07-21 09:11
 精彩回答 2  元偷偷看……
fumanchu
4楼-- · 2019-07-21 12:18
//void TIM3_IRQHandler(void)   //TIM3&#214;D&#182;&#207;
//{
//        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  
//                {
//                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );   
////                LED1=!LED1;
//                }
//}

这是被注释的部分,不知道有没有影响
HXYDJ
5楼-- · 2019-07-21 12:28
fumanchu 发表于 2019-4-29 11:22
波形没有失真,可能是数据头没接到?

程序可以参考原子的遥控器相关代码
fumanchu
6楼-- · 2019-07-21 17:36
HXYDJ 发表于 2019-4-29 16:20
程序可以参考原子的遥控器相关代码

就是参考原子改的,经常在输入密码时跳出来,而且有时候需要按键两三下才有反应

一周热门 更多>