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

优秀设计工作室网站知乎营销平台

优秀设计工作室网站,知乎营销平台,网站做qq链接,外贸网络推广的方式前言 本文章旨在记录博主STM32的学习经验,我自身也在不断的学习当中,如果文章有写的不对的地方,欢迎各位大佬批评指正。 准备工作 今天这篇文章介绍的是触摸开关这一外围硬件。 ST-link调试器STM32最小系统板单路TTP223B触摸传感器模块LE…

前言

本文章旨在记录博主STM32的学习经验,我自身也在不断的学习当中,如果文章有写的不对的地方,欢迎各位大佬批评指正。

准备工作

今天这篇文章介绍的是触摸开关这一外围硬件。

  1. ST-link调试器
  2. STM32最小系统板
  3. 单路TTP223B触摸传感器模块
  4. LED灯珠

开始

1.理清思路

通过查找网络资料我们了解到该传感器特点如图所示

image-20250122213606990

博主也是第一次尝试自己查阅资料来写一个模块的驱动代码,在此之前是跟着B站UP主江协科技学习如何编写驱动代码的。

第一次独立编写驱动代码我是怎么做的呢?我首先想到,既然都是开关,那么是不是可以修改先前学习的按钮驱动代码,在其基础上来实现驱动触摸开关呢?答案是可以!

这里贴上按钮驱动代码 Key.c来供大家参考,注意这里是按钮驱动不是我们本次介绍的触摸驱动

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void Key_Init(void)
{//初始化按钮端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIOInitStructure.GPIO_Pin = GPIO_Pin_1;GPIOInitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIOInitStructure);}uint8_t Key_GetNum(void)
{uint8_t KeyNum = 0;//判断1号端口按钮按下情况if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0){Delay_ms(20);//规避按下按钮的抖动while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 0); //一直按住按钮则卡住Delay_ms(20);//规避松开按钮的抖动KeyNum = 1;}return KeyNum;
}

2.编写代码

有了以上思路我们开始编写触摸模块的驱动代码

连接电路

这里我将触摸传感器的SIG口接到了STM32最小系统板的PB1接口上。LED灯珠接到PA1接口上,采用高电平触发接法。

连接完电路通电后效果如图所示(传感器的VCC还有GND引脚别接反了,亮绿灯代表没接错)

9ca634a95e5a6d0a949b724b1079162

编写驱动

和按键驱动一样,我们首先在Hardware目录新建触摸模块的c和h文件,取名Touch

image-20250122215437318

在新建的Touch.c文件当中新建一个Touch_Init函数,代码如下

首先初始化RCC时钟,然后选择上拉输入模式,接着巴拉巴拉(相信你们都会了,我这里就不多说)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void Touch_Init(void)
{//初始化按钮端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIOInitStructure.GPIO_Pin = GPIO_Pin_1;GPIOInitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIOInitStructure);
}

有了触摸模块的初始化函数后我们还需要一个函数用于获取按钮状态,即按钮是否被触摸,这里我们新建函数 Touch_GetNum

注意这个函数是有返回数值的,这里返回类型为uint8_t,还有就是,和按键一样我们为了避免外界因素对我们产生的影响,还是要进行一个消抖动的过程,代码如下

uint8_t Touch_GetNum(void)
{uint8_t TouchNum = 0;//判断1号端口按钮按下情况if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1){Delay_ms(20);//消去抖动while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1); //一直按住按钮则卡住Delay_ms(20);//消去抖动TouchNum = 1;}return TouchNum;
}

完成这两个函数后我们的触摸模块驱动基本已经完成了,完整代码如下

#include "stm32f10x.h"                  // Device header
#include "Delay.h"void Touch_Init(void)
{//初始化按钮端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIOInitStructure.GPIO_Pin = GPIO_Pin_1;GPIOInitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIOInitStructure);
}uint8_t Touch_GetNum(void)
{uint8_t TouchNum = 0;//判断1号端口按钮按下情况if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1){Delay_ms(20);//消去抖动while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) == 1); //一直按住按钮则卡住Delay_ms(20);//消去抖动TouchNum = 1;}return TouchNum;
}

写完Touch.c后别忘了在头文件touch.h当中添加这两个函数,代码如下

#ifndef __TOUCH_H
#define __TOUCH_Hvoid Touch_Init(void);
uint8_t Touch_GetNum(void);#endif

到这里我们驱动代码已经编写完成了,接下来就是到main.c当中完善一下逻辑代码了

这里直接贴上完整代码

#include "stm32f10x.h"                  // Device header
#include "LED.h"
#include "Touch.h"uint8_t TouchNum;int main(void)
{	LED_Init(); //LED灯珠初始化Touch_Init(); //触摸模块初始化while (1){TouchNum = Touch_GetNum();if(TouchNum == 1){LED1_Turn();}}
}

还有LED灯珠驱动这里也一并贴上(同样的也是放在Hardware文件夹内)

LED.c

#include "stm32f10x.h"                  // Device headervoid LED_Init(void)
{//初始化LED端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIOInitStructure.GPIO_Pin = GPIO_Pin_1;GPIOInitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIOInitStructure);
}void LED1_ON(void)
{//开启LEDGPIO_ResetBits(GPIOA, GPIO_Pin_1);
}void LED1_OFF(void)
{//关闭LEDGPIO_SetBits(GPIOA, GPIO_Pin_1);
}void LED1_Turn(void)
{if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) == 0){GPIO_SetBits(GPIOA, GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA, GPIO_Pin_1);}
}

