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

单片机嵌入式按键库

kw_btn库说明

本库主要满足嵌入式按键需求,集成了常用的按键响应事件:高电平、低电平、上升沿、下降沿、单击、双击、长按键事件。可以裸机运行,也可以配合实时操作系统运行。
本库开源连接地址:连接


实现思路

本库采用C语言进行编程,方便移植,用户只需要调用2各函数即可使用。

  1. 初始化:
    初始化需要实现按键触发响应回调和按键是否按下回调。
  2. 周期循环:
    周期循环仅需要实现周期调用即可。

主要接口函数如下:

项目函数功能
1kw_btnInit按键初始化,形参按键触发响应回调和按键是否按下回调
2kw_btnRun按键周期运行,运行周期ms
3kw_btnAllStatus返回所有按键状态,按位指示,最大指示32bit

主要变量结构体如下:

项目变量类型说明
1Btn_Trigger_e枚举BTN_T_NONE:未响应
BTN_T_RISING:上升沿
BTN_T_FALLING:下降沿
BTN_T_LOW:低电平
BTN_T_HIGH:高电平
BTN_T_CLICK:单击
BTN_T_DOUBLE:双击
BTN_T_LONGT:长时间按下
2_btnTriggerCB_t函数指针按键触发回调响应
3_btnIsPushCB_t函数指针按键是否按下
4Btn_Type_e枚举按键类型(最多32个)

主要宏定义(位于"kw_baseDrvCFG.h"):

项目定义说明
1BTN_RUN_TIME循环时间ms,默认10
2BTN_LONG_TIME长时间按键触发时间
3BTN_DOUBLE_TIME双击触发时间
4BTN_CLICK_TIME单击触发时间

