GD32F470_TTP224 4路 电容式 触摸开关 数字触摸传感器模块移植

2.8 TTP224触摸传感器
该模块是一个基于触摸检测IC(TTP223B)的电容式点动型触摸开关模块。常态下,模块输出低电平,模式为低功耗模式;当用手指触摸相应位置时,模块会输出高电平,模式切换为快速模式;当持续12秒没有触摸时,模式又切换为低功耗模式。可以将模块安装在非金属材料如塑料、玻璃的表面。也可以将薄薄的纸片(非金属)覆盖在模块的表面,直到触摸的位置正确,即可做成隐藏在墙壁、桌面等地方的按键。该模块可以让你免除常规按压型键的烦恼。

2.8.1 模块来源
采购链接:
TTP224 4路 电容式 触摸开关 数字触摸传感器模块
资料下载链接:
https://pan.baidu.com/s/1lBksfqx_dT4uIyABkHVm3Q
资料提取码:hj2n

2.8.2 规格参数
工作电压:2.4-5.5V
工作电流:2.5uA~9uA
模块尺寸:35x29 mm
最快响应时间:100Ms
控制方式:GOIO
管脚数量:6 Pin(2.54mm间距排针)
工作电流:2.5uA~9uA
模块尺寸:35x29 mm
最快响应时间:100Ms
控制方式:GOIO
管脚数量:6 Pin(2.54mm间距排针)

2.8.3 移植过程
我们的目标是在梁山派GD32F470上能够实现4路按键的触摸功能。首先要获取资料,查看数据手册应如何实现,再移植至我们的工程。
2.8.3.1 查看资料

触摸传感器立创·梁山派
OUT1PC1
OUT2PC2
OUT3PC3
OUT4PC4
GNDGND
VCC3V3

在这里插入图片描述
2.8.3.3 移植至工程
移植步骤中的导入.c和.h文件与上一节相同,只是将.c和.h文件更改为bsp_touchkey.c与bsp_touchkey.h。见2.2.3.3 移植至工程。这里不再过多讲述。移植完成后面修改相关代码。
在文件bsp_touchkey.c中,编写如下代码。

/********************************************************************************
  * 文 件 名: bsp_touchkey.c
  * 版 本 号: 初版
  * 修改作者: LC
  * 修改日期: 2023年04月06日
  * 功能介绍:          
  ******************************************************************************
  * 注意事项:
*********************************************************************************/

#include "bsp_touchkey.h"
#include "systick.h"
#include "bsp_usart.h"
#include "stdio.h"


/******************************************************************
 * 函 数 名 称:TTP224_GPIO_Init
 * 函 数 说 明:对电容式触摸芯片TTP224进行初始化
 * 函 数 形 参:无
 * 函 数 返 回:无
 * 作       者:LC
 * 备       注:无
******************************************************************/
void TTP224_GPIO_Init(void)
{
    /*  开启时钟  */
        rcu_periph_clock_enable(RCU_IN1);  
    rcu_periph_clock_enable(RCU_IN2);  
    rcu_periph_clock_enable(RCU_IN3);   
    rcu_periph_clock_enable(RCU_IN4);  
    
        /* 配置IN1 为输入模式 上拉模式 */
        gpio_mode_set(PORT_IN1,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_IN1);
        /* 配置IN2 为输入模式 上拉模式 */
        gpio_mode_set(PORT_IN2,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_IN2);
        /* 配置IN3 为输入模式 上拉模式 */
        gpio_mode_set(PORT_IN3,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_IN3);
        /* 配置IN4 为输入模式 上拉模式 */
        gpio_mode_set(PORT_IN4,GPIO_MODE_INPUT,GPIO_PUPD_PULLUP,GPIO_IN4);

}

/******************************************************************
 * 函 数 名 称:Key_IN1_Scanf
 * 函 数 说 明:返回触摸键1引脚电平状态
 * 函 数 形 参:无
 * 函 数 返 回:0=未检测到有触摸  1=检测到触摸
 * 作       者:LC
 * 备       注:无
******************************************************************/
char Key_IN1_Scanf(void)
{
    return KEY_IN1;
}
/******************************************************************
 * 函 数 名 称:Key_IN2_Scanf
 * 函 数 说 明:返回触摸键2引脚电平状态
 * 函 数 形 参:无
 * 函 数 返 回:0=未检测到有触摸  1=检测到触摸
 * 作       者:LC
 * 备       注:无
******************************************************************/

char Key_IN2_Scanf(void)
{
    return KEY_IN2;
}
/******************************************************************
 * 函 数 名 称:Key_IN3_Scanf
 * 函 数 说 明:返回触摸键3引脚电平状态
 * 函 数 形 参:无
 * 函 数 返 回:0=未检测到有触摸  1=检测到触摸
 * 作       者:LC
 * 备       注:无
******************************************************************/

