3、蓝牙打印机按键 - GPIO输入控制

news2025/1/8 13:55:39

1、硬件

1.1、看原理图

初始高电平,按键按下导通处于低电平状态。

PB8号引脚。

1.2、看手册

a、看系统架构

GPIOB号端口有APB2总线控制

b、RCC使能

RCC->APB2ENR的第3位控制GPIOB使能。

c、GPIOB寄存器配置

浮空输入模式下,I/O的电平状态是不确定的,完全由外部输入决定;

2、软件

2.1、创建key.c和key.h

key.h

#ifndef _KEY_H
#define _KEY_H

#include "stm32f10x.h"
#include "io_bit.h"

#define KEY1 PBin(8)

void init_key(void);
u8 key_scan(void);

#endif

key.c

#include "key.h"
#include "delay.h"

/********************************************************************
*  函数名:  void init_key(void);
*  功能描述: 按键初始化
*  输入参数:无   
*  返回:     无      
*  其他:          
*  硬件连接: PB8   高电平没有按下,低电平按下
*********************************************************************/	

void init_key(void)
{
	// 使能3号引脚
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	// 初始化引脚
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
	
	// 输入浮空
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;

	
	GPIO_Init(GPIOB,&GPIO_InitStruct);
}

/********************************************************************
*  函数名:  u8 key_scan(void);
*  功能描述: 按键扫描
*  输入参数:无   
*  返回:     无      
*  其他:          
*  硬件连接: 按下返回1, 否则返回0
*********************************************************************/	
u8 key_scan(void)
{
	static u8 key_sta = 1;  // 按键状态
	
	if(key_sta && KEY1 == 0)
	{
		// 按键按下
		key_sta = 0;
		// 延时消抖
		delay_ms(10);
		
		if(KEY1 == 0)
		{
			return 1;
		}		
	}
	else if(KEY1 == 1)
	{
		// 按键抬起
		key_sta = 1;
	}
	
	return 0;	
}

2.2、添加key.c到项目中

2.3、按键测试

main.c

功能:通过按键控制LED的亮和灭。


#include "led.h"
#include "delay.h"
#include "key.h"

int main()
{
	u8 key;
	init_delay(72); // 全速72M
	init_led();
	init_key();
	
	
	while(1)
	{
		key = key_scan();
		if(key)
		{
			LED1 = !LED1;
		}	
	
	}
	
}

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

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

相关文章

1.C语言教程:历史、特点、版本与入门示例

目录 1.历史2.特点3.版本4.编译5.Hello World 示例 1.历史 本篇原文为:C语言教程:历史、特点、版本与入门示例。 更多C进阶、rust、python、逆向等等教程,可去此站查看:酷程网 C 语言的诞生源于 Unix 系统的开发需求。 1969 年…

基层医联体医院患者历史检验检查数据的快速Python编程分析

​​​​​​​ 一、引言 1.1 研究背景与意义 在当今数字化医疗时代,医疗数据呈爆炸式增长,涵盖患者的基本信息、病史、检验检查结果、治疗方案等各个维度。这些海量且复杂的数据蕴含着巨大价值,为精准医疗决策提供了关键依据。通过对患者历史检验检查数据的深入对比分析…

智慧工地解决方案 1

建设背景与挑战 工地施工现场环境复杂,人员管理难度大,多工种交叉作业导致管理混乱,事故频发。传统管理方式难以实现科学、有效、集中式的管理,特别是在环境复杂、地点分散的情况下,监管困难,取证复杂。施…

笔上云世界微服务版

目录 一、项目背景 二、项目功能 一功能介绍 三、环境准备 • 需要开发的端口 • Mysql 导入数据库 ​编辑 • Redis ​编辑 • RabbitMQ ​编辑 在创建blog虚拟主机(方法如下) • Nacos • Nginx 四、前端部署 五、后端部署 六、测试计划操作 一功能测试 二…

SQL Server 数据库 忘记密码

1、先用windows 身份验证 连接 2、安全性--登录名 3、设置 身份验证 4、重启电脑 5、登录 登陆成功!!! ------------------------------------------------------------------ --1、查询登录账号信息 ------------------------------------------------------------------ -- …

windows安装并配置Maven

Maven官网下载 https://maven.apache.org 将下载好的解压到自己想要存放的路径中(路径中不要有中文或者影响环境的字符) 在此目录内新建一个名为repository的文件夹,此文件的目的是作为本地Maven的仓库来使用 配置环境变量 按下windows加r键…

Huginn - 构建代理、执行自动化任务

