``
uint8_t Scan_Key(void)
{
uint8_t keyNumber;
GPIO_InitTypeDef GPIOInitStructure;
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructure);
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0) keyNumber=7;
else if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0) keyNumber=8;
else if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15) == 0) keyNumber=9;
else
{
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_14;
GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructure);
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_15;
GPIO_Init(GPIOB,&GPIOInitStructure);
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0) keyNumber=5;
else if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0) keyNumber=6;
else
{
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_15;
GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructure);
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_14;
GPIO_Init(GPIOB,&GPIOInitStructure);
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0) keyNumber=3;
else if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15) == 0) keyNumber=4;
else
{
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_14 | GPIO_Pin_15;
GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructure);
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPD;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_Init(GPIOB,&GPIOInitStructure);
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0) keyNumber=2;
else if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_15) == 0) keyNumber=1;
}
}
}
GPIOInitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIOInitStructure.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIOInitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIOInitStructure);
return keyNumber;
}
``请问按键扫描时,在GPIO口输入模式切换下达到识别多按键(3个IO口-9个按键),这样的代码有什么问题吗?实际测试时的问题:下拉输入模式下的IO口导通到上拉输入下的IO口,好像无法引起上拉输入IO口的电平跳变,从而进入中断。