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

软件设计 —— 检测按键单击、多击、长按或组合动作

目 录

  • 按键单一动作识别
  • 按键组合动作识别


按键单一动作识别

带有按键的作品设计时,按键动作检测是必不可少的,如何判断按键是单击、双击、三击和长按动作呢?

1、定时器定时一个10ms周期
2、把按键检测函数放到这个周期内执行,即10ms执行一次该函数

函数代码参考(已验证):


#define KEY_IO_STATUS   (P11) //按下为LOW#define CONFIG_KEY_2S_PRESS_CNT     (200)#define EVENT_UI_TRIPLE_CLICK	   (1 << 4)
#define EVENT_UI_DOUBLE_CLICK	   (1 << 3)
#define EVENT_UI_KEY_CLICK         (1 << 2)void key_handle_10ms(void)
{static uint16_t key_0_pressed_cnt = 0;static bool key_prev_status = 0, key_is_pressing = 0, key_curt_status = 0;static uint8_t key_clik_cnt = 0, key_continue_flag = 0, key_interval_timer = 0;key_curt_status = KEY_IO_STATUS;//read status of key gpioif (!(key_prev_status ^ key_curt_status)){if (key_prev_status == 0){//上次为0,本次为0key_is_pressing = true;//按键按下} else {key_is_pressing = false;}}else {key_prev_status = key_curt_status;//状态不同时才更新}if (key_is_pressing){//按下时key_interval_timer = 0;key_0_pressed_cnt++;//时长计数} else {//松开后判断按下时长if ((key_0_pressed_cnt < CONFIG_KEY_2S_PRESS_CNT) && (key_0_pressed_cnt > 3)) {//增大key_0_pressed_cnt最小判断值,防误按if (key_continue_flag){if (++key_clik_cnt >= 4){key_continue_flag = 0;key_clik_cnt = 0;}}else{key_continue_flag = 1;key_clik_cnt = 1;}}key_0_pressed_cnt = 0;}if (key_continue_flag){if (key_interval_timer++ >= 30){key_continue_flag = 0;key_interval_timer = 0;if (key_clik_cnt == 1){key_clik_cnt = 0;event_set_ui(EVENT_UI_KEY_CLICK);printf("Key single click\r\n");}else if (key_clik_cnt == 2){key_clik_cnt = 0;event_set_ui(EVENT_UI_DOUBLE_CLICK);printf("Key double click\r\n");}else if (key_clik_cnt == 3){key_clik_cnt = 0;event_set_ui(EVENT_UI_TRIPLE_CLICK);printf("Key triple click\r\n");}			}}else{key_interval_timer = 0;key_clik_cnt = 0;}if (key_0_pressed_cnt > CONFIG_KEY_2S_PRESS_CNT){event_set_ui(EVENT_UI_KEY_TWS_PAR_PRESS);key_0_pressed_cnt = 0;printf("Key long hold\r\n");}
}

按键组合动作识别

待补充…

相关文章:

软件设计 —— 检测按键单击、多击、长按或组合动作

目 录 按键单一动作识别按键组合动作识别 按键单一动作识别 带有按键的作品设计时&#xff0c;按键动作检测是必不可少的&#xff0c;如何判断按键是单击、双击、三击和长按动作呢&#xff1f; 1、定时器定时一个10ms周期 2、把按键检测函数放到这个周期内执行&#xff0c;即…...

【GPT】主要影响代谢的因素

代谢的快慢受到多种因素的影响&#xff0c;包括遗传、生活习惯和健康状况等。以下是主要影响代谢的因素&#xff1a; 1. 年龄 影响&#xff1a;年龄增长会导致基础代谢率&#xff08;BMR&#xff09;逐渐降低&#xff0c;这是因为随着年龄增加&#xff0c;肌肉量减少&#xff…...

LLM Agents can Autonomously Hack Websites 论文阅读

paper:LLM Agents can Autonomously Hack Websites abstract:近年来,大型语言模型(llm)已经变得越来越有能力,现在可以与工具交互(例如,调用函数),读取文档,并递归地调用自己。因此,这些llm现在可以作为代理自主运行。随着这些代理能力的提高,最近的工作推测了LLM代…...

