【蓝桥杯——物联网设计与开发】拓展模块1 - 矩阵键盘

目录

一、矩阵键盘

(1)资源介绍

       🔅原理图 

       🔅扫描原理

(2)STM32CubeMX 软件配置

(3)代码编写

(4)实验现象

二、矩阵键盘接口函数封装

三、踩坑日记

(1)上拉电阻问题


一、矩阵键盘

(1)资源介绍

       🔅原理图 

        蓝桥杯物联网竞赛实训平台提供了一个拓展接口 CN2,所有拓展模块均可直接安装在 Lora 终端上使用;

图1        拓展接口

        2×3 矩阵键盘模块电路原理图如下所示:

图2        矩阵键盘电路原理图

        通过两张电路图连接可知,引脚资源配置情况为:

表1 引脚资源配置情况
KeyboardMCU
COLUMN_1PB1
COLUMN_2PB0
COLUMN_3PA8
ROW_1PB6
ROW_2PB7

⚠️注意:PA8 引脚为 OLED 显示屏 I2C_SCL 信号,在同时使用 OLED 屏幕和 2×3 矩阵键盘模块时,在每次矩阵键盘扫描任务前、后,需要重置 PA8 到相应的工作模式和状态;或放弃使用 PA8 对应列(B3 按键、B6 按键),使用 2×3 矩阵键盘功能。

       🔅扫描原理

        1️⃣行扫描:将所有行线拉低(清 0),列线拉高(置 1)。当有按键触发时,对应列线拉低(清 0),即可得出此次按键触发所在列;

        2️⃣列扫描:与行扫描相反。列扫描则是将所有列线拉低(清 0),行线拉高(置 1)。当有按键触发时,对应行线拉低(清 0),即可得出此次按键触发所在行;

        本文将介绍列扫描方式使用矩阵键盘模块;

(2)STM32CubeMX 软件配置

🔅“工程建立、时钟树配置、Debug 串行线配置、代码生成配置” 在下文中有讲解,这里不再赘述❗️

【蓝桥杯——物联网设计与开发】基础模块1- GPIO输出icon-default.png?t=N7T8https://blog.csdn.net/m0_63116406/article/details/135604705?spm=1001.2014.3001.5502

1️⃣点击引脚 PB1 → 选择 GPIO_Output 模式;

图3        PB1 配置


2️⃣点击引脚 PB0 → 选择 GPIO_Output 模式;

图4        PB0 配置



3️⃣点击引脚 PB6 → 选择 GPIO_Input 模式;

图5        PB6 配置



4️⃣点击引脚 PB7 → 选择 GPIO_Input 模式;

图6        PB7 配置

5️⃣点击 "GPIO" → 点击引脚 PB7、PB7 → 分别将 "GPIO Pull-up/Pull-down" 栏修改为 "Pull-up",即将 PB7、PB7 引脚初始化为带上拉电阻

图7        输入模式配置

6️⃣初始化 OLED;(配置步骤在下文中有讲解,这里不再赘述)

【蓝桥杯——物联网设计与开发】基础模块6 - OLEDicon-default.png?t=N7T8https://blog.csdn.net/m0_63116406/article/details/136196071?spm=1001.2014.3001.5501

图8        OLED 初始化

7️⃣生成代码即可;

(3)代码编写

🟢️main 函数

/* USER CODE BEGIN Includes */
#include "oled.h"
#include <stdio.h>
/* USER CODE END Includes */

/* USER CODE BEGIN PV */
uint8_t puc_oled[17];
/* USER CODE END PV */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
	uint8_t key_down, key_tmp;	// 按键下降沿、按键当前值
	static uint8_t key_old = 0;	// 按键上一次值
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C3_Init();
  /* USER CODE BEGIN 2 */
	OLED_Init();	// 初始化 OLED
	OLED_Clear();	// OLED 清屏
	
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);	// 拉高 PB1
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);	// 拉高 PB0
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		/* 按键检测 */
		key_tmp = 0;	// 当前值清零
		// 第一列扫描
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == 0)
			key_tmp = '1';
		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) == 0)
			key_tmp = '4';
		// 第二列扫描
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
		HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == 0)
			key_tmp = '2';
		if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) == 0)
			key_tmp = '5';
		// 三行代码
		key_down = key_tmp & (key_tmp ^ key_old);
		key_old = key_tmp;
		// 下降沿逻辑处理
		if(key_down)
		{
			sprintf((char *)puc_oled, "KeyValue: %c", key_down);
			OLED_ShowString(0, 0, puc_oled, 16);
		}
		HAL_Delay(10);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

(4)实验现象

        按下前两列按键,OLED 显示屏会显示对应的键值;

图9        实验现象

二、矩阵键盘接口函数封装

🟡️按键扫描函数

uint8_t key_read(void)
{
	uint8_t key_value = 0;
	// 第一列扫描
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == 0)
		key_value = '1';
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) == 0)
		key_value = '4';
	// 第二列扫描
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == 0)
		key_value = '2';
	if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7) == 0)
		key_value = '5';
	return key_value;
}