调用示例

  1. 裸机程序:

    #include "kw_baseDrvCFG.h"static void triggerCB(Btn_Trigger_e t, Btn_Type_e btn)
    {printf("btn value: %d, trigger value: %d.\r\n", t, btn);
    }static bool isPushCB(Btn_Type_e btn)
    {if (btn == BTN_1){return true;}return false;
    }void main()
    {kw_btnInit(triggerCB, isPushCB);while (1){kw_btnRun(10);delay(10); // 延时10ms}
    }
  2. 操作系统程序:

    #include <os.h>
    #include "kw_baseDrvCFG.h"static void triggerCB(Btn_Trigger_e t, Btn_Type_e btn)
    {printf("btn value: %d, trigger value: %d.\r\n", t, btn);
    }static bool isPushCB(Btn_Type_e btn)
    {if (btn == BTN_1){return true;}return false;
    }void btn_threads(void* para)
    {kw_btnInit(triggerCB, isPushCB);while (1){kw_btnRun(10);os_delay(10); // 延时10ms}
    }

相关文章:

单片机嵌入式按键库

kw_btn库说明 本库主要满足嵌入式按键需求&#xff0c;集成了常用的按键响应事件&#xff1a;高电平、低电平、上升沿、下降沿、单击、双击、长按键事件。可以裸机运行&#xff0c;也可以配合实时操作系统运行。 本库开源连接地址&#xff1a;连接 实现思路 本库采用C语言进行…...

【A2A】管中窥豹,google源码python-demo介绍

前言 A2A&#xff08;Agent2Agent&#xff09;是 Google 推出的一项新协议&#xff0c;旨在解决多智能体&#xff08;Multi-Agent&#xff09;系统中跨平台、跨组织协作的难题。它为 AI 代理之间的通信、协作和任务分工提供了一个统一的标准&#xff0c;可以类比为网页世界的 H…...

004-nlohmann/json 快速认识-C++开源库108杰

了解 nlohmann/json 的特点&#xff1b;理解编程中 “数据战场”划分的概念&#xff1b;迅速上手多种方式构建一个JSON对象&#xff1b; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据&#xf…...

Matlab实现CNN-BiLSTM时间序列预测未来

Matlab实现CNN-BiLSTM时间序列预测未来 目录 Matlab实现CNN-BiLSTM时间序列预测未来效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-BiLSTM时间序列预测未来&#xff1b; 2.运行环境Matlab2023b及以上&#xff0c;data为数据集&#xff0c;单变量时间序…...

C语言| sizeof(array)占多少字节

C语言| 数组名作为函数参数 sizeof(数组名); 可以求出整个数组在内存中所占的字节数。 被调函数Array_Sum()中&#xff0c;数组array使用sizeof会得到多少&#xff1f; 实参数组a占32字节&#xff0c;实参a传给形参array&#xff0c;只占4字节。 原因如下&#xff1a; 数组名做…...

【文件系统—散列结构文件】

文章目录 一、实验目的实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解linux文件系统的内部技术&#xff0c;掌握linux与文件有关的系统调用命令&#xff0c;并在此基础上建立面向随机检索的散列结构文件&#xff1b;## 二、实验内容与设计思想 实验内容 1.设…...

World of Warcraft [CLASSIC][80][Deluyia] [Fragment of Val‘anyr]

瓦兰奈尔的碎片 [Fragment of Valanyr] 有时候下个班打个游戏&#xff0c;没想到套路也这么多&#xff0c;唉&#xff0c;何况现实生活&#xff0c;这一个片版本末期才1000G&#xff0c;30个&#xff0c;也就30000G&#xff0c;时光徽章等同月卡15000G&#xff0c;折合一下也就…...

数组和指针典型例题合集(一维数组、字符数组、二维数组)

1.一维数组 数组名的理解 数组名是数组首元素&#xff08;第一个元素&#xff09;的地址 但是有两个例外&#xff1a; 1.sizeof &#xff08;数组名&#xff09;—— 数组名表示整个数组&#xff0c;就算的是整个数组的大小&#xff0c;单位是字节。 2.&数组名 —— 数…...

地级市-机器人、人工智能等未来产业水平(2009-2023年)-社科数据

地级市-机器人、人工智能等未来产业水平&#xff08;2009-2023年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90623814 https://download.csdn.net/download/paofuluolijiang/90623814 此数据集统计了2009-2023年全国地级市在机器人、人工智能等…...

epub格式转txt格式工具,txt批量转PDF

epub格式转txt格式工具&#xff0c;功能如图&#xff1a; txt格式批量转PDF 参考原文&#xff1a;epub格式转txt格式工具&#xff0c;txt批量转PDF 轻轻一点就关注, 好运连连挡不住&#xff0c;点个关注吧。...

电赛经验分享——模块篇

1、前言 打算在这一个专栏中&#xff0c;分享一些本科控制题电赛期间的经验&#xff0c;和大家共同探讨&#xff0c;也希望能帮助刚刚参加电赛的同学&#xff0c;了解一些基本的知识。一些见解和看法可能不同或有错误&#xff0c;欢迎批评指正。 在本文中&#xff0c;主要介绍笔…...

前端面试宝典---JavaScript import 与 Node.js require 的区别

import 和 require 来自不同的规范&#xff1a; import 是 ES6&#xff08;ECMAScript 2015&#xff09;模块系统的一部分&#xff0c;是 JavaScript 语言的标准语法 require 是 CommonJS 规范的一部分&#xff0c;最初为 Node.js 环境设计 加载方式&#xff1a; require() …...

JVM之内存管理(一)

部分内容来源&#xff1a;JavaGuide二哥Java 图解JVM内存结构 内存管理快速复习 栈帧&#xff1a;局部变量表&#xff0c;动态链接&#xff08;符号引用转为真实引用&#xff09;&#xff0c;操作数栈&#xff08;存储中间结算结果&#xff09;&#xff0c;方法返回地址 运行时…...

鸿蒙编译boost整合linux跨平台应用

openharmony deveco 4.1支持armeabi-v7a deveco 5.0后不支持arm32位系统 boost编译 使用deveco的写cmake集成boost boost使用1.88的最新版本&#xff0c;带cmake工具链 https://github.com/boostorg/boost.git boost的源码都在sub_module中 deveco 4.1的版本sdk最高到9&am…...

rabbitMQ消息问题与解决

rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计 1.消息顺序性 溯源&#xff1a; 消息队列中的若干消息如果是对同一个数据进行操作&#xff0c;这些操作具有前后的关系&#xff0c;必须要按前后的顺序执行&#xff0c;否则就会造成数据异常…...

Java SE(10)——抽象类接口

1.抽象类 1.1 概念 在之前讲Java SE(6)——类和对象&#xff08;一&#xff09;的时候说过&#xff0c;所有的对象都可以通过类来抽象。但是反过来&#xff0c;并不是说所有的类都是用来抽象一个具体的对象。如果一个类本身没有足够的信息来描述一个具体的对象&#xff0c;而…...

MySQL数据库故障排查与解决方案

一、故障排查流程图 #mermaid-svg-hF8hhP2lrqWDbNhV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hF8hhP2lrqWDbNhV .error-icon{fill:#552222;}#mermaid-svg-hF8hhP2lrqWDbNhV .error-text{fill:#552222;stroke:…...

学习threejs,使用Physijs物理引擎

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Physijs 物理引擎1.1.1 ☘️…...

allure生成测试报告(搭配Pytest、allure-pytest)

文章目录 前言allure简介allure安装软件下载安装配置环境变量安装成功验证 allure运行流程allure装饰器函数基本说明装饰器函数使用allure.attach 命令行运行利用allure-pytest生成中间结果json 查看测试报告总览页面每个tab页的说明类别页面测试套图表页面时间刻度功能页面包 …...

龙虎榜——20250509

上证指数今天缩量&#xff0c;整体跌多涨少&#xff0c;走势处于日线短期的高位~ 深证指数今天缩量小级别震荡&#xff0c;大盘股表现更好~ 2025年5月9日龙虎榜行业方向分析 一、核心行业方向 军工航天 • 代表个股&#xff1a;航天南湖、天箭科技、襄阳轴承。 • 驱动逻辑…...

操作系统的初步了解

目录 引言&#xff1a;什么是操作系统&#xff1f; 一、设计操作系统的目的 二、操作系统是做什么的&#xff1a; 操作系统主要有四大核心任务&#xff1a; 1. 管理硬件 2. 运行软件 3. 存储数据 4. 提供用户界面 如何理解操作系统的管理呢&#xff1f; 1. 什么是操作…...

拆分sql数据,(shop_backup)sql文档过大(>5G)

执行表结构 sed -n /^-- Table structure/,/^-- Dumping data/p shop_backup.sql > structure.sql mysql -u root -p shop < structure.sql 执行数据 awk /^INSERT INTO/{if(count%1000001) {file"data_part_"i".sql"}; print > file} shop_bac…...

软件工程之软件项目管理深度解析

前文基础&#xff1a; 1.软件工程学概述&#xff1a;软件工程学概述-CSDN博客 2.软件过程深度解析&#xff1a;软件过程深度解析-CSDN博客 3.软件工程之需求分析涉及的图与工具&#xff1a;软件工程之需求分析涉及的图与工具-CSDN博客 4.软件工程之形式化说明技术深度解…...

基于Boost库、Jsoncpp、cppjieba、cpp-httplib等构建Boost搜索引擎

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;项目 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 项目背景技术栈和项目环境正排索引和倒排索引数据去标签与清洗下载数据源去标签 建立索引构建正排索引构建倒排索引 建立搜索引擎h…...

Qt 通过控件按钮实现hello world + 命名规范(7)

文章目录 使用编辑框来完成 hello world通过编辑图形化界面方式通过纯代码方式 通过按钮的方式来创建 hello world通过编辑图形化界面方式通过纯代码方式 总结Qt Creator中的快捷键如何使用文档命名规范 简介&#xff1a;这篇文章着重点并不在于创建hello world程序&#xff0c…...

JAVA继承中变量和方法的存储和方法中访问变量的顺序

一、变量归属与内存位置 static 变量&#xff1a;属于类&#xff0c;只存在一份&#xff0c;保存在方法区&#xff08;或元空间&#xff09;。 实例变量&#xff08;非static&#xff09;&#xff1a;属于对象&#xff0c;每个对象单独一份&#xff0c;保存在堆内存中。 二、…...

关于大数据的基础知识(二)——国内大数据产业链分布结构

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;二&a…...

【Python 字典(Dictionary)】

Python 中的字典&#xff08;Dictionary&#xff09;是最强大的键值对&#xff08;key-value&#xff09;数据结构&#xff0c;用于高效存储和访问数据。以下是字典的核心知识点&#xff1a; 一、基础特性 键值对存储&#xff1a;通过唯一键&#xff08;Key&#xff09;快速访…...

Linux 内核中的 security_sk_free:安全模块与 Socket 释放机制解析

引言 在 Linux 内核中,网络通信和进程间交互(IPC)的核心数据结构之一是 struct sock(即 socket)。其生命周期管理涉及复杂的资源分配与释放逻辑。本文聚焦于 security_sk_free 这一函数,探讨其作用、调用场景以及与安全模块的交互机制,并解答一个常见疑问:在单机间 TC…...

VBA -- 学习Day4

数组 创建数组&#xff1a; Dim 数组名&#xff08;数组元素上下角标&#xff09;[As 元素类型] eg. Dim MyArray (1 To 3) As Integer 注意&#xff1a;1.如果不指定元素类型&#xff0c;则是Variant类型 向数组赋值&#xff1a; eg. MyArray(1) 100 MyArray(2) 200…...