从0学起的esp-idf之旅——外设篇矩阵键盘

本文介绍了一个ESP32使用库实现4x4矩阵键盘的示例,包括如何配置GPIO、安装驱动、注册事件处理函数。代码中通过匿名数组初始化列和行GPIO,简洁但可能不常见。矩阵键盘的事件处理函数分别处理按键按下和释放事件。要使用该例程,需将库文件复制到项目中,并根据实际硬件调整GPIO配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

今天来分析一下矩阵键盘,关于矩阵键盘这部分,实际上原理不难。乐鑫做好了一个矩阵键盘的,其中编程思路非常值得推敲。这次咱们先看看库怎么用,下次再来分析一波这个库源码。

官方例程详细注释

#include <stdio.h>
#include "esp_log.h"
#include "matrix_keyboard.h"

const static char *TAG = "example";

/**
 * @摘要 矩阵键盘事件处理函数
 * @注意 此函数是在定时器里运行
 */
esp_err_t example_matrix_kbd_event_handler(matrix_kbd_handle_t mkbd_handle, matrix_kbd_event_id_t event, void *event_data, void *handler_args)
{
    uint32_t key_code = (uint32_t)event_data;
    switch (event) {
    case MATRIX_KBD_EVENT_DOWN:
        ESP_LOGI(TAG, "press event, key code = %04x", key_code);
        break;
    case MATRIX_KBD_EVENT_UP:
        ESP_LOGI(TAG, "release event, key code = %04x", key_code);
        break;
    }
    return ESP_OK;
}

void app_main(void)
{
    matrix_kbd_handle_t kbd = NULL;
    // 应用默认矩阵键盘配置
    matrix_kbd_config_t config = MATRIX_KEYBOARD_DEFAULT_CONFIG();
    // 设置矩阵键盘列使用的GPIO
    config.col_gpios = (int[]) {
        10, 11, 12, 13
    };
    // 设置列数
    config.nr_col_gpios = 4;
    // 设置矩阵键盘行使用的GPIO
    config.row_gpios = (int[]) {
        14, 15, 16, 17
    };
    // 设置行数
    config.nr_row_gpios = 4;
    // 安装矩阵键盘驱动
    matrix_kbd_install(&config, &kbd);
    // 绑定键盘事件处理函数
    matrix_kbd_register_event_handler(kbd, example_matrix_kbd_event_handler, NULL);
    // 键盘开始工作
    matrix_kbd_start(kbd);
}

简析和吐槽

这个例程主代码非常简单是一个4*4矩阵键盘,总的来说就是使用默认配置初始化矩阵键盘,并且给它绑定好事件处理函数,调用开始函数就可以定时检测键盘并处理事件了。在使用的过程中,我们需要把matrix_keyboard文件夹整体copy到你自己的工程的components文件中去,根据例程初始化好键盘就可以使用啦。有点骚的地方在于这里整了一个匿名数组。
这种语法不常用,相比起来不匿名无非就是少写了一个变量,纯属写代码的人装逼。

// 匿名数组
config.col_gpios = (int[]) {
        10, 11, 12, 13
    };
// 等价于下面的写法
int a[] = {10, 11, 12, 13};
config.col_gpios = a;

总结

矩阵键盘总结

相关官方资料链接

矩阵键盘例程:https://github.com/espressif/esp-idf/tree/master/examples/peripherals/gpio/matrix_keyboard
gpio相关api:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/peripherals/gpio.html
匿名数组:https://blog.csdn.net/nicai_xiaoqinxi/article/details/98391584

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值