C8T6超绝模块--按键检测点亮LED

news2024/11/17 16:43:35

C8T6超绝模块–按键检测点亮LED

大纲

  1. 按键原理
  2. 初始化LED
  3. 初始化按键
  4. 编写main

具体案例

按键原理

在这里插入图片描述
(这里针对的是我的板子的原理图,具体的查看自己的板子)注意看,这里按键一端接到的是地,当我们没按下按键时,其默认是低电压,当我们按下按键时,电路连通时,这是高电平

初始化LED

具体在我的上一篇博客C8T6超绝模块–LED里面有具体的阐述,这里就不一一介绍了

初始化按键

当然,大概流程还是得先打开时钟,完成GPIO配置,我这里的按键K0外接在PA0上,所以要对GPIOA的Pin0引脚进行初始化配置

初始化按键的GPIO

void KEY_GPIO_Config(void)
{
	GPIO_InitTypeDef			GPIO_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// 打开对应的时钟
	// 配置GPIO
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	
	GPIO_Init(GPIOA,&GPIO_InitStruct);
}

这里就是正常的配置GPIO

下面是按键的电压扫描函数
本质上就是读取按键相连的那个GPIO的电压,然后根据高低电压对其进行处理
这里要注意的一点,有些板子在这里外接了一个电容器,当我们按下键位时,可以通过电容的充放电来实现硬件消抖,而如果没有外接电容器,当我们按下按键时,就会产生波纹抖动(高低电压变化不是一蹴而就的),导致按键没有达到我们预期的效果,我们要使用软件消抖(通过延时来判断电压,保证我们按下按键时,电压是处于稳定状态的)

#define KEY_ON			1
#define KEY_OFF			0

 uint8_t Key_Scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
	/*检测是否有按键按下 */
   	if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON ) 
	  {	   
	 	 /*延时消抖*/
	  	Delay(50000);		
	   		if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON )  
					{	 
						/*等待按键释放 */
						while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);   
			 			return 	KEY_ON;	 
					}
			else
					return KEY_OFF;
		}
	else
		return KEY_OFF;
}

这里通过库函数 GPIO_ReadInputDataBit 来读取指定端口的指定引脚的电压,然后通过延时函数进行延时,再读取此刻的电压(因为经过延时之后的电压是处于稳定的,如果此时按键还是按下了,就继续执行后面的代码),此时按键是按下的,我们用while循环让其一直卡在按键按下时,当按键松开时,最后返回真值,否者直接返回按键没按下

第一个检测按键是否按下,如果按下了,我们通过延时判断是不是稳定的(否则就是抖动或误触),如果按键是真的按下,我们一直卡住按键按下,当按键松开时,循环结束,返回按键按下的真值

main函数