STM32标准库-FLASH

FLASH模仿EEPROM STM32本身没有自带EEPROM&#xff0c;但是自带了FLASH存储器。 STM32F103ZET6自带 1M字节的FLASH空间&#xff0c;和 128K64K的SRAM空间。 STM32F4 的 SPI 功能很强大&#xff0c;SPI 时钟最高可以到 37.5Mhz&#xff0c;支持 DMA&#xff0c;可以配置为 SPI协…...

【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法

ID3&#xff08;Iterative Dichotomiser 3&#xff09;是决策树的一种构造算法&#xff0c;由 Ross Quinlan 在 1986 年提出。它主要用于分类问题&#xff0c;通过信息增益选择特征来构建决策树。ID3 假设数据是离散型特征&#xff0c;且不支持连续型数据。 1. 核心思想 划分标…...

nginx配置http及https

nginx配置http及https 1.动静分离2.负载均衡3.配置https4.请求重定向5.常用参数配置介绍 现在日常工作中的项目大多数都是采用前后端分离&#xff0c;就用到了nginx进行反向代理、处理静态资源等&#xff1b;因此&#xff0c;记录整理了nginx一些常用的配置&#xff1b; 1.动静…...

威联通-001 手机相册备份

文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段&#xff1a;1.Qfile Pro和2.Qsync Pro&#xff0c;实践使用中存在一些区别&#xff0c;针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…...

柔性数组详解+代码展示

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…...

【oracle数据库提示oracle initialization or shutdown in process】

问题如下截图&#xff1a; 解决方案&#xff1a; 1.进入sqlplus&#xff0c;下图中红圈即处理方式 备注&#xff1a;redo03.log是数据库路径“E:\app\Administrator\oradata\MKDB3D\”下最新的归档日志文件 2.alter database open resetlogs 3.netmanager测试登录是否成功&am…...

面试题-RocketMQ的基本架构、支持的消息模式、如何保证消息的可靠传输

相关问题 1、RocketMQ的基本架构是怎样的&#xff1f;请简述各组件的作用。 2、RocketMQ支持哪几种消息模式&#xff08;如点对点、发布/订阅&#xff09;&#xff1f;请简要说明它们的区别。 3、如何使用Java客户端实现一个简单的消息生产者和消费者&#xff1f; 4、RocketMQ…...

VUE脚手架练习

脚手架安装的问题&#xff1a; 1.安装node.js,配置环境变量,cmd输入node -v和npm -v可以看到版本号&#xff08;如果显示不是命令&#xff0c;确认环境变量是否配置成功&#xff0c;记得配置环境变量之后重新打开cmd&#xff0c;再去验证&#xff09; 2.在安装cnmp时&#xf…...

在Scala中栈的认识

package gjhs114import scala.collection.mutableobject fx {队列 // def main(args: Array[String]): Unit { // val q1 mutable.Queue(1) // q1.enqueue(2) // q1.enqueue(3) // q1.enqueue(4) // // println(q1.dequeue())//出队 1 // println(q1.dequ…...

小程序-基于java+SpringBoot+Vue的音乐播放器小程序设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…...

在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)

人无完人&#xff0c;持之以恒&#xff0c;方能见真我&#xff01;&#xff01;&#xff01; 共同进步&#xff01;&#xff01; 文章目录 一、strncpy函数的使用二、strncat函数的使用三、strncmp函数的使用四、strstr的使用和模拟实现五、strtok函数的使用六、strerror和perr…...

oracle to postgresql使用Oracle Golden Gate同步数据

参考 https://www.ktexperts.com/replication-to-gcp-postgresql-using-oracle-goldengate/ https://www.ktexperts.com/how-to-change-remote-trail-file-location-in-oracle-goldengate/...

基于Java Springboot校园导航微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse微信开发…...

【软件安全专题文档】系统安全设计规范,网络与信息系统安全设计规范,信息系统安全架构方案设计规范(Word原件)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件项目全周期文档清单部分文件概览&a…...

