资讯动态

QMK Nearfield 键盘矩阵深度解析:ASCII 矩阵图、行列引脚分配与键位布局映射

发布时间:2026/9/18 21:37:36 来源:尧图企业网站定制
QMK Nearfield 键盘矩阵深度解析ASCII 矩阵图、行列引脚分配与键位布局映射【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware本文以 QMK 固件仓库中 Cannonkeys Nearfield 键盘的矩阵图文档keyboards/cannonkeys/nearfield/matrix_diagram.md为核心完整解读其 5×16 矩阵的 ASCII 示意图并结合该键盘的keyboard.json配置与默认键区keymap源码讲清楚每个按键的行列坐标、行列线对应的 MCU 引脚、二极管方向COL2ROW的含义以及如何基于这份矩阵完成make nearfield:default编译与烧录。矩阵图原文一张 ASCII 图看懂 Nearfield 的键位坐标仓库中的 matrix_diagram.md 给出了 Nearfield 完整的矩阵示意图原文如下┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ │00 │01 │02 │03 │04 │05 │ │06 │07 │08 │09 │0A │0B │0C │ │0D │0E │0F │ └───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┘ ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ │10 │11 │12 │13 │14 │15 │ │16 │17 │18 │19 │1A │1B │1C │ │1D │1E │1F │ ├───┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤ ├───┼───┼───┤ │20 │21 │22 │23 │24 │25 │ │26 │27 │28 │29 │2A │2B │ │2D │2E │2F │ ├────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐ └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬────┤ └───┴───┴───┘ │30 │31 │32 │33 │34 │35 │ │36 │37 │38 │39 │3A │3B │ ┌───┐ ├────┬─┴──┬┴───┼───┼───┴───┤ ├───┴───┴┬──┴─┬─┴──┬┴────┤ │4C │ │40 │ │41 │43 │44 │ │46 │48 │ │4A │ ┌───┼───┼───┐ └────┘ └────┴───┴───────┘ └────────┴────┘ └─────┘ │4D │4E │4F │ └───┴───┴───┘ ┌───────────┐ 3u Space │43?? │ └───────────┘图中每个单元格的十六进制编号就是该按键在固件中的行高位 列低位坐标例如1A表示第 1 行、第 100xA列4F表示第 4 行、第 15 列。由此可以直接读出 Nearfield 的矩阵规模5 行04图中纵向编号 0x4x16 列0x00xF每行横向编号 0F总计 5 × 16 80 个矩阵位置其中大部分实际布键少数位置空缺。从图中可以观察到三个视觉分区中间刻意留白左半区列 0x00x5字母区左侧 6 列右半区列 0x60xC字母区右侧 7 列导航区列 0xD0xF右侧独立的 3 列方向键/编辑键区。这种留白并非矩阵不连续而是用于在示意图中区分左右键盘体——从 readme.md 的描述可以确认Nearfield 是基于 LZ ErGO 的人体工学分体设计两半字母区各向键盘中心旋转 15°并沿用 C3 子板方案、推荐 100mm JST 排线。图中的合并框如40下方横跨 3 列的大格、46/4A的宽格代表大键一个物理键帽覆盖多个矩阵位置。底部标注的3u Space │43??│特别指出了空格区的特殊处理——在 3u 空格版本中左空格跨 3 个单位宽度对应图中41至43一带的位置见下文LAYOUT_3u_space的说明。矩阵坐标如何落到引脚keyboard.json 中的 matrix_pins矩阵图只回答“按键在哪一行哪一列”而 keyboard.json 则回答“行列线接到芯片的哪个引脚”。关键配置片段如下matrix_pins: { cols: [D3, D5, C6, C7, B6, B5, B7, F0, F1, F4, F5, F6, F7, B3, B2, D1], rows: [B4, D2, D4, D6, D7] }, diode_direction: COL2ROW, processor: atmega32u4, bootloader: atmel-dfu, debounce: 0由此可以得到完整的行列引脚对照表列号与矩阵图横向编号一一对应矩阵列0123456789101112131415列引脚D3D5C6C7B6B5B7F0F1F4F5F6F7B3B2D1矩阵行01234行引脚B4D2D4D6D7也就是说矩阵图中的按键1A第 1 行第 10 列在硬件上对应“行引脚 D2 与列引脚 F5 通过该按键的开关闭合而导通”。几个值得注意的配置事实diode_direction: COL2ROW二极管阳极朝向列线、阴极朝向行线。QMK 在 quantum/matrix.h 中定义了两种方向宏#define COL2ROW 0与#define ROW2COL 1扫描时序会根据该方向决定“驱动列读行”还是“驱动行读列”。processor: atmega32u416 个列引脚 5 个行引脚均使用该 AVR 芯片的普通 IOD 口、C 口、B 口、F 口引脚名与 ATmega32U4 的端口命名一致。debounce: 0键去抖延迟配置为 0 ms即固件层不做软件去抖等待去抖行为交由硬件/默认路径处理这一取值在 readme.md 的构建说明中虽未提及但在keyboard.json中是明确的。featureskeyboard.json同时开启了bootmagic、extrakey、mousekey、nkro四项能力。其中nkroN-Key Rollover意味着该板以全二极管化矩阵工作与 docs/how_a_matrix_works.md 中讲解的原理一致矩阵扫描会逐列输出高电平并读取行电平每个按键位串联的二极管阻断“鬼键”通路使多键同按时每个被按下的行列组合都能被独立识别。从源码结构看quantum/matrix.h 根据列数选择行状态字的宽度Nearfield 恰好 16 列落入MATRIX_COLS 16分支每行状态用uint16_t表示一次扫描即可读回整行 16 列的位图这也解释了为什么矩阵图能按“一行 16 个十六进制编号”来排版。矩阵图与默认键区的逐行对应默认键区位于 keymaps/default/keymap.c其结构是 QMK 标准的keymaps[][MATRIX_ROWS][MATRIX_COLS]即“层 × 行 × 列”的二维展开。对照矩阵图可以验证每一行的键位落点[0] LAYOUT_all( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INS, KC_HOME, KC_PGUP, // 行00x00-0x0F KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_INS, KC_HOME, KC_PGUP, // 行10x10-0x1F KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_DEL, KC_END, KC_PGDN, // 行20x20-0x2F KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, // 行30x30-0x3B3C-3F 空 KC_LCTL, KC_LALT, KC_SPC, KC_NO, KC_SPC, KC_LALT, KC_LCTL, KC_UP, KC_LEFT, KC_DOWN, KC_RIGHT // 行40x40,0x41,0x43-0x4F )对照要点行 0行 3 是连续的 16 列与矩阵图前四行的一字排开完全一致行 3 只布到列 113B右 Shift3C3F在矩阵图中即为空白位键区数组中用位置省略表达。行 4 是空格行对应矩阵图最下方一行的合并格40左 Ctrl、41左 Alt、43左空格、44KC_NO占位、46右空格、48右 Alt、4A右 Ctrl随后是4C上、4D左、4E下、4F右。矩阵图底部那个标注3u Space │43??│的框正是提示左空格键帽尺寸与43位置的关系——在 3u 空格版本里左空格向右跨到43这与 keyboard.json 中LAYOUT_3u_space把[4, 3]位置定义为w: 3的 3u 空格相符而LAYOUT_all中左空格[4, 3]为 1u、[4, 4]位置单独存在对应KC_NO占位两个布局宏共用同一张 5×16 矩阵仅键帽宽度不同。大键与矩阵位置一一对应例如LAYOUT_all里KC_CAPS位于行 2 列 0201.25uKC_ENT位于行 2 列 112B1.75uKC_LSFT位于行 3 列 0301.75u——矩阵图行 2、行 3 的加宽合并框与这些w值互相印证。需要说明的是默认键区里KC_NO只表示“该矩阵位置不产生任何键值”并不删除矩阵扫描位置它仍会被固件扫描只是不会产生动作。构建与烧录从矩阵配置到固件产物确认矩阵理解无误后实际构建只需一条命令来自 readme.mdmake nearfield:defaultQMK 构建系统在编译该键盘时会由 CLI 读取 keyboard.jsonmatrix_pins生成MATRIX_ROW_PINS/MATRIX_COL_PINSdiode_direction生成二极管方向宏processor: atmega32u4决定 AVR 工具链debounce: 0传入去抖参数最终产物是带atmel-dfu启动加载器的.hex文件。烧录后进入 Bootloader 的三种方式Bootmagic reset按住键盘左上角第一个键即矩阵位置00也就是上表列 0 / 行 0 的KC_GRV同时插入 USB物理复位轻按 PCB 背面的复位按键键码布局中若存在QK_BOOT按下即可Nearfield 默认键区未映射该键码。Bootmagic 与nkro特性均由keyboard.json的features字段声明这也是“矩阵图 配置 键区”三件套共同作用的结果矩阵图给人看坐标keyboard.json给构建系统看引脚与能力keymap.c给固件看每个坐标发什么键值。小结Nearfield 的矩阵为5 行 × 16 列十六进制单元格行号列号即固件中的坐标矩阵图以留白区分左右字母区与右侧 3 列导航区行引脚为B4/D2/D4/D6/D716 个列引脚为D3/D5/C6/C7/B6/B5/B7/F0/F1/F4/F5/F6/F7/B3/B2/D1二极管方向COL2ROW运行于 ATmega32U4 之上均可在 keyboard.json 中核实大键左空格 1u/3u 两版、Enter、Shift 等通过矩阵图中的合并框与LAYOUT_all/LAYOUT_3u_space的w字段互相印证理解这套“图—配置—键区”映射关系后你可以按 docs/how_a_matrix_works.md 的扫描原理核对自定义行列接线也能在修改键区时准确定位每个KC_宏对应的物理行列位置。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价