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

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

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.kler.cn/a/467320.html

相关文章:

  • ChatGPT在数据分析与处理中的使用详解
  • 22408操作系统期末速成/复习(考研0基础上手)
  • 为什么HTTP请求后面有时带一个sign参数(HTTP请求签名校验)
  • SpringBoot中实现拦截器和过滤器
  • C++:范围for
  • FPGA、STM32、ESP32、RP2040等5大板卡,结合AI,更突出模拟+数字+控制+算法
  • 【算法应用】基于麻雀搜索算法求解Renyi熵图像多阈值分割问题
  • 告别Kibana:Elasticsearch 桌面客户端的新变革
  • 基于STM32F103的语音控制模块的应用(实现语音控制小灯开关)
  • 机器学习之过采样和下采样调整不均衡样本的逻辑回归模型
  • 常见中间件漏洞(tomcat,weblogic,jboss,apache)
  • 【管道——二分+区间合并】
  • .Net加密与Java互通
  • Ubuntu静态IP地址
  • HTML——78. 图像地图
  • 【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理
  • 常见的 MySQL 性能问题
  • 框架Tensorflow2
  • 《Rust权威指南》学习笔记(四)
  • Elasticsearch:Lucene 2024 年回顾
  • 豆包 MarsCode 编程助手之Visual Studio Code快速开始教程
  • 【数据可视化-10】国防科技大学录取分数线可视化分析
  • SQL Server 数据库 忘记密码
  • 5.1 冒泡排序与选择排序
  • 对一个双向链表,从尾部遍历找到第一个值为x的点,将node p插入这个点之前,如果找不到,则插在末尾。使用C语言实现
  • Unity3D仿星露谷物语开发16之角色拾取道具