int main(void)
{
	LED_GPIO_Config();
	
	KEY_GPIO_Config();
	while(1)
{
		if(Key_Scan(KEY_GPIO_PORT,KEY_GPIO_PIN) == KEY_ON)
			{
				LED_G_TOGGLE;
				
		}
		
}

初始化LED,再初始化按键,然后死循环一直读取按键的电压,当按键按下时,就反转小灯此时的状态

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux环境下升级nodejs版本

文章目录 简介清除缓存信息确保已安装Node.js和npm安装n模块使用n来升级Node.js查看可用的Node.js版本升级Node.js到最新版本注意事项版本兼容性考虑 简介 在Linux环境下,使用npm的n模块来升级Node.js版本是一种非常流行且便捷的方法。n是一个Node.js版本管理工具&…

【OpenCV】通过迭代器获取图像的像素

文章目录 1. 前置知识2. 通过迭代器获取图像的像素 1. 前置知识 🐧 什么叫做像素? 最小的 图像单元,每个像素可以看成图像中的一个点,它具有颜色、亮度等属性。 cv::Mat是OpenCV中用来处理图像数据的主要数据结构,他实…

tomato靶场通关攻略

1.御剑2014找到IP地址 2.dirb扫描目录 3.再次详细扫描目录 4.访问找到的目录文件 进入antibots中 5.搜寻一会再info.php里面发现有东西 6.这个地方貌似可以进行利用 7.查看源代码发现包含include文件上传漏洞 8.网址后面跟?image../../../../../../../etc/passwd 9.既然可以查…

ceph-iscsi 手动安装过程中的一些问题记录以及解决办法

ceph-iscsi 手动安装教程 安装教程,建议直接看官方文档,猛戳传送门。官方教程是英文版的(不知道有没有中文版),都是一些基础英语,问题不大,实在不行找个翻译软件帮帮忙,哈哈哈。 多…

黄力医生揭秘血栓‘成长’之路,七类人群需高度警惕!

血栓,这个潜伏在血液中的“隐形杀手”,悄无声息地阻塞着生命的通道。它如同道路上的障碍,一旦形成,便可能随着血液流向身体各处,引发脑梗、心梗甚至肺栓塞等严重后果。然而,大多数血栓在形成初期并无明显症…

CodeMeter赋能工业应用程序市场,实现安全与灵活的应用管理

面临挑战 在快速发展的工业自动化领域,软件保护和许可成为各行业决策者日常面临的关键问题。无论是自制还是购买,都需应对复杂的集成任务和多样化的用户需求。对于软件开发者来说,将先进的保护和许可技术(如CodeMeter)…

ISO 26262中的失效率计算:SN 29500-11 Expected values for contactors

目录 引言 1 基准条件下的失效率 2 失效率转换 2.1 失效率预测模型 2.2 开关速率应力系数 2.3 电压应力系数 2.3.1 电压应力系数计算模型 2.3.2 电压应力系数计算 2.4 电流应力系数 2.4.1 电流应力系数计算模型 2.4.2 电流应力系数计算 2.5 温度应力系数 2.6 环境…

Web前端 lucky-canvas【大转盘 九宫格 老虎机】抽奖插件(适用JS/TS、Vue、React、微信小程序、Uniapp和Taro)

Web前端 lucky-canvas 抽奖插件(JS/TS、Vue、React、微信小程序、Uniapp和Taro) 基于 JS Canvas 实现的【大转盘 & 九宫格 & 老虎机】抽奖,致力于为 WEB 前端提供一个功能强大且专业可靠的营销组件,只需要通过简单配置即…

一篇常见第三方库之以及详细使用示例教程

作者:郭震 我们介绍了几个常用的 Python 第三方库,包括 NumPy、Pandas、Matplotlib 和 Requests.本篇将通过一些简单的示例来演示如何有效地使用这些库,以帮助小白理解它们的基本用法.通过这些案例,你可以直观感受到这些库在日常编程中的价值. NumPy NumPy 是一个强…

计算机毕业设计选题推荐-动漫网站-动漫管理系统-Java/Python

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

虚拟化pve查看存储空间使用情况

通过命令行查看 pvesm 是 Proxmox VE 的存储管理工具,可以用来查看存储空间的使用情况。 pvesm status这个命令会列出所有配置的存储设备及其使用情况,包括总空间、已用空间和可用空间。 在 Proxmox VE (PVE) 中,local 和 local-lvm 是两种…

软考超详细准备之软件设计师的计算机系统题型一(上午题)

目录 考试技巧: 上午题: 下午题: 第一道数据流图 第二道数据库 第三道 UML 第四道算法题 第五道程序题 软考刷题之计算机系统 cpu 相关习题 运算器 相关习题 控制器 相关习题 计算机的基本单位: 加法: ​编辑 加减法 相关习题 数据表示 各种码制的范围 相…

AI时代的信仰是什么

信仰是人们内心深处的信念,是推动人类前进的驱动力。AI从几十年前的缓慢探索,到如今的飞速发展,是什么信仰在驱动这一切呢? 摩尔定律 聊起信仰,我就会想起信息时代的摩尔定律。摩尔定律是由英特尔联合创始人戈登摩尔…

微信支付开通商家转账到零钱方法【必过技巧】

自从微信支付关闭,企业付款到零钱后,改成了商家转账到零钱,申请开通这一功能审核很严格。想把微信商户里的钱转到个人微信上就很麻烦了。 首先看下开通条件 开通条件 暂时不支持小微商户、个体工商户。 保持正常健康交易。 转账规则 日限…

【LabVIEW学习篇 - 17】:人机交互界面设计01

文章目录 VI属性设置编辑器选项窗口外观窗口大小窗口运行时的位置执行 对话框对话框使用范例自定义对话框 VI属性设置 在LabVIEW中,设计人机交互界面还是很方便的,主要是因为LabVIEW针对行业特点提供了丰富的控件,使其具有极其强大的图形数据…

智能提醒助理系列-基础设施准备

本系列文章记录“智能提醒助理”wx公众号 建设历程。 一、需求背景 建设一个智能提醒小程序,通过公众号、短信、电话提醒用户。 提供以下能力: 1、节日提醒:生日、节日、纪念日问候祝福。 2、健康守护:喝水、久坐、健身、用药提…

在vscode中用virtual env的方法

vscode是非常常用的软件开发工具。我们也非常了解如何使用vscode开发python的基本方法。当然,vscode可以开发基本所有编程语言。真的是又大又全又好用。 那么为什么要在vscode里面使用virtual env呢?因为python开发会遇到包管理的问题。而virtual env可…

个人博客新引导主页html源码

源码介绍 个人博客新引导主页html源码,随机背景,字体颜色变换,记事本打开自己动手修改一下就可以啦。 效果预览 源码获取 个人博客新引导主页html源码

【uni-app】通过 HBuilderX 创建 uni-app vue3项目

1.下载 HbuilderX 编辑器 访问 HBuilderX 的官网首页 https://www.dcloud.io/hbuilderx.html 点击首页的 DOWNLOAD 按钮 选择下载 正式版 -> App 开发版 2. 安装 HBuilderX 将下载的 zip包 进行解压缩 将解压之后的文件夹,存放到纯英文的目录中(且…

如何选择合适的PLC工业网关?天拓四方

在现代工业自动化领域,PLC工业网关在提升生产效率、确保产品质量、增强系统可靠性等方面发挥着重要作用。为了满足不同工业应用场景的需求,如何选择合适的PLC工业网关成为了一个关键问题。以下是选择PLC工业网关时应考虑的几个重要因素: 兼容…