CH592/CH582 触摸按键应用开发实例讲解
一. 触摸原理介绍
1. 触摸按键电容产生原理 一般应用中,可用手指与触摸板的电容模型简化代替人体与触摸板的电容模型,如图所示。
沁恒微电子的电容触摸按键检测方案主要有以下两种:
(1) 电流源充电方案。 低功耗蓝牙系列、通用系列 MCU 使用该方式。相同的充电时间,通过单片机内部 AD 采集触摸通道的电压值,与未按下时的值作差,再根据定义的阈值识别按键按下与抬起。 沁恒微电子在电流源充电方案的基础上提供驱动屏蔽和密集模式两种增强功能。增强功 能进一步提高了触摸按键的稳定性,使触摸按键具有防水特性。低功耗蓝牙系列 CH58x/C WCH 触摸应用指南 3 H59x 芯片支持驱动屏蔽技术,青稞 RISC-V 通用系列、Cortex-M 通用系列、低功耗蓝牙系 列支持密集模式。
(2) 松弛振荡方案。 单片机内部采集固定时间段的脉冲个数,与未按下时的个数作差,然后根据定于的阈值 识别按键的按下与抬起,如 CH554 系列。
更多更详细的硬件设计内容,大家可以参考官方提供的相关文档:WCH触摸应用指南
二、代码修改
我们的项目需要用到BLE功能,所以我们用的样例程序是官方提供的Touch_Key_with_ble
与触摸按键相关的代码文件主要有:
libCH59xTOUCH.a
wchtouch.h
Touch.c
Touch.h
TouchKey_CFG.h
app_tmos.c
app_tmos.h
peripheral_main.c
其中 libCH59xTOUCH.a 和 wchtouch.h为 WCH 提供的触摸库文件;Touch.c 和 Tou ch.h 为触摸库相关的操作,包括库初始化、触摸通道初始化、触发按键获取等;Touch Key_CFG.h 为 触摸库配置参数文件。
app_tmos.c、app_tmos.h、 peripheral_main.c 为应用层文件。其中 app_tmos.c、app_tmo s.h 与 BLE 配合工作,使用 tmos 进行管理、获取按键。
官方提供的样例程序可以直接使用,不过样例程序提供了12个触摸按键,但我们实际应用中通常不需要这么多触摸按键,接下来,我们来讲解如何修改。
1、TouchKey_CFG.h的修改:
(我们的项目使用了PA5、PA8两个触摸键)
typedef enum _TKY_QUEUE_ID
{
TKY_QUEUE_0 = 0,
TKY_QUEUE_1,
TKY_QUEUE_END
} TKY_QUEUE_ID;#define TKY_MAX_QUEUE_NUM TKY_QUEUE_END#define TKY_CHS_INIT \GEN_TKY_CH_INIT(TKY_QUEUE_0,1,3,3,0,3284,66,52),\GEN_TKY_CH_INIT(TKY_QUEUE_1,2,3,3,0,3600,67,54)
2、Touch.h的修改
typedef enum
{KID_K0 = 0,KID_K1
}KEY_ID_E;typedef enum
{KEY_NONE = 0, //0 表示按键事件 */KEY_0_DOWN, // 1键按下 KEY_0_UP, // 1键弹起 KEY_0_LONG, // 1键长按 KEY_1_DOWN, // 2键按下 KEY_1_UP, // 2键弹起 KEY_1_LONG // 2键长按 }KEY_ENUM;/* 按键FIFO用到变量 */
#define KEY_FIFO_SIZE (TKY_MAX_QUEUE_NUM * 8) //可根据使用环境和硬件需要进行修改*/
Touch.h在我们的项目中,其实可以不用修改 。
3、Touch.c 的修改
static const uint32_t TKY_Pin[TKY_MAX_QUEUE_NUM][2] = {{0x00, 0x00000020},//PA5,AIN1{0x00, 0x00000100}//PA8,AIN12
};pIsKeyDownFunc KeyDownFunc[12] =
{IsKeyDown1,IsKeyDown2
};#if 0
static uint8_t IsKeyDown3(void)
{if (keyData & 0x0004) return 1;else return 0;
}static uint8_t IsKeyDown4(void)
{if (keyData & 0x0008) return 1;else return 0;
}static uint8_t IsKeyDown5(void)
{if (keyData & 0x0010) return 1;else return 0;
}static uint8_t IsKeyDown6(void)
{if (keyData & 0x0020) return 1;else return 0;
}static uint8_t IsKeyDown7(void)
{if (keyData & 0x0040) return 1;else return 0;
}static uint8_t IsKeyDown8(void)
{if (keyData & 0x0080) return 1;else return 0;
}static uint8_t IsKeyDown9(void)
{if (keyData & 0x0100) return 1;else return 0;
}static uint8_t IsKeyDown10(void)
{if (keyData & 0x0200) return 1;else return 0;
}static uint8_t IsKeyDown11(void)
{if (keyData & 0x0400) return 1;else return 0;
}static uint8_t IsKeyDown12(void)
{if (keyData & 0x0800) return 1;else return 0;
}
#endif
4、app_tmos.c的修改
void tky_on_TMOS_dataProcess(void)
{uint8_t key_val = 0;key_val = touch_GetKey();if (key_val != 0x00){ //有触摸按键,增加相应的处理程序if (bleConnectState ){peripheralChar2Notify( &key_val, 1 );//将键值上报给上位机蓝牙}}
}
这个函数是读取触摸按键的键值,并判断是否有触摸按键,如果有,增加相应的处理程序,这部分程序与我们项目有关,不方便提供,大家可以自行增加相应的功能,比如简单控制LED。
完整工程请参考:CH592Ftouchkeywithble&RF资源-CSDN文库
写这篇文章,更多的意义是记录自己对官方提供的样例程序的 理解及修改的一些体会,毕竟我们的项目几乎只是在样例程序上略作修改,并增加了一些自己需要的功能,如此而已。如果能对大家有那怕一点点帮助,纯属意外之喜。
相关文章:
CH592/CH582 触摸按键应用开发实例讲解
一. 触摸原理介绍 1. 触摸按键电容产生原理 一般应用中,可用手指与触摸板的电容模型简化代替人体与触摸板的电容模型,如图所示。 沁恒微电子的电容触摸按键检测方案主要有以下两种: (1) 电流源充电方案。 低功耗蓝牙系列、通用系列 MCU 使…...
为什么选择有版权的答题pk小程序
选择有版权的答题PK小程序主要有以下原因: 一、避免法律风险 随着国家对知识产权保护力度的加大,使用无版权的答题PK小程序可能会引发侵权纠纷。一旦被原作者或版权方发现,使用者可能会面临法律诉讼,需要承担相应的法律责任&…...
Java生成微信小程序码及小程序短链接
使用wx-java-miniapp-spring-boot-starter 生成微信小程序码及小程序短链接 在pom.xml文件中引入依赖 <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-miniapp-spring-boot-starter</artifactId><version>4.7…...
从普查到防控:ArcGIS洪水灾害全流程分析技术实战——十大专题覆盖风险区划/淹没制图/水文分析/洪水分析/淹没分析/项目交流,攻克防洪决策数据瓶颈!
🔍 防范未然的关键一步:洪水灾害普查是筑牢防洪安全防线的基础。通过全面普查,可以精准掌握洪水灾害的分布、频率和影响范围,为后续的防洪规划、资源调配和应急响应提供详实的数据支持。这有助于提前识别潜在的高风险区域…...
Ubuntu安装SRS流媒体服务
通过网盘分享的文件:srs 链接: https://pan.baidu.com/s/1tdnxxUWh8edcSnXrQD1uLQ?pwd0000 提取码: 0000 官网地址:Build | SRS 将百度网盘提供的srs 和 conf 下载或上传到指定服务器 # 安装需要的依赖包 sudo apt install -y cmake tclsh unzip gcc…...
设计模式(行为型)解释器模式
定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这意味着我们能够针对特定领域的问题,构建一套专属的语言体系,并通过解释器对使用该语言描述的问题进行解析和处…...
海外独立站VUE3加载优化
主要有几个明显问题 1. 请求数量太多(139 requests) 网页请求了*大量 JS 文件*(都是 index-xxxx.js),而且每个文件都比较小。 每次建立请求都有 TCP 连接开销(特别是 HTTP/1.1),导…...
关于windows API 的键鼠可控可测
相关函数解释 GetAsyncKeyState 是 Windows API 中的一个函数,用于判断某个虚拟键是否被按下。GetAsyncKeyState(VK_ESCAPE) 专门用于检测 Esc 键的状态。下面为你详细介绍其用法: 函数原型 cpp SHORT GetAsyncKeyState( int vKey ); 参数 vKey&a…...
普发ASM392EUV检漏仪维修说明手测内容可目录
普发ASM392EUV检漏仪维修说明手测内容可目录...
Python pip下载包及依赖到指定文件夹
要使用pip下载包及其所有依赖到指定文件夹,请按照以下步骤操作: 步骤说明 使用pip download命令:该命令用于下载包及其依赖而不安装。指定目标目录:通过-d或--dest参数设置下载路径。确保包含依赖:默认情况下会下载依…...
DIFY 又跟新了,来到 1.3.0 版本,看正文
欢迎来到 1.3.0 版本!添加了各种巧妙的功能、修复了错误,并带来了一些新功能: 一、核心亮点: 结构化输出 1、LLM 节点新增JSON Schema编辑器,确保大语言模型能够返回符合预设格式的JSON数据。这一功能有助于提升数据…...
凸包问题 Graham 扫描算法 MATLAB
算法要解决的问题 Graham 扫描算法要解决的问题是在给定一组二维平面上的点集时,找出能够完全包含这些点的最小凸多边形,这个最小凸多边形就是这些点的凸包。在很多实际场景中,我们可能只关注一个点集的最外层边界,而凸包算法就可…...
es+kibana---集群部署
其实一般es要跑3个节点的,这样才能做高可用,处理并发大,但是我这里只是一个pod mkdir -p /stroe/data/es es搭建: #【拉取镜像】 #docker pull elasticsearch:6.8.7 #docker pull busybox:1.28 【导入镜像】 docker load -i es.…...
定时器的源码介绍与简单实现——多线程编程简单案例[多线程编程篇(5)]
目录 前言 什么是定时器 JAVA标准库中的定时器 而关于sched方法,请看源码: 为什么我们能知道"notify() 唤醒后台线程 TimerThread"? TimerThread 关键逻辑 第一步:加锁 queue,看有没有任务 第二步:取出最近要执行的任务 …...
SQL常用数据清洗语句
数据清洗:发现并纠正数据文件里的数据错误和不一致性,让数据达到分析要求的过程。 运用 SQL 进行数据清洗时,可借助多种语句和函数来处理数据中的缺失值、重复值、异常值以及格式错误等问题。 1. 处理缺失值 数据中某些变量的值为空的情况&…...
《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
在电商数据处理领域,高效获取并处理海量商品数据是企业实现精准运营、市场分析的重要基础。Go 语言凭借其出色的并发性能,成为开发高并发爬虫的理想选择。本文将介绍如何使用 Go 语言进行淘宝商品 API 实时采集,并构建 ETL(Extrac…...
大模型(LLMs)加速篇
当前优化模型最主要技术手段有哪些? 算法层面:蒸馏、量化软件层面:计算图优化、模型编译硬件层面:FP8(NVIDIA H系列GPU开始支持FP8,兼有fp16的稳定性和int8的速度) 推理加速框架有哪一些&#…...
Linux0.11引导启动程序:简略过程
引言 目标:是重写boot文件夹下面的引导文件,加入一些个人信息。语法:由于使用两个语法风格的汇编需要两个汇编器,有些麻烦,直接全都用GNU的 as(gas)进行编译。使用AT&T 语法的汇编语言程序。接下来先拜读同济大学赵…...
【JAVAFX】controller中反射调用@FXML的点击事件失败
场景 当前有一个controller中定义的事件如 FXMLvoid openZhengjieWindow(ActionEvent event) {System.out.println("zhengjie");}通过反射去调用 public void callMethodByString(String methodSuffix) {try {Method method this.getClass().getMethod("open&…...
人工智能数学基础(二):初等数学
在人工智能领域,初等数学知识是构建复杂模型的基石。本文将从函数、数列、排列组合与二项式定理、集合等方面进行讲解,并结合 Python 编程实现相关案例,帮助大家更好地理解和应用这些数学知识。资源绑定附上完整代码供读者参考学习࿰…...
opendds的配置
配置的使用 文档中说明有4种使用配置的方式: 环境变量 命令行参数(将覆盖环境变量中的配置) 配置文件(不会覆盖环境变量或命令行参数中的配置) 用户调用的 API(将覆盖现有配置) 这里对开发…...
mac 基于Docker安装minio
在 macOS 上基于 Docker 安装 MinIO 是一个高效且灵活的方案,尤其适合本地开发或测试环境。以下是详细的安装与配置步骤,结合了最佳实践和常见问题的解决方案: 一、安装 Docker Desktop 下载安装包 访问 Docker 官网,下载适用于 …...
Docker网络架构深度解析与技术实践
目录 第一章 Docker网络架构核心原理 1.1 容器网络模型(CNM)体系 1.2 网络命名空间隔离机制 1.3 虚拟网络设备对(veth) 1.4 网桥驱动模型 第二章 Docker网络模式深度剖析 2.1 Bridge模式(默认模式) …...
如何通过Google Chrome增强网页内容的安全性
在现代互联网环境中,网页安全问题时常困扰着用户。谷歌浏览器作为全球使用最广泛的浏览器之一,提供了多种方式帮助用户增强网页的安全性。以下是一些简单有效的方法,可以帮助用户提高浏览器的安全防护能力。 首先,谷歌浏览器自带了…...
劳动节ppt免费下载,劳动节ppt模板,劳动节课件
劳动节ppt免费下载,劳动节ppt模板,劳动节素材,学生,幼儿园课件:劳动节ppt_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...
应用在通信网络设备的爱普生晶振SG2016CBN
在数字化浪潮席卷全球的当下,通信网络已成为信息时代的核心基础设施,从 5G 基站的快速部署到数据中心的高效运转,从光纤网络的稳定传输到无线通信的流畅连接,每一个环节都对时钟信号的稳定性和精准性有着极高要求。一个高质量的时…...
STM32 RTC配置
一、什么是RTC? RTC,即实时时钟,是一种能持续运行并保持当前时间信息的电子装置。它常用于在设备断电的情况下依然能保持准确的年、月、日、时、分、秒信息。 与CPU核心时钟不同,RTC通常采用独立的低频晶振(如32.768…...
图像保边滤波之BEEPS滤波算法
目录 1 简介 2 算法原理 3 代码实现 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 参考 1 简介 BEEPS(Bias Elimination in Edge-Preserving Smoothing) 是一种基于偏微分方程(PDE)的边缘保留平滑滤波算法。它能够…...
使用OpenCV和dlib库进行人脸关键点定位
文章目录 引言一、环境准备二、代码实现解析1. 导入必要的库2. 加载图像和人脸检测器3. 加载关键点预测模型4. 检测并绘制关键点5. 显示结果 三、68个关键点的含义四、常见问题解决五、总结 引言 人脸关键点定位是计算机视觉中的一项基础任务,它在人脸识别、表情分…...
Transformer数学推导——Q27 证明时序注意力(Temporal Attention)在视频模型中的帧间依赖建模
该问题归类到Transformer架构问题集——注意力机制——跨模态与多模态。请参考LLM数学推导——Transformer架构问题集。 在视频理解任务中,捕捉帧与帧之间的时间依赖关系(如动作的连贯性、物体的运动轨迹)是核心挑战。时序注意力(…...
相机-IMU联合标定:相机标定
文章目录 📚简介💡标定方法🚀标定工具kalibr🚀标定数据录制🚀相机标定📚简介 在 VINS(Visual-Inertial Navigation System,视觉惯性导航系统) 中,相机标定 是确保视觉数据准确性和系统鲁棒性的关键步骤,其核心作用可总结为以下方面: 消除镜头畸变,提升特征…...
sevlet API
sevlet API API就是一组类和方法 HttpServlet 这是写servlet代码用到的核心的类,通过继承这个类,并重写其中的方法,让Tomcat去调用这里的逻辑. init:webapp被加载的时候,执行 destroy:webapp被销毁的时候(Tomcat结束)执行,进行一些收尾工作.但是这个方法不保证能够调用到!!…...
python程序设习题答案
第一章 1.在下列领域中,使用 Python 不可能实现的是( C ) A . Web 应用开发 B .科学计算 C .操作系统管理 D .游戏开发 2.Python程序文件的扩展名是( D )。 A.python B.pyt C.pt D.py 3&…...
[计算机科学#4]:二进制如何塑造数字世界(0和1的力量)
【核知坊】:释放青春想象,码动全新视野。 我们希望使用精简的信息传达知识的骨架,启发创造者开启创造之路!!! 内容摘要: 二进制是计算机世界的基石,数学是世界的…...
一种在使用Kaggle并遇上会话中断时强行保存数据的方法
问题:kaggle会话结束后,无法保存训练模型时记录的excel文件 解决方法:使用kaggle时,使用下面脚本可将保存到训练数据excel转为链接形式,从而在kaggle会话终止时也可以下载到该excel文件 import base64 import pandas …...
【人工智能agent】--dify搭建智能体和工作流
【人工智能agent】--docker本地部署dify教程-CSDN博客 上期讲到如何部署dify,然后进入页面: docker服务: 目录 1.基础设置 2.创建聊天助手 3.创建知识库应用 4.创建智能体 5.创建工作流 5.1.文档总结规划 5.2.爬取网页新闻 1.基础设…...
[4282]PHP跨境电商源码-多语言商城源码/支持代理+商家入驻+分销+等等众多功能/带详细安装
源码获取:[4282]PHP跨境电商源码-多语言商城源码/支持代理商家入驻分销等等众多功能/带详细安装云溪资源网_源码下载,小程序源码下载,网站源码下载,游戏源码下载云溪资源网_源码下载,小程序源码下载,网站源码下载,游戏源码下载...
MongoDB的增删改查操作
1.文档创建 首先要插入数据前,要先创建数据库,创建完之后建立集合,然后才能进行增删改查的步骤 切换(新建)数据库: use <db> db是指要创建数据库的名称 新建集合: db.createCollection(…...
TimDbg
晚上随意浏览,发现一个有趣的网站: TimDbg 调试器谎言:堆栈损坏 // TimDbg 2022.11的一篇很有趣,讲如何培养裸眼反汇编的能力,即培训心智模型,模式识别能力。 识别内存中的模式 // TimDbg 我是用edge浏…...
MySQL 表的约束(二)
文章目录 自增长唯一键外键 自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。 create …...
大数据应用开发和项目实战
Matplotlib的介绍 Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。 Matplotlib 可以用来绘制各种静态,动态,交互式的图表。比如说散点图、柱状图等等。 Matplotlib Pyplot plot(…...
OpenLayers矢量数据可视化高级技巧(进阶二)
1. 高级样式技术 矢量数据的样式直接影响可视化效果的表达能力和美观度。OpenLayers提供了丰富的样式API,通过组合和创新,可以实现各种复杂的视觉效果。 1.1 动态样式 // 根据属性值动态设置样式 const vectorLayer new ol.layer.Vector({source: ne…...
实用的java技术架构组件汇总
1.后端数据校验 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>校验注解 jakarta.validation-api 规范提供如下: size hibern…...
Rmarkdown输出为pdf的方法与问题解决
R 是一种在数据分析与统计计算领域广泛使用的编程语言。其关键优势之一是能够生成高质量的报告和文档,这些报告和文档可以使用 RMarkdown 轻松定制和更新。在本文中,我们将探讨使用 R 从 RMarkdown 文件生成.pdf 文件 1.生成方法 新建Rmarkdown…...
【超详细讲解】什么是序列化和反序列化?
目录 一、什么是序列化(Serialization)? 举个直观的例子 二、什么是反序列化(Deserialization)? 三、为什么需要序列化? 四、常见的序列化格式对比 五、序列化底层是怎么做的?…...
深入浅出JavaScript常见设计模式:从原理到实战(2)
深入浅出JavaScript常见设计模式:从原理到实战(2) 本文是深入浅出JavaScript常见设计模式:从原理到实战(1)的续集 设计模式是一种在特定情境下解决软件设计中常见问题的通用方案或模板。在特定的开发场景中使用特定的设计模式,可以提升代码质…...
MySQL 主从复制
数据的高可用性、读写分离以及数据备份是至关重要的需求。MySQL 作为一款广泛使用的开源关系型数据库,其主从复制功能为解决这些问题提供了有效的方案。本文将详细介绍 MySQL 主从复制的原理、搭建步骤以及实际应用。 一、MySQL 主从复制原理 1.1 基本概念 MySQL…...
小目标检测的集成融合论文阅读
摘要 小目标检测常因图像模糊和分辨率低而受到阻碍,这给小目标的精确检测和定位带来了重大挑战。此外,传统的特征提取方法往往难以捕捉到这些目标的有效表征,因为下采样和卷积操作会导致小目标细节的模糊化。为了解决这些问题,本研究提出了一种基于集成融合的方法,通过利…...
IP SSL证书常见问题:快速实现HTTPS加密
SSL证书作为实现HTTPS加密和身份验证的关键工具,不仅适用于域名,还能直接绑定IP地址,为IP通信提供安全保障。 一、什么是IP SSL证书? IP SSL证书(IP HTTPS证书)是一种专为IP地址设计的SSL/TLS证书…...
Scratch——第20课 辗转相除法/绳子算法
辗转相除法是用于求取最大公约数时需要用到的方法,它还有个名字称为绳子算法,这类题目只要理解辗转相处的原理即可拿下。 一、辗转相除法的基本原理 两个整数的最大公约数不变,当较大数减去较小数后,得到的差值与较小数的最大公…...