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

阿里云ecs 搭建网站上海专业seo公司

阿里云ecs 搭建网站,上海专业seo公司,做地方短租网站,杭州建设网站的公司前言 本文章旨在记录博主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.tj-hxxt.cn/news/82489.html

相关文章:

  • 山西太原最新消息天津债务优化公司
  • 博星卓越营销网站设计it培训机构怎么样
  • 昆明猫咪科技网站建设标题关键词优化技巧
  • 可以兼职做设计的网站企业推广是什么职业
  • 江西网站做的好的企业独立站怎么建站
  • 做招商加盟网站搜索引擎排名国内
  • 青海做网站最好的公司长沙seo推广
  • 网站测评必须做网站百度seo关键词优化
  • wordpress新建界面济南做seo外包
  • 做百度手机网站点击杭州制作公司网站
  • vue 做企业网站优化关键词排名
  • 旅游网站设计完整代码什么软件可以发帖子做推广
  • qq网站直接登录网络广告投放
  • 网站加地图标记免费发布推广的网站有哪些
  • iis配置网站访问权限电商数据查询平台
  • 怎么使用wordpress做网站营销的目的有哪些
  • 织梦模板网站源码广告投放这个工作难不难做
  • 山东政府网站信息内容建设关键词优化排名平台
  • WordPress的Ajax插件杭州seo工作室
  • 怎么做一张图片的网站临沂做网站推广的公司
  • 全球域名注册平台北京seo人员
  • 做视频周边的网站企业网络营销推广案例
  • 一键生成表白网站自建网站流程
  • 郑州最牛的网站开发公司外贸平台自建站
  • 首页网站怎么做的优化落实新十条措施
  • 网站建设 软件有哪些海外市场推广方案
  • 有公网ip 如何做一网站天津百度推广代理商
  • 做gif网站百度seo收录软件
  • .net开发网站的优点百度广告投放价格表
  • 网站开发首选关键词优化工具有哪些