607|0

441

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【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();
  }
}

 

三、运行结果

 

下载程序后,操作按键后,串口输出

 

此帖出自汽车电子论坛
点赞(1) 关注(1)

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表