登录/注册

STM32单片机矩阵键盘

STM32单片机矩阵键盘

更多

在STM32单片机中实现矩阵键盘的步骤如下,采用常见的扫描方式(行扫描、列检测):

1. 硬件连接

2. 初始化GPIO

// 行引脚配置:推挽输出,初始高电平
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();  // 使能GPIOA时钟

// 设置行(ROW0-ROW3: PA0-PA3)
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 推挽输出
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 设置列(COL0-COL3: PA4-PA7),输入带上拉
GPIO_InitStruct.Pin = GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;      // 输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP;          // 启用上拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

3. 键盘扫描函数

#define ROWS 4
#define COLS 4

// 定义行对应的GPIO引脚
uint16_t rowPins[ROWS] = {GPIO_PIN_0, GPIO_PIN_1, GPIO_PIN_2, GPIO_PIN_3};
// 定义列对应的GPIO引脚
uint16_t colPins[COLS] = {GPIO_PIN_4, GPIO_PIN_5, GPIO_PIN_6, GPIO_PIN_7};

// 扫描函数,返回按键值(0-15表示按键,-1表示无按键)
int8_t MatrixKey_Scan() {
    for (uint8_t i = 0; i < ROWS; i++) {
        // 当前行置低电平,其他行置高
        for (uint8_t j = 0; j < ROWS; j++) {
            HAL_GPIO_WritePin(GPIOA, rowPins[j], (j == i) ? GPIO_PIN_RESET : GPIO_PIN_SET);
        }
        HAL_Delay(1);  // 稳定信号

        // 检查列状态
        for (uint8_t k = 0; k < COLS; k++) {
            if (HAL_GPIO_ReadPin(GPIOA, colPins[k]) == GPIO_PIN_RESET) {
                HAL_Delay(10);  // 消抖
                if (HAL_GPIO_ReadPin(GPIOA, colPins[k]) == GPIO_PIN_RESET) {
                    // 计算按键位置:行号 * 列数 + 列号
                    return (i * COLS + k);
                }
            }
        }
    }
    return -1;  // 无按键按下
}

4. 主循环调用

while (1) {
    int8_t key = MatrixKey_Scan();
    if (key != -1) {
        printf("Key Pressed: %d\n", key);  // 输出按键编号(0-15)
        while (MatrixKey_Scan() != -1);    // 等待释放
    }
    HAL_Delay(50);  // 降低扫描频率
}

5. 关键点说明

6. 优化建议

通过以上步骤,即可在STM32上实现稳定的矩阵键盘扫描功能。实际应用中需根据硬件连接调整引脚定义。

基于单片机矩阵键盘检测案例

/O端口资源,导致单片机与其它外部设备无法连接。在这种情况下,可以使用矩阵键盘,实现多个按键与

2023-10-31 14:35:38

基于51单片机矩阵键盘设计

矩阵键盘,是一种在节省端口的前提下控制大量按键的一种方法,对于传统的独立对地键盘,一个按键就需要占用一个

2023-01-17 16:23:40

矩阵键盘-单片机入门课件

矩阵键盘-单片机入门课件

资料下载 ah此生不换 2022-03-18 11:12:55

51单片机矩阵键盘的原理图

51单片机矩阵键盘的原理图

资料下载 我不是英雄007 2021-12-30 11:32:11

使用单片机实现LCD矩阵键盘的程序免费下载

本文档的主要内容详细介绍的是使用单片机实现LCD矩阵键盘的程序免费下载。

资料下载 佚名 2021-04-02 11:39:00

单片机矩阵键盘实验文件和程序免费下载

本文档的主要内容详细介绍的是单片机的矩阵键盘实验文件和程序免费下载。

资料下载 佚名 2020-10-21 17:16:17

使用51单片机实现矩阵键盘的代码免费下载

本文档的主要内容详细介绍的是使用51单片机实现矩阵键盘的代码免费下载。

资料下载 王军 2019-08-28 17:29:00

矩阵键盘检测独立按键与单片机连接

4.2 矩阵键盘检测独立按键与单片机连接时,每个按键都需要单片机的一个I

2022-02-22 06:14:55

单片机独立按键和矩阵键盘的原理是什么?

单片机独立按键和矩阵键盘的原理是什么?键盘的工作方式是什么?

2022-01-18 07:31:59

单片机矩阵键盘判断

单片机矩阵键盘判断某个按键按下这是我第一次发表文章,关于51单片机

2021-12-08 07:12:25

51单片机矩阵键盘c语言程序

51单片机矩阵键盘c语言程序,c51单片机实现

2021-07-21 09:20:17

单片机键盘检测与应用

非编码键盘通常又分为独立键盘和矩阵键盘两大类。所谓独立

2020-09-18 16:34:17

7天热门专题 换一换
相关标签