|
按键初始化程序:
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
按键扫描程序:
int KEY_Scan(void)
{
u8 KeyVal;
GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0013));
if((GPIOA->IDR & 0x0013)==0x0000)
return 0;
else
{
Delay(0x2710);
if((GPIOA->IDR & 0x00e0)==0x0000)
return 0;
}
GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0001));
switch(GPIOA->IDR & 0x00e0)
{
case 0x1000: KeyVal=1; break;
case 0x2000: KeyVal=4; break;
case 0x4000: KeyVal=7; break;
}
GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0002));
switch(GPIOA->IDR & 0x00e0)
{
case 0x1000: KeyVal=2; break;
case 0x2000: KeyVal=5; break;
case 0x4000: KeyVal=8; break;
}
GPIO_Write(GPIOA,(GPIOA->ODR & 0xffec | 0x0010));
switch(GPIOA->IDR & 0x00e0)
{
case 0x1000: KeyVal=3; break;
case 0x2000: KeyVal=6; break;
case 0x4000: KeyVal=9; break;
}
return KeyVal;
}
主函数:
while(1)
{
key=KEY_Scan();
switch(key)
{
case 1:
GPIO_SetBits(GPIOF, GPIO_Pin_6);
break;
case 4:
GPIO_SetBits(GPIOF, GPIO_Pin_6);
break;
case 7:
GPIO_SetBits(GPIOF, GPIO_Pin_6);
break;
}
} |
|