【青牛科技】SCU2N60E/SCD2N60E N沟道增强型功率场效应晶体管采用Silicore先进的VDMOS技术生产

描述&#xff1a; 这些N沟道增强型功率场效应晶体管采用Silicore先进的VDMOS技术生产&#xff0c;为设计人员提供了卓越的开关性能、坚固的器件设计、低导通电阻和成本效益。 特点&#xff1a; 在VGS10V时&#xff0c;600V&#xff0c;2.0A&#xff0c;Rdson4.5Ω&#xff08…...

常见限流算法介绍 和 Spring Cloud Sentinel使用方式

sentinel 限流及熔断 为什么要限流呢&#xff1f;对于一些突发流量&#xff0c;如双11大促&#xff0c;甚至恶意攻击&#xff0c;这时系统的访问量远远超出系统的承受能力&#xff0c;如果不做任何保护措施&#xff0c; 服务器资源会耗尽&#xff0c;进而系统不可用。 限流就…...

工业齐套管理虚拟现实仿真模拟软件

工业齐套管理虚拟现实仿真模拟软件是与法国最大的汽车制造商合作开发的一款虚拟现实仿真模拟软件&#xff0c;借助身临其境的虚拟现实环境&#xff0c;无需停止生产线&#xff0c;即可模拟仓库和提货区域。 工业齐套管理虚拟现实仿真模拟软件不仅适用于汽车工业&#xff0c;安全…...

HarmonyOS(60)性能优化之状态管理最佳实践

状态管理最佳实践 1、避免在循环中访问状态变量1.1 反例1.2 正例 2、避免不必要的状态变量的使用3、建议使用临时变量替换状态变量3.1 反例3.2 正例 4、参考资料 1、避免在循环中访问状态变量 在应用开发中&#xff0c;应避免在循环逻辑中频繁读取状态变量&#xff0c;而是应该…...

Qt5语法的connect指定多个重载信号槽函数中的具体某一个

Qt5新语法的connect函数&#xff0c;使用起来更加简洁明了&#xff0c;但如果信号槽有同名的多个重载函数&#xff0c;只用类名和函数名就无法绑定&#xff0c;这时&#xff0c;可以使用qOverload来指定参数类型&#xff0c;例如&#xff1a; connect(ui->comboBox, qOverlo…...

Mysql远程工具Navicat Premium连接报错1130、2003解决方案

这里写自定义目录标题 1130报错&#xff1a;![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/107d09a6fc324a46b922bf65cab81c58.png)2003报错&#xff1a; 1130报错&#xff1a; 原因&#xff1a; 连接异常 1130&#xff0c;没有远程登录权限。 解决方案&#xff…...

ShardingSphere介绍

1. ShardingSphere简单介绍 ShardingSphere是一款目前业内比较流行的分库分表框架&#xff0c;到现在为止有接近十年的开发历程了&#xff0c;其 已经不仅仅只是⽤来做分库分表&#xff0c;⽽是形成了⼀个围绕 分库分表核⼼的技术⽣态。他的核⼼功能已经包括了数据分⽚、分布式…...

操作系统 | 学习笔记 | 王道 | 2.2处理机调度

2.2 处理机调度 文章目录 2.2 处理机调度2.2.1 调度的概念2.2.2 调度的目标2.2.3 调度的实现2.2.4 典型的调度算法错题总结&#xff1a; 2.2.1 调度的概念 调度的基本概念 处理机调度是对处理机进行分配&#xff0c;即从就绪队列中按照一定的算法&#xff08;公平、高效的原则&…...

我们项目要升级到flutter架构的几点原因

一、探索 Flutter打造卓越移动应用的新时代框架 在移动应用开发的世界里&#xff0c;Flutter已经成为了一个炙手可热的话题。诞生于Google的怀抱&#xff0c;Flutter以其独特的优势和理念&#xff0c;正在引领一场全球范围内的应用开发 ** 。本文将深入探讨Flutter项目的特点、…...

Solidity开发智能合约