char Key_IN3_Scanf(void)
{
    return KEY_IN3;
}
/******************************************************************
 * 函 数 名 称:Key_IN4_Scanf
 * 函 数 说 明:返回触摸键4引脚电平状态
 * 函 数 形 参:无
 * 函 数 返 回:0=未检测到有触摸  1=检测到触摸
 * 作       者:LC
 * 备       注:无
******************************************************************/
char Key_IN4_Scanf(void)
{
    return KEY_IN4;
}

在文件bsp_touchkey.h中,编写如下代码。

/********************************************************************************
  * 文 件 名: bsp_touchkey.h
  * 版 本 号: 初版
  * 修改作者: LC
  * 修改日期: 2023年04月06日
  * 功能介绍:          
  ******************************************************************************
  * 注意事项:
*********************************************************************************/

#ifndef _BSP_TOUCHKEY_H_
#define _BSP_TOUCHKEY_H_
 
#include "gd32f4xx.h"


#define RCU_IN1     RCU_GPIOC
#define PORT_IN1    GPIOC
#define GPIO_IN1    GPIO_PIN_1

#define RCU_IN2     RCU_GPIOC
#define PORT_IN2    GPIOC
#define GPIO_IN2    GPIO_PIN_2

#define RCU_IN3     RCU_GPIOC
#define PORT_IN3    GPIOC
#define GPIO_IN3    GPIO_PIN_3

#define RCU_IN4     RCU_GPIOC
#define PORT_IN4    GPIOC
#define GPIO_IN4    GPIO_PIN_4


#define KEY_IN1   gpio_input_bit_get(PORT_IN1, GPIO_IN1)
#define KEY_IN2   gpio_input_bit_get(PORT_IN2, GPIO_IN2)
#define KEY_IN3   gpio_input_bit_get(PORT_IN3, GPIO_IN3)
#define KEY_IN4   gpio_input_bit_get(PORT_IN4, GPIO_IN4)

void TTP224_GPIO_Init(void);//引脚初始化
char Key_IN1_Scanf(void);//触摸按键1的输入状态
char Key_IN2_Scanf(void);//触摸按键2的输入状态
char Key_IN3_Scanf(void);//触摸按键3的输入状态
char Key_IN4_Scanf(void);//触摸按键4的输入状态

#endif


2.8.4 移植验证
在自己工程中的main主函数中,编写如下。

/********************************************************************************
  * 文 件 名: main.c
  * 版 本 号: 初版
  * 修改作者: LC
  * 修改日期: 2023年04月06日
  * 功能介绍:          
  ******************************************************************************
  * 注意事项:
*********************************************************************************/


#include "gd32f4xx.h"
#include "systick.h"
#include "bsp_usart.h"
#include "bsp_touchkey.h"
#include "stdio.h"

int main(void)
{
    nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);  // 优先级分组
        systick_config();                //滴答定时器初始化 1ms

    usart_gpio_config(115200U);
    TTP224_GPIO_Init();
    printf("ttp224 demo start\r\n");
    while(1)
    {
        printf("Key_IN1=%d\r\n",Key_IN1_Scanf() );
        printf("Key_IN2=%d\r\n",Key_IN2_Scanf() );
        printf("Key_IN3=%d\r\n",Key_IN3_Scanf() );
        printf("Key_IN4=%d\r\n",Key_IN4_Scanf() );
        delay_1ms(200);
    }
}

移植现象:触摸2和3键,输出1;1和4键键不触摸,输出0。

在这里插入图片描述
移植成功示例,见文件2.8.4-1 。
文件2.8.4-1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/518502.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#智慧手麻系统源码 医院手术麻醉系统源码 支持三甲医院评级需求 可提供演示

C#智慧手麻系统源码 医院手术麻醉系统源码 支持三甲医院评级需求 可提供演示 手术麻醉管理系统是应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期,对病人进行全程跟踪与信息管理,自动集成病人HIS、LIS、RIS、PACS信息,采…

吃豆豆 经典的区间DP 好题典题

这里很巧妙的注意一点是,你最后要把所有的豆子都吃掉,所以你只要看你多增加的尽量的少就好了 然后维护一段区间,表示的是吃掉这段区间里面的所有豆子的最小代价,然后发现最后一个是左端点或者右端点 你吃一段新的区间的同时会把…

c++的学习之路:11、string(3)

昨天写string的时候没有说全,这里就开始接着讲。 目录 一、resize 二、insert 三、erase 一、resize 昨天说这个的时候没有考虑到缩小范围时咋处理,然后发现报错了,接着我调试发现缩小就不能正常执行了,因为用的是strcap所以…

有关字符串算法

