【AT32A403A 车规MCU开发板】 基于MultiButton按键测试
[复制链接]
测试基于MultiButton按键输入的多种处理,单击、双击、长按状态处理。
一、MultiButton
2.1、简介
MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。
2.2、源码下载
地址:
二、程序代码
2.1、按键初始化
void init_key(void)
{
gpio_init_type gpio_init_struct;
gpio_default_para_init(&gpio_init_struct);
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
/* gpio input config */
gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_0;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
button_init(&btn1, read_button_GPIO, 1, btn1_id);
button_attach(&btn1, PRESS_DOWN, BTN1_PRESS_DOWN_Handler);
button_attach(&btn1, PRESS_UP, BTN1_PRESS_UP_Handler);
button_attach(&btn1, PRESS_REPEAT, BTN1_PRESS_REPEAT_Handler);
button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler);
button_attach(&btn1, DOUBLE_CLICK, BTN1_DOUBLE_Click_Handler);
button_attach(&btn1, LONG_PRESS_START, BTN1_LONG_PRESS_START_Handler);
button_attach(&btn1, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler);
button_start(&btn1);
}
2.2、读按键状态
uint8_t read_button_GPIO(uint8_t button_id)
{
// you can share the GPIO read function with multiple Buttons
switch(button_id)
{
case btn1_id:
return gpio_input_data_bit_read(B2_GPIO_PORT, B2_PIN);
default:
return 0;
}
}
2.3、打印按键状态
void BTN1_PRESS_DOWN_Handler(void* btn)
{
printf("B2 USER DOWN! \r\n");
}
void BTN1_PRESS_UP_Handler(void* btn)
{
printf("B2 USER UP! \r\n");
}
void BTN1_PRESS_REPEAT_Handler(void* btn)
{
printf("B2 USER PRESS_REPEAT! \r\n");
}
void BTN1_SINGLE_Click_Handler(void* btn)
{
printf("B2 USER SINGLE_ClICK! \r\n");
}
void BTN1_DOUBLE_Click_Handler(void* btn)
{
printf("B2 USER DOUBLE_ClICK! \r\n");
}
void BTN1_LONG_PRESS_START_Handler(void* btn)
{
printf("B2 USER LONG_PRESS_START! \r\n");
}
void BTN1_LONG_PRESS_HOLD_Handler(void* btn)
{
printf("B2 USER LONG_PRESS_HOLD! \r\n");
}
2.3、主程序
#include "main.h"
int main(void)
{
system_clock_config();
delay_init();
init_usart(115200);
init_led();
//init_eint();
init_key();
while(1)
{
delay_ms(5);
button_ticks();
}
}
三、运行结果
下载程序后,操作按键后,串口输出
|