05-Solidity开发智能合约 0 Solidity和智能合约 Solidity开发可运行的智能合约步骤&#xff1a; 源代码通过编译成字节码&#xff08;Bytecode&#xff09;&#xff0c;同时会产生二进制接口规范&#xff08;ABI&#xff09; 通过交易将字节码部署到以太坊网络&#xff0c;部署…...

bind实验

服务端 查看域名 [rootclient yum.repos.d]# hostname client 设置域名 [rootclient yum.repos.d]# hostnamectl set-hostname dns1.openlab.edu [rootclient yum.repos.d]# cd [rootclient ~]# hostname dns1.openlab.edu 安装bind包 [rootclient ~]# yum install bind -y…...

ARM架构下安装新版docker及docker-compose

一、常见CPU 架构&#xff1a; 二、环境信息 CPU架构操作系统配置HUAWEI Kunpeng 920 5220 aarch64openEuler 22.03 (LTS-SP3)64C128g15T 三、安装docker 3.1 二进制包下载 docker-ce 社区下载地址&#xff1a; wget https://mirrors.nju.edu.cn/docker-ce/linux/static/s…...

自锁/非自锁开关原理笔记

前言&#xff1a;编写不易&#xff0c;请勿搬运&#xff0c;感谢理解&#xff0c;仅供学习。 开关介绍 6指针开关&#xff0c;这种开关分为自锁和非自锁开关&#xff0c;自锁开关有两种状态&#xff0c;按下和松开的状态&#xff0c;非自锁开关在按下过后&#xff0c;按键会复…...

基于SpringBoot+Vue的论坛网站-无偿分享 (附源码+LW+调试)

目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 研究目的 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 概述 7.2 系统流程和逻辑 7.3 系统结构 8. 数据库设计 8.1 数据库ER图 &#xff08;1&#xff09;问题反…...

基于SSM的博客系统+LW参考示例

1项目介绍 系统角色&#xff1a;管理员、普通用户功能模块&#xff1a;管理员&#xff08;用户管理&#xff0c;博文分类管理&#xff0c;博文信息管理&#xff0c;话题分类管理&#xff0c;热议话题管理&#xff0c;私信管理&#xff0c;敏感词管理&#xff0c;系统管理等&am…...

[241129] Docker Desktop 4.36 发布:企业级管理功能、WSL 2 增强 | Smile v4.0.0 发布

目录 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强Smile v4.0.0 发布&#xff01;Java 机器学习库迎来重大升级 Docker Desktop 4.36 发布&#xff1a;企业级管理功能、WSL 2 和 ECI 增强 Docker Desktop 4.36 带来了强大的更新&#xff0c;简化了…...

webpack5开发环境、生产环境配置 (三)

开发环境&#xff1a;就是我们开发代码时使用的模式。 这个模式我们做两件事情&#xff1a; 1、编译代码&#xff0c;使浏览器能识别运行 2、代码质量检查&#xff0c;树立代码规范 生产环境&#xff1a;开发完成代码后&#xff0c;我们需要得到代码将来部署上线。 这个模式…...

一次Kafka启动失败引出的问题

背景 Some time&#xff0c;有个现场童鞋说咱的Kafka实例有个broker一直crash&#xff0c;还截图给我看了&#xff0c;大致是Kafka启动加载topic分区日志文件的时候&#xff0c;然后就没了&#xff0c;连个WARN都没有。当然&#xff0c;光看这个截图咱啥都不知道&#xff0c;因…...

[Linux] 进程间通信——匿名管道命名管道

标题&#xff1a;[Linux] 进程间通信——匿名管道&&命名管道 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、进程间通信 二、进程间通信的方案——匿名管道 &#xff08;1&#xff09;匿名管道的原理 &#xff08;2&#xff09;使用匿名管道 三、进…...

人机交互中的状态交互、趋势交互

在人机交互中&#xff0c; 状态交互 和 趋势交互 是两种重要的交互方式&#xff0c;它们分别涉及到用户与系统之间不同的交互模型和机制。 1. 状态交互 状态交互主要聚焦于用户与系统之间的状态转换及其反馈机制。在这种交互模式下&#xff0c;系统会根据用户的输入或行为发生状…...

基于Java Springboot房屋租赁App且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…...

