当前位置: 首页 > news >正文

学雷锋 做美德少年网站wordpress 内容页面

学雷锋 做美德少年网站,wordpress 内容页面,纸箱 东莞网站建设,比较出名的网站建设公司移植开源MultiButton来测试按键的几种操作状态。 一、硬件部分 开发板上的按键部分电路图 KEY1和KEY2按键使用了PB0和PB1端口。 二、MultiButton MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理…

移植开源MultiButton来测试按键的几种操作状态。

一、硬件部分

开发板上的按键部分电路图
在这里插入图片描述

KEY1和KEY2按键使用了PB0和PB1端口。

二、MultiButton
MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。

下载地址:
https://github.com/0x1abin/MultiButton

按照例程移植程序,即可实现按键的操作。

三、程序部分

3.1、key.c

#include "main.h"uint8_t button_tick_cnt=0;enum Button_IDs 
{btn1_id,btn2_id,
};struct Button btn1;
struct Button btn2;uint8_t read_button_gpio(uint8_t button_id)
{switch(button_id){case btn1_id:return GPIO_ReadInputDataBit(KEY1_GPIO_PORT, KEY1_PIN);case btn2_id:return GPIO_ReadInputDataBit(KEY2_GPIO_PORT, KEY2_PIN);default:return 0;}
}//BTN1
void BTN1_PRESS_DOWN_Handler(void* btn)
{printf("KEY1 DOWN! \r\n");
}void BTN1_PRESS_UP_Handler(void* btn)
{printf("KEY1 UP! \r\n");
}void BTN1_PRESS_REPEAT_Handler(void* btn)
{printf("KEY1 PRESS_REPEAT! \r\n");
}void BTN1_SINGLE_Click_Handler(void* btn)
{printf("KEY1 SINGLE_ClICK! \r\n");
}//void BTN2_DOUBLE_Click_Handler(void* btn)
//{
//	printf("KEY2 DOUBLE_ClICK! \r\n");
//}void BTN1_LONG_PRESS_START_Handler(void* btn)
{printf("KEY1 LONG_PRESS_START! \r\n");
}void BTN1_LONG_PRESS_HOLD_Handler(void* btn)
{printf("KEY1 LONG_PRESS_HOLD! \r\n");
}//BTN2
void BTN2_PRESS_DOWN_Handler(void* btn)
{printf("KEY2 DOWN! \r\n");
}void BTN2_PRESS_UP_Handler(void* btn)
{printf("KEY2 UP! \r\n");
}void BTN2_PRESS_REPEAT_Handler(void* btn)
{printf("KEY2 PRESS_REPEAT! \r\n");
}void BTN2_SINGLE_Click_Handler(void* btn)
{printf("KEY2 SINGLE_ClICK! \r\n");
}//void BTN2_DOUBLE_Click_Handler(void* btn)
//{
//	printf("KEY2 DOUBLE_ClICK! \r\n");
//}void BTN2_LONG_PRESS_START_Handler(void* btn)
{printf("KEY2 LONG_PRESS_START! \r\n");
}void BTN2_LONG_PRESS_HOLD_Handler(void* btn)
{printf("KEY2 LONG_PRESS_HOLD! \r\n");
}void button_tick_hdl(void)
{button_tick_cnt++;if(button_tick_cnt>=5){button_tick_cnt=0;button_ticks();}
}void init_key(void)
{GPIO_InitTypeDef GPIO_InitStruct;KEY1_GPIO_CLK_ENABLE();KEY2_GPIO_CLK_ENABLE();GPIO_StructInit(&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin   = KEY1_PIN;GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IPU;GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStruct);GPIO_StructInit(&GPIO_InitStruct);GPIO_InitStruct.GPIO_Pin   = KEY2_PIN;GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IPU;GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStruct);	//BTN1button_init(&btn1, read_button_gpio, 0, 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);//BTN2button_init(&btn2, read_button_gpio, 0, btn2_id);button_attach(&btn2, PRESS_DOWN,       BTN2_PRESS_DOWN_Handler);button_attach(&btn2, PRESS_UP,         BTN2_PRESS_UP_Handler);button_attach(&btn2, PRESS_REPEAT,     BTN2_PRESS_REPEAT_Handler);
//	button_attach(&btn2, SINGLE_CLICK,     BTN2_SINGLE_Click_Handler);
//	button_attach(&btn2, DOUBLE_CLICK,     BTN2_DOUBLE_Click_Handler);button_attach(&btn2, LONG_PRESS_START, BTN2_LONG_PRESS_START_Handler);button_attach(&btn2, LONG_PRESS_HOLD,  BTN2_LONG_PRESS_HOLD_Handler);button_start(&btn2);
}