文章目录 一、关于 Huginn什么是Huginn?Huginn 功能加入Huginn展示 二、安装1、Docker2、本地安装3、开发 三、使用Huginn代理gems四、部署1、Heroku2、OpenShiftOpenShift 在线 3、在任何服务器上手动安装4、可选设置4.1 私人开发设置4.2 启用WeatherAgent4.3 禁用…

Android Glide判断当前运行环境是否为主线程的工具方法,Kotlin

Android Glide判断当前运行环境是否为主线程的工具方法,Kotlin private fun assertMainThread() {if (!isOnMainThread()) {throw IllegalArgumentException("You must call this method on the main thread");}}private fun isOnMainThread(): Boolean {…

Visual Point Cloud Forecasting enables Scalable Autonomous Driving——点云论文阅读(12)

此内容是论文总结,重点看思路!! 文章概述 这篇文章介绍了一个名为 ViDAR 的视觉点云预测框架,它通过预测历史视觉输入生成未来点云,作为自动驾驶的预训练任务。ViDAR 集成了语义、三维几何和时间动态信息,有效提升了感知、预测和规划等自动驾驶核心任务的性能。实验表明…

MacBook_Xcode_Swift雨燕

Swift Swift Swift Swift是苹果公司开发的现代化编程语言, 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…

STM32完全学习——使用LIBJPEG库解码图片

一、有关配置 这个库的移植可以说是,很简单,直接使用CubMAX工具就可以帮我们生成移植好的代码,如果你想移植到其他平台,将CubMAX生成的那几个文件拷到你的工程里面就可以了。主要是这个如何使用起来,其实也不难&#…

验证码识别插件 - captcha-killer

验证码识别插件 - captcha-killer 简介 captcha-killer 是一款用于 Burpsuite 的验证码识别插件。它的主要功能是调用各种验证码识别接口,以便在进行渗透测试时能够自动识别和绕过验证码。这个插件本身并不直接进行验证码的识别,而是通过调用外部的 OC…

unity团结云下载项目

今天开plastic scm发现它云服务好像停了哈,在hub里下载云端项目也不会出现在项目列表里,之前也有发邮件说让提前迁移到团结云。打开云仓库会弹这个,大概就是plastic scm无法解析域名地址吧 研究了一下团结云咋使,官方手册看半天也…

【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程

create-vue 简介 GitHub:https://github.com/vuejs/create-vue 创建的选项有多个,具体的可以看下方截图,当创建完成的时候可以发现工程中是自带vite的。 下面对其中的各种内容进行简单的说明 JSX (可以选择,但是我感觉没什么必要) 全称:JavaScript XML 允许你在 Java…

RIP配置实验

RIP配置实验 案例简介 天一公司下属三个分公司,属于不同的地区,三个公司之间用路由器连接,路由器名称分别为分别为 Router0、Router1、Router2,请把一公司的部门pc0,通过二公司路由器,连接三公司的部门pc1,公司之间通…

video.js视频播放上手

html案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>videojs视频播放</title> </head> <link href"https://cdnjs.cloudflare.com/ajax/libs/video.js/7.3.0/video-js.min.cs…

Introducing Optimization

Chapter6&#xff1a;Introducing Optimization 声明&#xff1a;本篇博客笔记来源于《Neural Networks from scratch in Python》&#xff0c;作者的youtube 其实关于神经网络的入门博主已经写过几篇了&#xff0c;这里就不再赘述&#xff0c;附上链接。 1.一文窥见神经网络 2…

解决Git中没有小绿勾与红叉叉的问题

一、检查自己的软件 必须安装Git和Tortoisegit&#xff08;也就是俗称的小乌龟&#xff09;这两个软件。 Git的下载地址&#xff1a; CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-for-windows/ 寻找与自己电脑相配的软件版本就可以了。 Tor…

向量数据库技术

前言 这里有一些狗&#xff0c;熟悉犬类的朋友应该能很快区分出它们的品种&#xff0c;我们之所以能做到这一点&#xff0c;是因为我们会从不同的角度来观察它们的特征。 比如体型的大小&#xff0c;如果我们使用一个坐标轴来表示这个特征&#xff0c;这些狗将落在不同的坐标点…

算法攻略:顺序表的进阶之路——移除元素

题目如下&#xff1a; 思路&#xff1a; 双指针法 nums[src] val&#xff0c;srcnums[src] ! val&#xff0c;src的值赋值给dst&#xff0c;src和dst都 注&#xff1a; 1&#xff09;双指针法&#xff1a;只是抽象出了两个指向数组的变量&#xff0c;并不是真的指针。 2&#…