LVGL+FreeRTOS实战项目:智能健康助手(按键篇)
我们使用的是波轮开关 + 直插开关,直插开关按下来切换主界面,波轮开关负责切换菜单界面的功能以及进去对应功能的子界面。
·
简介
我们使用的是波轮开关 + 直插开关,直插开关按下来切换主界面,波轮开关负责切换菜单界面的功能以及进去对应功能的子界面。



软件部分
波轮开关的话,我们如果滑动到对应的位置之后,对应的引脚会被拉高,独立开关的话,按下之后,引脚就会被拉低,我们通过对GPIO电平的检测,来判断对应按键的按下,之后可以进行对应的处理。
按键初始化
初始化对应按键的GPIO口,波轮开关是按下被拉高,那么我们IO应该配置为下拉输入,独立按键是按下被拉低,那我们应该配置为上拉输入。
void EXTI_Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/*开启按键GPIO口的时钟*/
RCC_AHB1PeriphClockCmd(KEY0_INT_GPIO_CLK|KEY1_INT_GPIO_CLK|KEY2_INT_GPIO_CLK|KEY3_INT_GPIO_CLK ,ENABLE);
/* 选择按键0的引脚 */
GPIO_InitStructure.GPIO_Pin = KEY0_INT_GPIO_PIN;
/* 设置引脚为输入模式 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* 设置引脚不上拉也不下拉 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/* 使用上面的结构体初始化按键 */
GPIO_Init(KEY0_INT_GPIO_PORT, &GPIO_InitStructure);
/* 选择按键1的引脚 */
GPIO_InitStructure.GPIO_Pin = KEY1_INT_GPIO_PIN;
/* 设置引脚为输入模式 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* 设置引脚下拉 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
/* 使用上面的结构体初始化按键 */
GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStructure);
/* 选择按键2的引脚 */
GPIO_InitStructure.GPIO_Pin = KEY2_INT_GPIO_PIN;
/* 设置引脚为输入模式 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* 设置引脚下拉 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
/* 使用上面的结构体初始化按键 */
GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStructure);
/* 选择按键3的引脚 */
GPIO_InitStructure.GPIO_Pin = KEY3_INT_GPIO_PIN;
/* 设置引脚为输入模式 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* 设置引脚下拉 */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
/* 使用上面的结构体初始化按键 */
GPIO_Init(KEY3_INT_GPIO_PORT, &GPIO_InitStructure);
}
按键检测
我们通过直接定时扫描对应按键的GPIO口,判断是否有按键按下,这里我们是在LVGL里面移植了我们的按键设备,通过LVGL任务来判断按键是否按下,之后LVGL会在具体介绍。
/*Get the currently being pressed key. 0 if no key is pressed*/
static uint32_t keypad_get_key(void)
{
/*Your code comes here*/
if(GPIO_ReadInputDataBit(KEY1_INT_GPIO_PORT, KEY1_INT_GPIO_PIN) == 1)
{
//delay_ms(20);
vTaskDelay(20);
if(GPIO_ReadInputDataBit(KEY1_INT_GPIO_PORT, KEY1_INT_GPIO_PIN) == 1)
{
//while(GPIO_ReadInputDataBit(KEY1_INT_GPIO_PORT, KEY1_INT_GPIO_PIN) == 1);
return 1;
}
}
else if(GPIO_ReadInputDataBit(KEY2_INT_GPIO_PORT, KEY2_INT_GPIO_PIN) == 1)
{
//delay_ms(20);
vTaskDelay(20);
if(GPIO_ReadInputDataBit(KEY2_INT_GPIO_PORT, KEY2_INT_GPIO_PIN) == 1)
{
//while(GPIO_ReadInputDataBit(KEY2_INT_GPIO_PORT, KEY2_INT_GPIO_PIN) == 1);
return 2;
}
}
else if(GPIO_ReadInputDataBit(KEY3_INT_GPIO_PORT, KEY3_INT_GPIO_PIN) ==1)
{
//delay_ms(20);
vTaskDelay(20);
if(GPIO_ReadInputDataBit(KEY3_INT_GPIO_PORT, KEY3_INT_GPIO_PIN) == 1)
{
//while(GPIO_ReadInputDataBit(KEY3_INT_GPIO_PORT, KEY3_INT_GPIO_PIN) == 1);
return 3;
}
}
else if(GPIO_ReadInputDataBit(KEY0_INT_GPIO_PORT, KEY0_INT_GPIO_PIN) == 0)
{
//delay_ms(20);
vTaskDelay(20);
if(GPIO_ReadInputDataBit(KEY0_INT_GPIO_PORT, KEY0_INT_GPIO_PIN) == 0)
{
//while(GPIO_ReadInputDataBit(KEY0_INT_GPIO_PORT, KEY0_INT_GPIO_PIN) == 0);
return 4;
}
}
return 0;
}

更多推荐



所有评论(0)