| 
 
| 简介 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。
 
 移植MultiButton需要一个定时器为MultiButton提供计时服务。
 本次移植使用mindsdk自动生成的工程:plus-f5270_tim_basic_mdk
 
 开始移植
 说明:本次移植实现了按键一(D7)单击,双击,长按时分别点亮不同的LED灯。
 
 1.将MultiButton的.c文件和.h文件添加到工程中,并在魔术棒中设置好MultiButton的文件路径。
 
 
   
 2.实现按键的GPIO口初始化
 
 void button_gpio_init(void)
 {
 GPIO_Init_Type gpio_init;
 /*开启按键端口的时钟*/
 RCC_EnableAHB1Periphs(B1_GPIO_CLK, true);
 RCC_ResetAHB1Periphs(B1_GPIO_CLK);
 gpio_init.Pins  = B1_GPIO_PIN;
 gpio_init.PinMode  = GPIO_PinMode_In_Floating;  //浮空输入
 gpio_init.Speed = GPIO_Speed_50MHz;
 GPIO_Init(B1_GPIO_PORT, &gpio_init);
 
 }
 
 
 
 3.实现按键对应的高低电平读取函数
 read_button_GPIO函数的作用就是读取对应的按键的电平,判断按键是否按下,因为本次只使用了一个按键,所以只有一个case btn1_id,
 后续如果需要扩展更多的按键,可以在.h文件中Button_IDs增加。
 Button_ID相当于按键的身份*。
 
 enum Button_IDs {
 btn1_id,
 };
 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_ReadInDataBit(B1_GPIO_PORT, B1_GPIO_PIN);
 break;
 
 
 default:
 return 0;
 break;
 }
 }
 
 
 
 
 4.写按键动作对应的回调函数:下面分别的我写的单击,双击,长按的回调函数。
 
 void BTN1_SINGLE_Click_Handler(void* btn)
 {
 LED4_ON;
 LED5_OFF;
 LED6_OFF;
 }
 
 void BTN1_DOUBLE_Click_Handler(void* btn)
 {
 LED4_OFF;
 LED5_ON;
 LED6_OFF;
 }
 
 void BTN1_LONG_PRESS_START_Handler(void* btn)
 {
 LED4_OFF;
 LED5_OFF;
 LED6_ON;
 }
 
 
 
 5.定义一个按键:Button btn1;
 
 6.在main函数中初始化一个按键
 
 button_init
 btn1        按键1
 read_button_GPIO        高低电平读取函数
 BUTTON_ON        设置按键触发时,是高电平还是低电平
 btn1_id        按键1对应的id
 button_init(&btn1, read_button_GPIO, BUTTON_ON, btn1_id);
 
 //为按键1设置动作对应的回调函数
 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);
 
 //使能按键1
 button_start(&btn1);
 
 
 7.设置一个5ms间隔的定时器循环调用后台处理函数
 修改定时器触发时间为1ms
 添加一个变量,
 volatile int time=0;
 在定时器中断中time++;
 
 之后在main函数中调用button_ticks
 while (1)
 
 {
 if(time>=5)
 {
 time=0;
 button_ticks();
 }
 }
 
 
 button_ticks中不需要我们进行修改,直接使用就可以了。
 
 ————————————————
 版权声明:本文为CSDN博主「极术社区」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
 原文链接:https://blog.csdn.net/weixin_47569031/article/details/127368053
 
 
 | 
 |