3.2、key.h

#ifndef __KEY_H
#define __KEY_H#define KEY1_GPIO_CLK                    RCC_AHBPeriph_GPIOB
#define KEY1_GPIO_PORT                   GPIOB
#define KEY1_PIN                         GPIO_Pin_0#define KEY2_GPIO_CLK  								   RCC_AHBPeriph_GPIOB
#define KEY2_GPIO_PORT                   GPIOB
#define KEY2_PIN                         GPIO_Pin_1#define KEY1_GPIO_CLK_ENABLE()          do{ RCC_AHBPeriphClockCmd(KEY1_GPIO_CLK, ENABLE); }while(0)
#define KEY1_GPIO_CLK_DISABLE()         do{ RCC_AHBPeriphClockCmd(KEY1_GPIO_CLK, DISABLE); }while(0)#define KEY2_GPIO_CLK_ENABLE()          do{ RCC_AHBPeriphClockCmd(KEY2_GPIO_CLK, ENABLE); }while(0)
#define KEY2_GPIO_CLK_DISABLE()         do{ RCC_AHBPeriphClockCmd(KEY2_GPIO_CLK, DISABLE); }while(0)#define KEY_UP_PRES    		1                   
#define KEY_DOWN_PRES    	2                 	 
#define KEY_LEFT_PRES    	3                
#define KEY_RIGHT_PRES    4  
#define KEY_SEL_PRES			5
#define KEY_B2_PRES				6void init_key(void);  
void button_tick_hdl(void);#endif

3.3、main.c

#include "main.h"int main(void)
{SysTick_Init();init_usart(115200);init_led();init_key();printf("mm32F5265_ob_printf_test!\r\n");while (1){}
}

3.4、调用计时函数

在systick中断函数中调用计时函数

void SysTick_Handler(void)
{TimingDelay_Decrement();button_tick_hdl();
}

四、程序运行

下载程序后,操作按键,串口输出内容
4.1、操作KEY1按键,串口输出
在这里插入图片描述

4.2、操作KEY2按键,串口输出
在这里插入图片描述

http://www.dtcms.com/a/586345.html

相关文章:

  • WordPress电影网站源码东坑仿做网站
  • Android深入探索Activity生命周期与启动模式
  • 阿里云做网站的深圳关键词推广优化
  • 太湖度假区建设局网站河南郑州做网站h汉狮
  • HTML5+CSS3+JS小实例:爆炸粒子魔法按钮
  • Go语言入门指南-从零开始的奇妙之旅
  • 电子商务网站推广案例电子商务基础网站建设与维护单项选择题
  • logo设计制作公司夫唯seo
  • LeetCode 155. 最小栈
  • 杭州企业网站建设方案大连零基础网站建设教学公司
  • 使用腾讯云函数和云存储开发android app更新功能开发遇到的坑和解决方案
  • 韶关市建设局网站梅州做网站
  • 服装网站建设的规划百度推广多少钱
  • 电机驱动的总结和实战
  • php儿童摄影网站源码浏览器推广哪个平台好
  • 做论坛网站怎么赚钱吗江苏省交通建设局网站首页
  • 虚拟地址空间:揭秘Linux内存
  • 嵌入式开发安装Samba服务实现方法
  • 网站开发人员要求备案个人可以做视频网站
  • 网站为契机建设校园数字化上海网站建设哪家技术好
  • 人工智能决策系统和传统决策模型相比有什么优势?
  • 简述dw网站建设步骤网站建设哪家便宜
  • 未来新科技:纳米酶——类酶纳米材料的突破性应用与前景
  • 数据结构(c++版):深入理解哈希计数器
  • 网站侧边栏代码网站设计制作哪种快
  • Flutter SlideTransition 实现平移动画
  • Android EDLA 认证提测前的基本开发和准备简要说明
  • 潍坊网站设计制作seo软件服务
  • 心连网网站wordpress4.9博客模板
  • 数据库要进行分表分库是开发一个项目就要设计好了,还是上线后根据需要再分表分库?