stm32 按键

时间:2023-03-08 20:14:49
//°´¼ü³õʼ»¯º¯Êý
void KEY_Init(void) //IO³õʼ»¯
{
     GPIO_InitTypeDef GPIO_InitStructure;
    //³õʼ»¯KEY0-->GPIOA.13,KEY1-->GPIOA.15  ÉÏÀ­ÊäÈë IPU
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//ʹÄÜPORTA,PORTEʱÖÓ

    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//PE2~4
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖóÉÉÏÀ­ÊäÈë
     GPIO_Init(GPIOE, &GPIO_InitStructure);//³õʼ»¯GPIOE2,3,4

    //³õʼ»¯ WK_UP-->GPIOA.0      ÏÂÀ­ÊäÈë  IPD
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  //PA0ÉèÖóÉÊäÈ룬ĬÈÏÏÂÀ­
    GPIO_Init(GPIOA, &GPIO_InitStructure);         //³õʼ»¯GPIOA.0

}
u8 KEY_Scan(u8 mode)
{
    ;//°´¼ü°´ËÉ¿ª±êÖ¾
    ;  //Ö§³ÖÁ¬°´
    ||KEY1==||KEY2==||KEY3==))  //°´ÏÂÈ¥µÄ״̬key
    {
        delay_ms();//È¥¶¶¶¯
        key_up = ;
             )return KEY_RIGHT;
        )return KEY_DOWN;
        )return KEY_LEFT;
        )return KEY_UP;
    } &&KEY1==&&KEY2==&&KEY3==)key_up=;
       ;  // ÎÞ°´¼ü°´ÏÂ
}
    )
    {
         t=KEY_Scan();
           if(t)
        {
            switch(t)
            {
                case KEY_UP:    //µÆÈ«Ã𣬷äÃùÆ÷Ïì2Éù          PA.0¿ØÖÆPB.8
                    LED0=;
            LED1=;

                 BEEP = ;
           delay_ms();
           BEEP = ;
           delay_ms();
         BEEP = ;
         delay_ms();
           BEEP = ;
           delay_ms();
                    break;
                  case KEY_LEFT:    //LED0ÉÁÒ»´Î  PE.3¿ØÖÆPE.5
                    LED0=;
                  delay_ms();
                  LED0=;
                    break;
                  case KEY_DOWN:    //¿ØÖÆLED1·­×ª    PE.2¿ØÖÆPB.5
                    LED1=!LED1;
                    break;
                  case KEY_RIGHT:    //ͬʱ¿ØÖÆLED0,LED1·­×ª PE.4
                    LED0=;
                  delay_ms();
                  LED0=;
                    break;
            }
        });
    }
 }