golang的wails框架在macos下的问题

1、前言 之前练手写了格调用ollama api的web应用&#xff0c;想找个容器打包下&#xff0c;于是找到wails来打包&#xff0c;windows下都是很正常的&#xff0c;因为就是普通的http调用&#xff0c;也没遇到cors跨域问题&#xff0c;但是到了macos下使用wails dev命令启动的客户…...

编程设计模式助记顺口溜

1、顺口溜 创建型&#xff0c;工厂多&#xff0c;单例建对象&#xff0c;抽象工厂做。建造者分步做&#xff0c;原型克隆最不愁。 结构型&#xff0c;适配器&#xff0c;桥接组合都不错&#xff0c;装饰外观飞享元&#xff0c;代理再添一把火。 行为型&#xff0c;责任链&…...

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议&#xff1f; 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介&#xff1a;本文章主要是演示如何用java代码以及TCP协议实现网络通信&#xff0c;实…...

mybatis-plus 对于属性为null字段不更新

MyBatis-Plus 默认情况下会根据字段的值是否为 null 来决定是否生成对应的 UPDATE 语句。这是由 更新策略 决定的&#xff0c;默认的行为是 忽略 null 值&#xff0c;即如果字段值为 null&#xff0c;该字段将不会出现在 UPDATE 语句中。 默认行为分析 MyBatis-Plus 默认的 Fi…...

GAGAvatar: Generalizable and Animatable Gaussian Head Avatar 学习笔记

1 Overall GAGAvatar&#xff08;Generalizable and Animatable Gaussian Avatar&#xff09;&#xff0c;一种面向单张图片驱动的可动画化头部头像重建的方法&#xff0c;解决了现有方法在渲染效率和泛化能力上的局限。 旋转参数 现有方法的局限性&#xff1a; 基于NeRF的方…...

《数据挖掘:概念、模型、方法与算法(第三版)》

嘿&#xff0c;数据挖掘的小伙伴们&#xff01;今天我要给你们介绍一本超级实用的书——《数据挖掘&#xff1a;概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作&#xff0c;由该领域的知名专家编写&#xff0c;系统性地介绍了在高维数据空间中分析和提取大量…...

springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成

前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中&#xff0c;我们完成订单的挂单和取单功能&#xff0c;今天我们完成购物车关联服务人员&#xff0c;用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…...

lua闭包Upvalue

闭包 lua任何函数都是闭包&#xff0c;闭包至少带1个upValue&#xff1b; CClosure是使用Lua提供的lua_pushcclosure这个C-Api加入到虚拟栈中的C函数&#xff0c;它是对LClosure的一种C模拟 如string.gmatch就是cclosure 定义&#xff1a; #define ClosureHeader \CommonH…...

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接&#xff1a; 二进制压缩包&#xff08;推荐&#xff09;: ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…...

深入探索Flax:一个用于构建神经网络的灵活和高效库

深入探索Flax&#xff1a;一个用于构建神经网络的灵活和高效库 在深度学习领域&#xff0c;TensorFlow 和 PyTorch 作为主流的框架&#xff0c;已被广泛使用。不过&#xff0c;Flax 作为一个较新的库&#xff0c;近年来得到了越来越多的关注。Flax 是一个由Google Research团队…...

vue项目中单独文件的js不存在this.$store?.state怎么办

在Vue项目中&#xff0c;如果你在单独的文件&#xff08;比如插件、工具函数等&#xff09;中遇到this.$store不存在的情况&#xff0c;这通常是因为this上下文不指向Vue实例&#xff0c;或者Vuex store没有被正确地注入到Vue实例中。以下是几种可能的解决方案&#xff1a; 确保…...

物联网客户端在线服务中心(客服功能/私聊/群聊/下发指令等功能)

一、界面 私聊功能&#xff08;下发通知类&#xff0c;一对多&#xff09;群聊&#xff08;点对点&#xff09;发送指令&#xff08;配合使用客户端&#xff0c;基于cefsharp做的物联网浏览器客户端&#xff09;修改远程参数配置&#xff08;直接保存到本地&#xff09;&#…...