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

北京市建设局网站秦皇岛网络

北京市建设局网站,秦皇岛网络,电商运营中如何做好证据的保全,无锡公司网站建设电话说明#xff1a;本文处理按键的短按、长按检测执行#xff0c;非矩阵按键 硬件可以类似如下连接即可#xff0c;无需放置上下拉电阻#xff1b; 按键动作分长按、短按(弹起时执行)两种 按下不放执行长按#xff0c;但松开按键时不予执行短按函数 多个按键可以同时操作 按…说明本文处理按键的短按、长按检测执行非矩阵按键 硬件可以类似如下连接即可无需放置上下拉电阻 按键动作分长按、短按(弹起时执行)两种 按下不放执行长按但松开按键时不予执行短按函数 多个按键可以同时操作 按键引脚会自动配置软件上下拉 1、驱动文件 Key_Driver.h #ifndef _Key_Driver_H_ #define _Key_Driver_H_ #include Common_Driver.hextern void Key_Init(void); extern void Key_Scan(void);#endif Key_Driver.c /********************************************************************** *file:按键扫描处理文件 *author:残梦 *date:2023.2.15 *Version:V1.0 *note: 按键动作分长按、短按(弹起时执行)两种按下不放执行长按但松开按键时不予执行短按函数多个按键可以同时操作按键引脚会自动配置软件上下拉 使用方法1、修改宏按键个数值KEY_NUM2、修改宏按键引脚对应时钟KEYx_GPIO_CLK_ENABLE()3、修改按键编码枚举:KeyCode_EnumDef4、修改按键端口及引脚号变量数组Key_gpioPort[]、Key_gpioPin[];端口和引脚需相对应,第一个为按键05、修改按键引脚初始电平状态值KeyInitStatus[]6、主函数调用按键初始化函数Key_Init()7、1ms调用1次扫描函数Key_Scan()8、修改按键长按、短按执行函数Key_LongPressAction()、Key_Action() **********************************************************************/ #include Key_Driver.h#define LongPressThr 2000//长按LongPressThr毫秒标为长按按键动作 #define LongPressInc 500//长按LongPressInc毫秒执行一次长按动作函数#define KEY_NUM 4//按键个数 #define KEY0_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() #define KEY1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() #define KEY2_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE() #define KEY3_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()typedef enum {eKeyCode0 0,eKeyCode1 1,eKeyCode2 2,eKeyCode3 3 }KeyCode_EnumDef;//按键编码static GPIO_TypeDef* Key_gpioPort[KEY_NUM] {GPIOE,GPIOE,GPIOE,GPIOA};//按键引脚对应端口key0-key static uint16_t Key_gpioPin[KEY_NUM] {GPIO_PIN_4,GPIO_PIN_3,GPIO_PIN_2,GPIO_PIN_0};//按键引脚对应引脚号key0-key static uint8_t KeyInitStatus[KEY_NUM] {1,1,1,0};//按键引脚初始电平状态0--低电平,1--高电平 static uint8_t KeyReset 1;//无需用户更改static void Key_LongPressAction(KeyCode_EnumDef key,uint32_t DownTime); static void Key_Action(KeyCode_EnumDef key);/**************************************************** function:按键初始化(无需用户修改) param:void return:void date:2023.2.15 note: ****************************************************/ void Key_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};KEY0_GPIO_CLK_ENABLE();KEY1_GPIO_CLK_ENABLE();KEY2_GPIO_CLK_ENABLE();KEY3_GPIO_CLK_ENABLE();//外设引脚初始化GPIO_InitStruct.Mode GPIO_MODE_INPUT;for(uint8_t i 0;i KEY_NUM;i){GPIO_InitStruct.Pull KeyInitStatus[i]?GPIO_PULLUP:GPIO_PULLDOWN;GPIO_InitStruct.Pin Key_gpioPin[i];HAL_GPIO_Init(Key_gpioPort[i], GPIO_InitStruct);}KeyReset 1; }/****************************** function:按键扫描函数(无需用户修改) param:void return:void date:2023.2.15 remark:需在定时中断中调用推荐调用间隔1ms长按和短按分为两种按下不放执行长按但是弹起时不予执行短按函数 ******************************/ void Key_Scan(void) {static uint8_t keybuf[KEY_NUM] {0xFF};//按键扫描缓冲区赋值static uint8_t KeySta[KEY_NUM] {1};//全部矩阵按键的当前状态static uint8_t backup[KEY_NUM] {1};//按键值备份保存前一次的值static uint32_t KeyDownTime[KEY_NUM] {0};//长按累计时间static uint32_t KeyDownThr[KEY_NUM] {LongPressThr};static uint8_t KeyDownFlag[KEY_NUM] {0};uint8_t i 0,pinSta 0;if(KeyReset){KeyReset 0;for(i 0;i KEY_NUM;i){keybuf[i] 0xFF;KeySta[i] 1;backup[i] 1;KeyDownTime[i] 0;KeyDownThr[i] LongPressThr;KeyDownFlag[i] 0;}}//将按键值移入缓冲区for(i0;i KEY_NUM;i){pinSta (uint8_t)HAL_GPIO_ReadPin(Key_gpioPort[i],Key_gpioPin[i]);if(!KeyInitStatus[i]){pinSta pinSta?0:1;}keybuf[i] (keybuf[i] 1) | pinSta;}//消抖后更新按键状态for (i0; i KEY_NUM; i){if((keybuf[i] 0x0F) 0x00){KeySta[i] 0;}//连续4次扫描值为0即4ms内都是按下状态时可认为按键已稳定的按下else if((keybuf[i] 0x0F) 0x0F){KeySta[i] 1;}//连续4次扫描值为1即4*4ms内都是弹起状态时可认为按键已稳定的弹起}for(i0; i KEY_NUM; i)//循环检测按键{if(KeySta[i] 0)//长按按键{KeyDownTime[i] 1;if(KeyDownTime[i] KeyDownThr[i]){KeyDownFlag[i] 1; //长按标志KeyDownThr[i] LongPressInc; //时间阈值增加LongPressInc毫秒以准备下次执行Key_LongPressAction((KeyCode_EnumDef)i,KeyDownTime[i]); //调用长按执行函数}}//按键弹起 if(backup[i] ! KeySta[i])//检测按键动作{if(backup[i] ! 1)//按键按下时执行动作{if(KeyDownFlag[i] 0)//长按弹起避免重复执行 {Key_Action((KeyCode_EnumDef )i); //调用按键动作函数}}backup[i] KeySta[i]; //刷新前一次的备份值}if(KeySta[i]) {KeyDownFlag[i] 0; //长按标志KeyDownTime[i] 0; //累加时间清零KeyDownThr[i] LongPressThr;//恢复阈值} } }/****************************** function:长按按键动作函数 param:key-按键键码 return:void date:2023.2.15 remark:void ******************************/ static void Key_LongPressAction(KeyCode_EnumDef key,uint32_t DownTime) {printf(Key%d:%d\r\n,key,DownTime);switch(key){case eKeyCode0:{}break;case eKeyCode1:{}break;case eKeyCode2:{}break;case eKeyCode3:{}break;} }/****************************** function:短按按键动作函数 param:key-按键键码 return:void date:2023.2.16 remark:void ******************************/ static void Key_Action(KeyCode_EnumDef key) {printf(Action Key%d\r\n,key);switch(key){case eKeyCode0:{}break;case eKeyCode1:{}break;case eKeyCode2:{}break;case eKeyCode3:{}break;}} 2、使用方法 1、修改宏按键个数值KEY_NUM 2、修改宏按键引脚对应时钟KEYx_GPIO_CLK_ENABLE() 3、修改按键编码枚举:KeyCode_EnumDef 4、修改按键端口及引脚号变量数组Key_gpioPort[]、Key_gpioPin[];端口和引脚需相对应,第一个为按键0 5、修改按键引脚初始电平状态值KeyInitStatus[] 6、主函数调用按键初始化函数Key_Init() 7、1ms调用1次扫描函数Key_Scan() 8、修改按键长按、短按执行函数Key_LongPressAction()、Key_Action()测试效果 注意扫描时间1ms如觉得太长可以更久调用1次程序中会检测4次引脚的状态值如都为1或0则算为稳定状态 按键文件下载 链接https://pan.baidu.com/s/1sO_kFuJb6wtLiMlFbneFsA 提取码sun5
http://www.tj-hxxt.cn/news/225054.html