LED.h

#ifndef __LED_H
#define __LED_Hvoid LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED1_Turn(void);#endif

以上代码全部写好后我们就可以编译并下载到系统板上查看效果了

结尾

感谢你能阅读到这里,相信你已经掌握了触摸模块的驱动编写了吧!在这里,我希望各位大佬跟我一起共进步,后续我也会多分享一些我自己的学习经验,以及像这篇文章一样的模块分享,最后还是感谢你的阅读,我们下篇文章再见吧

http://www.hkea.cn/news/299357/

相关文章:

  • 计算机培训中心网站高端网站建设的公司
  • 成都建设路小学网站大作设计网站
  • 桂林创新大厦网站今日十大热点新闻事件
  • 做网站空间哪家好windows7系统优化工具
  • 网站建设首选公司seo推广一个月见效
  • 微信做模板下载网站有哪些推广网站要注意什么
  • 做网站 java c常德seo快速排名
  • 仙桃做网站找谁常用的网络推广方法
  • 品牌推广网站怎样做百度手机助手苹果版
  • 武汉工业网站制作百度人工服务热线24小时
  • 新闻头条最新消息今日头条站长之家seo综合
  • app与网站宁波seo网络推广渠道介绍
  • 国外学做咖啡的网站百度高级搜索网址
  • 建网站开源代码游戏推广怎么找玩家
  • 莱州哪里有做网站的浙江网站建设平台
  • ps网站设计与制作免费推广seo
  • 网站查询功能怎么做关键词搜索量怎么查
  • 付费网站推广网站优化包括哪些内容
  • 在日本做色情网站广州seo外包
  • 最棒的网站建设考研最靠谱的培训机构
  • 广州建设企业网站黑河seo
  • 招商网站建设性价比高seo排名优化的
  • 产品网站怎么做的长沙正规关键词优化价格从优
  • 怎样查询江西省城乡建设厅网站杭州seo网
  • 网站建设空间是指什么软件网站优化最为重要的内容是
  • 做美工要开通什么网站的会员呢新网站友链
  • 网站集约化建设推进情况推广app赚钱
  • 番禺大石做网站域名污染查询网站
  • 长沙市在建工程项目免费seo快速排名工具
  • 南宁定制网站制作电话图片外链生成工具