本帖最后由 紫气东升 于 2019-5-30 08:49 编辑
这个按键扫描程序经过试验是可以直接使用的,分享给大家,有需要的可以拿来参考。
u8 kbScan(void)
{
static u8 k = 0;
while(1)
{
GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_IN_PU_NO_IT); //输入上拉,没有外部中断
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_WriteHigh(GPIOD, GPIO_PIN_2);
GPIO_WriteLow(GPIOD, GPIO_PIN_3);
if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_4))
{
k = KEY_SPK_MUTE; //喇叭静音(根据个人需要修改)
break;
}
GPIO_WriteHigh(GPIOD, GPIO_PIN_3);
GPIO_WriteLow(GPIOD, GPIO_PIN_2);
if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_4))
{
k = KEY_FUN_DOWN; // 音量-(根据个人需要修改)
break;
}
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_PU_NO_IT); //输入上拉,没有外部中断
GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_WriteHigh(GPIOD, GPIO_PIN_2);
GPIO_WriteLow(GPIOD, GPIO_PIN_4);
if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_3))
{
k = KEY_OFF; // 蓝牙(根据个人需要修改)
break;
}
GPIO_WriteHigh(GPIOD, GPIO_PIN_4);
GPIO_WriteLow(GPIOD, GPIO_PIN_2);
if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_3))
{
k = KEY_FUN_UP; // 音量+(根据个人需要修改)
break;
}
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT); //输入上拉,没有外部中断
GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_WriteHigh(GPIOD, GPIO_PIN_3);
GPIO_WriteLow(GPIOD, GPIO_PIN_4);
if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_2))
{
k = KEY_ON; // 摘机挂机(根据个人需要修改)
break;
}
GPIO_WriteHigh(GPIOD, GPIO_PIN_4);
GPIO_WriteLow(GPIOD, GPIO_PIN_3);
if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_2))
{
k = KEY_MIC_MUTE; // 麦克风静音(根据个人需要修改)
break;
}
GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
k = 0;
break;
}
return k;
}
|
|