例题一 解法: 算法思路(两两⽐较): 我们可以先找出前两个的最⻓公共前缀,然后拿这个最⻓公共前缀依次与后⾯的字符串⽐较,这样就可以找出所有字符串的最⻓公共前缀。 例题二 解法(中⼼扩散&am…

UNIAPP(小程序)每十个文章中间一个广告

三十秒刷新一次广告 ad-intervals"30" <template><view style"margin: 30rpx;"><view class"" v-for"(item,index) in 100"><!-- 广告 --><view style"margin-bottom: 20rpx;" v-if"(inde…

win10电脑无线网卡优化

近期win10会频繁断网&#xff0c;无任何规律。目前整理搜索后使用以下两种方法优化网卡&#xff0c;更改配置后断网问题得到有效改善。 方法一&#xff1a;在【电源管理】中取消勾选【允许计算机关闭此设备以节约电源】 方法二&#xff1a;【Preferred enable】修改为prefer 5…

R语言数据操纵:常用函数

这篇文章主要介绍R语言中处理循环&#xff0c;排序&#xff0c;总结重要信息的常用函数。 处理循环的函数 lapply函数 这个函数就是俗称的一句话循环函数&#xff0c;不同于while循环或者for循环&#xff0c;这个函数可以实现一句话就是一个循环的效果。 具体格式为lapply(…

C语言数据结构专题--顺序表(1基础)

前言 我们在对C语言有一定的了解之后&#xff0c;我们就可以开始数据结构的学习了&#xff0c;数据结构多用指针、结构体、动态内存开辟等知识&#xff0c;若对这些知识还不太了解的朋友&#xff0c;就需要加深其理解了&#xff0c;那么废话不多说&#xff0c;我们正式开始本节…

36.基于CAS实现的java类

JUC, java.util.concurrent并发工具包下。 1.原子整数 AtomicInteger AtomicLong AtomicBoolean 底层用的CAS来实现。 AtomicInteger类的incrementAndGet方法&#xff0c;addAndGet方法 public static void main(String[] args) {AtomicInteger atomicInteger new Atom…

一文搞懂 ThreadLocal

简介 ThreadLocal存取的数据&#xff0c;总是与当前线程相关&#xff0c;也就是说&#xff0c;JVM 为每个运行的线程&#xff0c;绑定了私有的本地实例存取空间&#xff0c;从而为多线程环境常出现的并发访问问题提供了一种隔离机制。 ThreadLocal的作用是提供线程内的局部变…

未授权访问-api接口

特别注意api接口的一些命名规则 常见的是这种&#xff0c;具体要看开发人员怎么命名的 而确认api路径的最好办法还是去多出发几个功能点&#xff0c;看他的路径&#xff0c;比如下面触发多个功能点 对比得知两个路径都有pyr/user/这时候可能就会觉得这就是api路径&#xff0c;但…

Azure的VFP和虚拟IP地址

Azure 的Virtual filtering platform (VFP) 是Azure 网络地址转换,端口转换和端口分配的基础。 下面我们来深入介绍一下VFP的工作方式。 VFP的出站动作。 对于客户端地址作为虚拟IP的出站目的地址的时候,VFP 驱动会负责做以下两个动作。 源地址转换。端口地址转换。VFP 和 S…

一分钟了解mos管选型

在选择MOS管时&#xff0c;需要考虑多个关键参数以确保选用的MOS管能够满足特定应用的需求。下面是一些主要参数的介绍 额定电压&#xff08;Vds&#xff09; 也称为漏源电压&#xff0c;通常我们所说的耐压&#xff0c;是指MOS管能够承受的最大电压差。 在选择MOS管时&#xf…

数据湖概述:大数据演进阶段-数据湖

文章目录 一. 大数据发展过程1. 离线大数据平台2. Lambda架构&#xff1a;速度层批层3. Kappa架构&#xff1a;流批一体4. 大数据架构痛点总结 二. 数据湖助力于解决数据仓库痛点问题1. 数据湖特点2. 开源数据湖的架构 三. 数据湖和数据仓库理念的对比1. 数据湖和数据仓库对比2…

c++的STL(7) -- stack

stack容器概述 stack容器其实是实现了一种和栈相同结构的容器。 如图&#xff0c;栈这种结构有两端: 栈底和栈顶。 特殊之处在于&#xff0c;这种结构&#xff0c;我们对数据的操作(删除数据&#xff0c;修改数据&#xff0c;查询数据&#xff0c;添加数据)只能在一端进行(栈…

TAB标签美化 - SVG作为mask

今天觉得V3的标签不是很好看&#xff0c;忽然想起来之前看过Vue Admin Beautiful Pro的样式挺好的&#xff0c;顺手研究了一把。发现Vue Admin Beautiful是采用PNGmask css来解决的。于是乎打算把V3的标签页做点小美化&#xff0c;但是迁移过程发生些小插曲&#xff0c;在此记录…

第1讲——预备知识

一、视觉SLAM十四讲在讲些啥 SLAM&#xff1a;Simultaneous Localization and Mapping 翻译&#xff1a;同时定位与地图构建 搭载特定传感器的主体&#xff0c;在没有环境先验信息的情况下&#xff0c;于运动过程中建立环境的模型&#xff0c;同时估计自己的运动。 当特定传感…

Solidity入门1: 3. 函数类型

Solidity中的函数 solidity官方文档里把函数归到数值类型 函数结构 function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)] 看着些复杂&#xff0c;咱们从前往后一个一个看&…

【MySQL】:深入解析多表查询(上)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 多表关系1.1 一对多1.2 多对多1.3 一对一 二. 多表查询概述2.1 概述2.2 分类…