你的位置:首页 > 操作系统

[操作系统]stm32 按键


                  //°´¼ü³õʼ»¯º¯Êý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){     static u8 key_up=1;//°´¼ü°´ËÉ¿ª±êÖ¾  if(mode)key_up=1; //Ö§³ÖÁ¬°´       if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1)) //°´ÏÂÈ¥µÄ״̬key  {    delay_ms(10);//È¥¶¶¶¯    key_up = 0;       if(KEY0==0)return KEY_RIGHT;    else if(KEY1==0)return KEY_DOWN;    else if(KEY2==0)return KEY_LEFT;    else if(KEY3==1)return KEY_UP;  } else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;        return 0; // ÎÞ°´¼ü°´ÏÂ}

  while(1)  {     t=KEY_Scan(0);          if(t)    {                    switch(t)      {                 case KEY_UP:  //µÆÈ«Ã𣬷äÃùÆ÷Ïì2Éù     PA.0¿ØÖÆPB.8          LED0=1;      LED1=1;                 BEEP = 1;      delay_ms(100);      BEEP = 0;      delay_ms(200);     BEEP = 1;     delay_ms(100);      BEEP = 0;      delay_ms(200);          break;         case KEY_LEFT:  //LED0ÉÁÒ»´Î PE.3¿ØÖÆPE.5          LED0=0;         delay_ms(200);         LED0=1;          break;         case KEY_DOWN:  //¿ØÖÆLED1·­×ª  PE.2¿ØÖÆPB.5          LED1=!LED1;          break;         case KEY_RIGHT:  //ͬʱ¿ØÖÆLED0,LED1·­×ª PE.4          LED0=0;         delay_ms(200);         LED0=1;          break;      }    }else delay_ms(10);   }   }