🔴矩阵键盘接口函数调用实例

void task_keys(void)
{
	uint8_t key_down, key_tmp;
	static uint8_t key_old = 0;
	// 10ms 调用一次
	if(cnt_10ms < 10)	return;
	cnt_10ms = 0;
	// 三行代码
	key_tmp = key_read();
	key_down = key_tmp & (key_tmp ^ key_old);
	key_old = key_tmp;
	// 下降沿逻辑处理
	if(key_down)
	{
		OLED_Clear();
		sprintf((char *)puc_oled, "KeyValue:%c", key_down);
		OLED_ShowString(0, 0, puc_oled, 16);
	}
}

三、踩坑日记

(1)上拉电阻问题

  • 列扫描时,对应的引脚需配置为带上拉电阻的输入模式
  • 行扫描时,对应的引脚需配置为带上拉电阻的输入模式

        🔅如果不带有上拉电阻,则在按键未按下的时候,输入引脚的电平处于不确定的状态,导致读入数据不稳定;而带有上拉电阻,可将引脚电平钳制为高电平,在按键按下时才变化为低电平;

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 蓝桥杯物联网设计开发考试不会要求考生编写 OLED 和 LoRa 的驱动程序。而是更注重考察考生在物联网设计开发方面的综合能力和技术应用能力。 物联网设计开发是指将各种物理设备和传感器通过互联网连接起来,实现数据的采集、传输、处理和应用。在这个过程中,OLED 和 LoRa 是常见的硬件设备和无线通信技术。 OLED(Organic Light-Emitting Diode)属于一种发光二极管显示器。它具有自发光、超薄、高对比度和低功耗等优点。在物联网应用中,OLED 可以用于显示各种传感器的数据或者设备的工作状态。 LoRa(Long Range)是一种低功耗、远距离的无线通信技术。它适用于物联网场景下的远距离传输和低功耗要求。LoRa 可以实现传感器数据的远程传输和远程控制等功能。 在蓝桥杯物联网设计开发考试中,考生可能会遇到使用 OLED 和 LoRa 的实际应用案例。但不要求考生编写硬件驱动程序。考察的重点更多在于考察考生对物联网的整体设计能力、对数据传输和处理的技术理解和实践经验。 因此,考生需要掌握物联网系统的搭建和调试技巧、熟悉各种通信协议和传输技术、了解各种传感器的工作原理和数据处理方法。掌握这些基础知识和技能,能够实际应用到物联网实际项目中,才能在蓝桥杯物联网设计开发考试中取得好的成绩。 ### 回答2: 蓝桥杯物联网设计开发考试会给oled和lora驱动。 蓝桥杯物联网设计开发考试是一个对物联网相关知识的综合考核,其中会考察对各种传感器、驱动设备的使用能力。而oled和lora作为物联网应用中常用的两种驱动设备,理应在考试中被考察。 OLED是一种有机发光二极管显示技术,可以实现高对比度、高亮度、宽视角的显示效果。在物联网设计中,使用OLED可以将各种数据或者信息以直观的方式呈现出来,提高用户体验。因此,考试中会对OLED的使用方法进行考察,包括初始化、显示文本或图片等相关操作。 Lora是一种低功耗远距离无线通信技术,适用于物联网中传感器节点之间的数据传输。它具有长距离传输能力和低功耗的特点,可以实现在数百米至几公里范围内的无线通信。在物联网设计中,使用Lora可以实现传感器的数据采集和上传,从而构建起一个完整的无线传感器网络。因此,考试中也会对Lora的使用方法进行考察,包括Lora模块的初始化、数据发送和接收等相关操作。 综上所述,蓝桥杯物联网设计开发考试会考察对于oled和lora的驱动。通过对这些驱动设备的了解和掌握,可以更好地实现物联网应用的开发设计。 ### 回答3: 蓝桥杯物联网设计开发考试不会直接给出 OLED 和 Lora 驱动程序。然而,物联网设计开发考试通常会涉及对各种传感器、通信模块以及外设的使用和集成,包括 OLED 和 Lora。对于 OLED 和 Lora 驱动程序的使用,考试题目可能要求考生自行编写或集成相应的驱动程序。 对于 OLED,考生可能会被要求了解 OLED 的工作原理和驱动方式,并实现相关功能,如显示文本、图像等。考试中可能会要求考生使用相应的开发平台和库来编写 OLED 驱动代码,并结合实际应用场景进行相应的功能实现和调试。 对于 Lora,考生可能会要求了解 Lora 的工作原理和通信协议,并实现与其他设备之间的远程通信。考试中可能会要求考生使用开发板和相应的 Lora 模块来实现通信功能,并结合具体场景对其进行应用和调试。 总之,蓝桥杯物联网设计开发考试鼓励考生在实际应用中掌握和使用各种硬件驱动和通信模块。虽然不会直接给出 OLED 和 Lora 驱动程序,但通过考试的实践和学习,考生可以提升自己的硬件驱动和通信模块的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逝灮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值