STM32CubeMX驱动4x4键盘模块

1. 4x4键盘模块简介

4x4键盘模块是一种常用的电子组件,它由16个按钮或开关以矩阵方式排列而成,可以与微控制器或其他数字电路设备一起使用。该模块通常用于数据输入、操作界面等各种应用场合。

如果你的单片机已经有足够的GPIO引脚可供使用,可以把4x4键盘模块中的16个按键分别连接到8个GPIO引脚上,并通过软件编程实现对按键的控制和读取。在这种情况下,不需要为4x4键盘模块提供额外的电源。

需要注意的是,在将4x4键盘模块与单片机相连时,要根据模块中按键的排列顺序和引脚定义表格来正确地接线。同时,还需要在程序设计时实现正确的按键扫描算法,以便能够准确地检测每个按键的状态并作出相应的响应。

总之,4x4键盘模块是一个功能强大、易于使用的电子元件,广泛应用于各种机械化、自动化系统中,可以大大提高工作效率和准确性。对于电子爱好者来说,学习和实践4x4键盘模块也是很好的锻炼机会。

4x4键盘实物图:
在这里插入图片描述
4x4键盘原理图:
在这里插入图片描述

2. 4x4键盘模块原理

2.1 独立按键的原理

在这里插入图片描述
在按键没按下时,IO口接一个上拉电阻,IO口始终输出高电平。在按键按下时,IO口与地之间由断路变为短路,此时IO口输出低电平。按键松开时,IO口又变为高电平。因此,IO口由高电平变为低电平的过程代表按键被按下;IO口由低电平恢复为高电平的过程代表按键松开。程序实现:先将这个IO口设置为上拉输入,如果检测到这个IO口变为低电平,说明按键被按下。
对GPIO工作模式有疑问的点击这里
(当然有些按键左端连接的是VCC,右端连接的IO口应该被设置为下拉输入,因此程序实现是先将这个IO口设置为下拉输入,如果检测到这个IO口变为高电平,说明按键被按下)

2.2 矩阵键盘的原理

矩阵键盘的原理是通过在行和列之间建立一个矩阵连接来实现的。每个按键都被分配给矩阵中的一个行和一个列,这意味着你可以通过扫描每个行和列的交点来确定哪个按键正在被按下。对于16个按键的矩阵键盘,需要4行和4列的矩阵来表示,因此只需要8个引脚就可扫描这个矩阵。
与独立按键不同,矩阵键盘按键,它两端都是IO口。我们可以代码设置输入端口为低电平,输出端口为上拉输入,如下图:
在这里插入图片描述
此时这个按键就与独立按键基本相同。
以检测下面黄色按键为例讲解其扫描原理。
在这里插入图片描述
R2C3:首先先将输入端R1-R4的电平分别设置为1011,再将输出端C1-C4输出模式设置为上拉输入,那么当检测到输出端C3为低电平时,表示按键R2C3被按下。同理,当检测到C1\C2\C4为低电平时,表示按键R2C1\R2C2\R2C4被按下。
R3C2:首先先将输入端R1-R4的电平分别设置为1101,再将输出端C1-C4输出模式设置为上拉输入,那么当检测到输出端C2为低电平时,表示按键R3C2被按下。同理,当检测到C1\C3\C4为低电平时,表示按键R2C1\R2C3\R2C4被按下。
其它按键与此相似。

3. 移植源码到工程

提前创建一个文件夹,用来存放工程(文件夹路径建议全英文)
打开STM32CubeMX,选择芯片(这里选择STM32F103ZET6),配置Debug,ST-LINK选择Serial Wire。
在这里插入图片描述
使能HSE和LSE,配置时钟频率为72M。
在这里插入图片描述
在这里插入图片描述
根据矩阵键盘原理知矩阵键盘只需要将四个行配置为推挽输出,四个列配置为上拉输入即可。
这里将E0,E2,E4,E6配置为推挽输出(因为需要这四个引脚既能输出高电平也能输出低电平),将F0,F2,F4,F6配置为上拉输入。
在这里插入图片描述
由于要使用OLED模块显示按键值来确定是否驱动成功,因此配置硬件IIC,这里使能IIC1,对应STM32F103ZET6引脚为PB6和PB7。
对STM32CubeMX驱动OLED有疑问的点击这里(内含OLED驱动源码提取方式)
在这里插入图片描述
创建工程名,配置编译环境。
在这里插入图片描述
这里用keil5编译,因此选择MDK-ARM-V5。
点击配置代码生成器并生成代码。
在这里插入图片描述
点击GENERATE CODE即可生成代码。
打开工程存放的位置。
移植oled和矩阵键盘相关的.h和.c文件到工程中。

相关文件提取方式:
关注微信公众号:码上芯路人
私信:模块驱动

说明:key_4x4.h中是一些宏定义和键盘扫描相关的函数声明,key_4x4.c中是键盘扫描相关函数的定义。
将oled.h、oledfont.h和key_4x4.h文件复制到工程文件目录Key_4x4_test\Core\Inc中
在这里插入图片描述
将oled.c和key_4x4.c文件复制到工程文件目录Key_4x4_test\Core\Src中
在这里插入图片描述
双击打开Key_4x4_test\MDK-ARM目录中UVPROJX文件,按下图提示操作。
在这里插入图片描述
在这里插入图片描述
编译后oled.h和oledfont.h将被包含在oled.c目录下,key_4x4.h将被包含在key_4x4.c目录下。
在这里插入图片描述
在这里插入图片描述
这个模块的驱动函数只有一个——按键扫描函数,这个函数的实现细节已在源码的注释中给出,这里不做赘述。

4. 实验

按下键盘对应的数字、符号或字母显示在OLED屏上。
主函数内容如下:

#include "main.h"
#include "i2c.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "key_4x4.h"
#include "oled.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
//初始显示:按下对应按键
void OLED_DisplayInit()
{
    OLED_ShowCHinese(16,3,2);
    OLED_ShowCHinese(32,3,3);
    OLED_ShowCHinese(48,3,4);
    OLED_ShowCHinese(64,3,5);
    OLED_ShowCHinese(80,3,6);
    OLED_ShowCHinese(96,3,7);
    
}
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
int key;
  /* 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_I2C1_Init();
  /* USER CODE BEGIN 2 */
    OLED_Init();
    OLED_Clear();
    OLED_DisplayInit();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
//说明:行(row),列(column)
/********************************************
C4_R1 1		C4_R2 2     C4_R3 3     C4_R4 13A
C3_R1 4		C3_R2 5	    C3_R3 6		C3_R4 14B
C2_R1 7		C2_R2 8     C2_R3 9     C2_R4 11C
C1_R1 10*	C1_R2 0		C1_R3 15#   C1_R4 12D
********************************************/      
      key=key4x4scan();
      if(key>-1)
      {
          if(key>=0&&key<=9){
              OLED_Clear();
              OLED_ShowNum(64,3,key,1,16);
          }
          else if(key==10){
              OLED_Clear();
              OLED_ShowChar(64,3,'*',16);
          }
          else if(key==11){
              OLED_Clear();
              OLED_ShowChar(64,3,'C',16);
          }
          else if(key==12){
              OLED_Clear();
              OLED_ShowChar(64,3,'D',16);
          }
          else if(key==13){
              OLED_Clear();
              OLED_ShowChar(64,3,'A',16);
          }
          else if(key==14){
              OLED_Clear();
              OLED_ShowChar(64,3,'B',16);
          }
          else if(key==15){
              OLED_Clear();
              OLED_ShowChar(64,3,'#',16);
          }
              
        }
  }
  /* USER CODE END 3 */
}

效果如下:

KEY_4x4_实验

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: STM32CubeMX支持矩阵键盘4x4的配置,可以通过STM32CubeMX工具进行设置。在工具中选择对应的GPIO引脚,设置为输入模式,并启用内部上拉电阻。然后选择矩阵键盘4x4的模式,并设置对应的行列映射关系。最后生成代码并下载到STM32芯片中即可使用。 ### 回答2: STM32CubeMX是一种由STMicroelectronics公司开发的嵌入式软件配置工具,可帮助软件开发人员更轻松地配置和生成STM32微控制器的初始化代码。其中,矩阵键盘是一种常见的外设,可用于实现用户和嵌入式系统之间的交互。接下来,我们将讨论STM32CubeMX在矩阵键盘4x4方案中的应用。 1. 硬件配置 首先,需要通过STM32CubeMX工具在芯片上配置GPIO引脚,将矩阵键盘的按键连接到特定引脚。在4x4矩阵键盘中,有16个按键需要连接。STM32CubeMX支持简单的拖放式界面,使硬件配置更加容易和直观。 2. 码率设置 在完成硬件配置后,需要设置矩阵键盘的扫描速率。这可以通过调整代码中的扫描周期来实现。通常情况下,使用50-100ms左右的扫描周期是比较合适的。在编写代码时,必须确保扫描周期足够长,以确保键盘上的每个按键都有足够的时间进行扫描,并且不会产生抖动。 3. 读取按键状态 在矩阵键盘4x4方案中,需要对按键进行扫描,并读取它们的状态。在代码中,可以使用轮询的方式来扫描按键状态,也可以使用中断方式来响应按键事件。在进行轮询时,通常使用一个循环语句实现,并使用if语句判断按键是否被按下。使用中断方式时,当按键被按下时,会触发一个中断,该中断将被捕获并用于执行相应操作。 4. 处理按键事件 一旦检测到按键事件,需要对其进行处理。在处理按键事件时,可以使用带有标志的变量来标记按键状态。也可以将按键事件添加到一个队列中,在主循环或另一个线程中处理它们。无论采用哪种方法,都需要提供适当的保护措施来防止竞争条件和其他多线程问题的出现。 综上所述,使用STM32CubeMX可以轻松地实现矩阵键盘4x4方案。为了实现有效的按键扫描和事件处理,需要在硬件配置、码率设置、读取按键状态和处理按键事件等方面进行仔细的规划和编程。这也需要开发人员具有嵌入式系统和硬件编程方面的知识和经验。 ### 回答3: STM32CubeMX是一种图形化的配置工具,适用于为STMicroelectronics的STM32微控制器生成初始化代码和配置文件。矩阵键盘是一种常见的输入外设,可以通过连接按键和一个控制器来实现输入的读取。STM32CubeMX支持矩阵键盘的配置,其中4x4是指这个矩阵键盘有4行和4列。 具体来说,STM32CubeMX可以生成代码来配置GPIO用作矩阵键盘的行和列。例如,可以选择四个GPIO引脚用于控制键盘的行,再选择另外四个GPIO引脚用于读取键盘的列。这些引脚需要在代码中被配置为输入或输出,并配置到正确的位置上。接下来,可以在代码中实现一个扫描算法,周期性地扫描键盘的每一行,并逐列检查该行上按下的按键。如果发现某个按钮被按下,则可以触发一个事件或者执行一个特定的操作。 STM32CubeMX还可以配置额外的细节,例如按键去抖动和输入电平的滤波等。可以选择不同的算法来处理这些问题,或者使用默认的选项。此外,还可以为矩阵键盘配置中断,以便在按键按下或释放时触发中断服务程序。这是一种高效的方式,以确保键盘操作被及时处理。 总之,STM32CubeMX提供方便易用的工具来配置矩阵键盘4x4,其代码生成功能可以减少开发时间,并且可以确保配置项正确、可靠。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值