//°´¼ü³õʼ»¯º¯Êý
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);
}
}
转载于:https://www.cnblogs.com/zhaocundang/p/5325398.html