相关文章:

  • 网站搭建与网站建设wordpress post link
  • 手机平板购物网站的设计背景新余企业网站建设
  • 晋中做网站安装wordpress
  • 搭建网站什么意思网站页面链接怎么做的
  • 南京网站公司seo搜索引擎优化名词解释
  • Editplus做网站网络营销课程总结ppt
  • 网站标题字体免费logo设计网站推荐
  • wap网站价格济南网站建设专业
  • 外贸网站外链怎么做开发网站赚钱
  • 建设银行个人网站显示不了铁岭建设网站
  • 网盘做网站建筑培训网排行榜
  • 纸箱 技术支持 东莞网站建设新媒体包不包括公司网站的建设
  • 为什么网站打开老是提示建设中北京优质网站制作
  • 企业类网站模板平面设计师需要会什么软件
  • 做网站的教科书福州市住房和城乡建设部网站
  • 网站正在建设中 模版八年级学生做的简易网站
  • 南昌门户网站wordpress 备案号插件
  • 南京网站做的好的公司表白网站制作器
  • 高校校园网站建设培训班做网站的都是直男癌吗
  • 怎么做网站关键字用自己的话回答网络营销是什么
  • 胡歌做的穿衣搭配的网站百度网盟推广怎么做
  • 木门行业网站该怎么做电商网站业务流程图
  • asp化妆品网站可以免费下源码的网站
  • 公司网站与营销网站的区别电子商务发展现状与趋势
  • 建设银行管官方网站动画设计用什么软件
  • 什么平台可以做网站推广作品集如何制作
  • 南昌建设厅网站网站建设费用上海
  • 浏览不良网站会被网警抓吗什么软件可以看到街景
  • 大连淘宝网站建设搜索引擎优化工具
  • 18款禁用网站app破解版智加设计