ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

QMK 固件中的 TriangleLabs AL1:基于 74HC154 解复用器的矩阵扫描与配置指南

QMK 固件中的 TriangleLabs AL1:基于 74HC154 解复用器的矩阵扫描与配置指南 QMK 固件中的 TriangleLabs AL1基于 74HC154 解复用器的矩阵扫描与配置指南【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本篇技术指南围绕 QMK Firmware 仓库中keyboards/al1目录对 TriangleLabs AL1 键盘的完整支持展开涵盖固件构建命令、keyboard.json数据驱动配置、默认键位映射以及最具特色的74HC154 4-to-16 线选解复用器自定义矩阵扫描实现。读完本文你将掌握如何在 QMK 中为 AL1 编译刷写固件、理解其背光/指示灯/锁定特性的配置方式并从源码层面吃透 custom matrix I/O 解复用 这一经典硬件扩展方案的底层原理。硬件与项目概况AL1 是 TriangleLabs 推出的一款全尺寸Full-size客制化机械键盘 PCB使用Atmega32u4作为主控见 keyboards/al1/keyboard.json 中processor字段支持标准 ANSI 与分裂 Backspace 两种配列。在 QMK 仓库中该键盘的固件支持信息记录在 keyboards/al1/readme.mdKeyboard MaintainerMechMerlin、OliviaHardware SupportedAL1 PCBBootloaderatmel-dfu即 Atmel DFU 引导程序QMK DFU 刷写方式。从 keyboards/al1/keyboard.json 可以看到 AL1 的 USB 设备标识VID 0x544C、PID 0x6050、device_version 1.0.4制造商为 Alsoran。这意味着固件烧录后操作系统识别到的 USB 键盘设备即携带这些标识可用于区分同一台机器上的多把键盘。构建与刷写 AL1 固件在搭建好 QMK 构建环境后为 AL1 编译默认键位固件只需一行命令源自 readme 的官方示例make al1:default执行成功后会在构建目录生成对应的.hex/.bin固件文件随后即可通过 DFU 模式刷写到键盘。以下是相关的仓库内官方文档路径可作为系统化学习入口构建环境搭建参考 docs/newbs_getting_started.mdQMK 的 Newbs 入门指南make 命令与目标语法参考 docs/getting_started_make_guide.md完整新手流程参考 docs/newbs.md 与 docs/newbs_building_firmware.md。若你希望修改键位后再编译只需编辑 keyboards/al1/keymaps/default/keymap.c或基于它复制出新的键位目录再重新执行上述 make 命令。数据驱动配置keyboard.json 深度解析AL1 的固件配置采用 QMK 的>#define MATRIX_ROWS 6 #define MATRIX_COLS 16 #define MATRIX_ROW_PINS { C7, B1, B2, C6, B4, B5 } #define SN74X154_ADDRESS_PINS { D4, D5, D6, D7 } #define SN74X154_E1_PIN D3扫描控制逻辑实现在 keyboards/al1/matrix.c文件头部的注释用真值表完整描述了地址线组合与 16 路输出的对应关系A3..A0 即 D7..D4如0: 0000、1: 0001…15: 1111。核心流程如下matrix_init_custom()调用sn74x154_init()初始化解复用器地址/使能引脚随后sn74x154_set_enabled(true)拉低 E 引脚使能芯片最后把 6 个行引脚配置为带上拉的输入init_pins()。matrix_scan_custom()依次对 16 列调用read_rows_on_col()每一列通过select_col(col)→sn74x154_set_addr(col)写入地址、等待信号稳定matrix_io_delay()再逐行读取 6 个行引脚电平引脚为低表示该交叉点有按键按下将对应 bit 置入当前行数据为高则清除。任一行的数据相对上次扫描发生变化函数即返回changed true驱动后续的去抖与按键事件处理。底层驱动drivers/gpio/sn74x154.c解复用器驱动是 QMK 的通用 GPIO 驱动之一源码位于 drivers/gpio/sn74x154.c接口声明见 drivers/gpio/sn74x154.hAL1 通过 keyboards/al1/rules.mk 引入CUSTOM_MATRIX lite VPATH drivers/gpio SRC matrix.c sn74x154.csn74x154_set_addr(address)把 0–15 的地址按位写入 4 个地址引脚address (1 i)被选中的输出端拉低、其余保持高——这正与 matrix.c 中引脚为低表示按下的判断逻辑配套sn74x154_set_enabled(enabled)使能时把 E0/E1 拉低74HC154 的使能端低电平有效enabled true时写入!enabled false若未定义SN74X154_ADDRESS_PINS驱动会在编译期直接报错#error sn74x154: no address pins defined!防止配置缺失。与 QMK custom matrix 框架的关系AL1 使用的是 docs/custom_matrix.md 中定义的CUSTOM_MATRIX lite模式固件框架已提供默认的扫描主循环与去抖逻辑键盘侧只需实现matrix_init_custom()与matrix_scan_custom()两个函数即可极大减少样板代码。matrix.c 中对matrix_row_t current_matrix[]的操作方式MATRIX_ROW_SHIFTER current_col置位/清位与 QMK 标准矩阵的位布局完全一致因此上层键位处理、去抖、报告上报无需任何额外适配。默认键位与 Fn 层设计默认键位位于 keyboards/al1/keymaps/default/keymap.c定义了两个层LAYER 0 / LAYER 1Layer 0主层标准全尺寸布局。字母区、数字区、KC_ESC、修饰键KC_LSFT/KC_RSFT、KC_LCTL/KC_RCTL、KC_LGUI/KC_RGUI、KC_LALT一应俱全右上角是完整的数字小键盘KC_NUM、KC_PSLS、KC_PAST、KC_PMNS、KC_P7–KC_P9、KC_P4–KC_P6、KC_P1–KC_P3、KC_P0、KC_PDOT、KC_PENT、KC_PPLS另有KC_INS、KC_DEL、KC_UP等编辑区按键。空格行中部放置MO(1)按住临时切到 Fn 层。Layer 1Fn 层数字行映射为KC_F1–KC_F12Q位置放置QK_BOOT一键进入 DFU 刷写模式最底行右侧提供背光控制三键BL_TOGG开关背光、BL_DOWN降低亮度、BL_UP提高亮度与keyboard.json中启用的背光特性一一对应。其余键位均以_______透明延续下层映射。键位数组直接调用LAYOUT(...)宏该宏由keyboard.json的layouts段在构建时自动生成行数与列数与MATRIX_ROWS/MATRIX_COLS6×16严格对齐。两种配列LAYOUT 与 LAYOUT_split_bskeyboard.json的layouts段为 AL1 定义了两套可选配列宏LAYOUT标准 ANSI 全尺寸。Backspace 为 2U 单体键{matrix: [0, 12], x: 13, y: 0, w: 2}符合默认键位所用的配列。LAYOUT_split_bs分裂 Backspace。将原 Backspace 位置拆为1U 1U两颗键matrix [5,12]与[0,12]适合喜欢分裂退格布局的用户。两套配列在坐标上共用大部分矩阵位置仅在第一行 Backspace 区域有所差异选配LAYOUT_split_bs后还需自行编写对应的键位文件并填写 100 个键值6 行 × 16 列中有效键位为 100 个左右含 2U/1.5U 等异形键帽的坐标与宽度由x/y/w/h字段描述。每一行的坐标布局完整体现了全尺寸键盘的物理排布第一行w为 2 的 Backspace、x: 15.25处的空隙分隔主键区与导航/小键盘区第二行w为 1.5 的 Tab 与右 Shift 区第三、四行w1.75 的 Caps/左 Shift、w2.25 的 Enter/Shift 等空格行1.25U、7U 空格、1.25U 等分段布局。这些x/y/w/h元数据不仅服务于配列宏生成同时也为 QMK Configurator 等可视化工具提供了布局描述依据。总结TriangleLabs AL1 在 QMK 中的实现是数据驱动配置 自定义矩阵 复用器扩展三者结合的典型范例keyboard.json以声明式方式完整描述了 USB 标识、特性开关、背光与指示灯matrix.c借助 QMK 的CUSTOM_MATRIX lite框架与sn74x154通用驱动仅用 5 个引脚4 地址 1 使能就完成了 16 列的扫描选通大幅节省了主控 IO。对于希望在自己的键盘上通过 74HC154/74HC138 一类线选芯片扩展矩阵的开发者AL1 的这套实现matrix.c sn74x154.c rules.mk是一份可直接参照的完整范本而对于 AL1 用户make al1:default一条命令即可获得开箱即用的全尺寸键位与背光/小键盘/DFU 刷写支持。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表