news 2026/9/16 13:50:27

QMK 矩阵图深度解析:Acheron × DriftMechanics Austin 1800 键盘的矩阵坐标、特殊键位与 WKL/ISO 布局

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QMK 矩阵图深度解析:Acheron × DriftMechanics Austin 1800 键盘的矩阵坐标、特殊键位与 WKL/ISO 布局

QMK 矩阵图深度解析:Acheron × DriftMechanics Austin 1800 键盘的矩阵坐标、特殊键位与 WKL/ISO 布局

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

Acheron 与 DriftMechanics 联合推出的 Austin(代号 1800CP-SM-S-STM32-MX-TH-WI)是一款 1800 配列客制化键盘,其 PCB 遵循 Acheron Open-Hardware 规范。本文以仓库中 matrix_diagram.md 的矩阵图为骨架,结合 keyboard.json 中真实的矩阵引脚定义、布局描述与 keymap.c 键位映射,逐区讲解如何阅读这张"键盘矩阵地图",理解 2u Backspace、ISO Enter、2.25u LShift、2u 数字键盘 0 以及 WKL 底排等特殊键位的矩阵坐标来源,并最终落地到固件编译。读完本文,你将掌握"矩阵图 → 布局 JSON → keymap.c → 可烧录固件"的完整链路。

一、什么是矩阵图:键盘固件的第一张"地图"

机械键盘的每一个按键并不会独占一个 MCU 引脚,而是通过"行 × 列"交叉扫描的方式来读取——按下某个键,等效于把对应的行与列短路。因此,固件里任何一个按键都必须用[row, col]两个坐标来定位。Austin 的矩阵图正是把 1800 配列的每一个物理键位与矩阵坐标一一对应的权威文档,也是编写LAYOUT_*布局与keymap.c的坐标依据。

从 keyboard.json 可以确认 Austin 的物理矩阵规模:

  • cols:19 列,引脚依次为B10, B11, B12, B13, B14, B15, A8, A9, A10, A5, A15, B3, B4, B5, B8, A3, C15, C14, F1
  • rows:6 行,引脚为C13, A4, A7, B0, B1, B2
  • diode_directionCOL2ROW(二极管方向为列到行)。

这正是矩阵图中所有坐标值落在6 行(0~5)× 19 列(0~18)范围内的原因。19 列用十进制会超过一位数,因此矩阵图沿用了十六进制风格的标记:第 15、16、17、18 列分别写作FGHI

矩阵图原文如下(完整保留):

┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┐┌───┬───┬───┬───┐ │00 ││01 │02 │03 │04 ││05 │06 │07 │08 ││09 │0A │0B │0C ││0D ││0E ││0F │0G │0H │0I │ └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┘└───┴───┴───┴───┘ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┐┌───┬───┬───┬───┐ ┌───────┐ │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E ││1F ││1G │1H │1I │5I │ │1E │ 2u Backspace ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┤├───┼───┼───┼───┤ └─┬─────┤ │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D ││2E ││2F │2G │2H │ │ │ │ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤├───┤├───┼───┼───┤3I │ ┌──┴┐2D │ ISO Enter │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C ││3E ││3F │3G │3H │ │ │3C │ │ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┘└───┘├───┼───┼───┼───┤ └───┴────┘ │40 │41 │42 │43 │44 │45 │46 │47 │48 │49 │4A │4B │4C │┌───┐ │4F │4G │4H │ │ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┘│4D │ ├───┼───┼───┤4I │ │50 │51 │52 │55 │59 │5A │┌───┼───┼───┐│5F │5G │5H │ │ └────┴────┴────┴────────────────────────┴─────┴─────┘│5B │5C │5E │└───┴───┴───┴───┘ └───┴───┴───┘ ┌────────┐ ┌────────┐ │40 │ 2.25u LShift │5F │ 2u Numpad Zero └────────┘ └────────┘ ┌─────┬─────┬───────────────────────────┬─────┬─────┐ │50 │51 │55 │59 │5A │ WKL └─────┴─────┴───────────────────────────┴─────┴─────┘

坐标格式为行列:第一个字符是行号(0~5),第二个字符是列号(0~9 与 A~I)。例如1E表示第 1 行、第 14 列;5I表示第 5 行、第 18 列(数字键盘的-)。图中的单元格宽度对应键帽的物理宽度,所以1.5u2u2.25u6.25u等宽度信息可以直接从格子的大小读出来。

二、逐区解读:从功能行到数字键盘

2.1 功能行(第 0 行):00~0I

第 0 行共 19 键,与 19 列一一对应,是矩阵图中最简单规整的一行:

  • 00:Esc;
  • 0104:F1~F4;
  • 0508:F5~F8;
  • 090C:F9~F12;
  • 0D:Print Screen;
  • 0E:Scroll Lock;
  • 0F:Pause;
  • 0G:Home;
  • 0H:End;
  • 0I:Delete。

该行在 keyboard.json 的LAYOUT_all中被逐一声明,例如{"label": "Esc", "matrix": [0, 0], ...}{"label": "Delete", "matrix": [0, 18], ...},坐标与矩阵图完全一致。

2.2 数字行(第 1 行):2u Backspace 与数字键盘顶行

第 1 行是全键盘信息密度最高的一行:

  • 101C`10-=
  • 1D1E两个 Backspace 位置,右侧注释明确标注1E 2u Backspace。当使用 2u 大 Backspace 时,只占用1E一个矩阵位置(见LAYOUT_ansi{"label": "Backspace", "matrix": [1, 14], "w": 2});当使用分体 Backspace 时,1D1E各放一个 1u Backspace(见LAYOUT_allLAYOUT_ansi_split_bs);
  • 1F:Insert;
  • 1G:Num Lock;
  • 1H/(数字键盘);
  • 1I*(数字键盘);
  • 5I:数字键盘-这是一个跨行坐标——它虽然与数字键盘顶行同一水平线,但矩阵位置在第 5 行、第 18 列。这与 keyboard.json 中{"label": "-", "matrix": [5, 18], "x": 19.5, "y": 1.25}完全吻合,也解释了为什么-键的 y 坐标(1.25)与*键相同却使用第 5 行。

2.3 Tab 行(第 2 行):ISO Enter 的两格形态

  • 20:Tab(1.5u);
  • 212C:Q、W、E、R、T、Y、U、I、O、P、[]
  • 2D\(1.5u,ANSI 配列);
  • 2E:Page Up;
  • 2F2G2H:数字键盘 7、8、9。

右侧注释ISO Enter对应图中┌──┴┐2D ... │3C │的标注:在 ISO 配列下,回车键跨越第 2 行与第 3 行,其矩阵位置为[2, 13](即 2D),而3C[3, 12])位置放置的是 ISO 独有的#键。这与 keyboard.json 中LAYOUT_iso的定义一致:{"label": "#", "matrix": [3, 12], ...}加上{"label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2}。可见矩阵图中的格子宽度只反映键帽宽度,ISO 回车这种"竖跨两行"的键需要结合行号与高度(h: 2)才能完整表达。

2.4 Caps Lock 行(第 3 行):2.25u 回车与+

  • 30:Caps Lock(1.75u);
  • 313B:A、S、D、F、G、H、J、K、L、;'
  • 3C:ANSI 配列下为 Enter(2.25u);ISO 配列下为#(见上文);
  • 3E:Page Down;
  • 3F3G3H:数字键盘 4、5、6;
  • 3I:数字键盘+,其矩阵位置为[3, 18],并在 keyboard.json 中声明为"h": 2,即数字键盘+是一个纵向占两格的键。

2.5 Shift 行(第 4 行):2.25u LShift 与方向键

  • 40:左 Shift,注释明确标注为 2.25u LShift(见矩阵图下方┌────────┐ │40 │ 2.25u LShift └────────┘)。在LAYOUT_ansi中对应{"label": "Shift", "matrix": [4, 0], "w": 2.25};而在LAYOUT_all/LAYOUT_iso中,[4, 0]变为 1.25u 的 Shift,并额外启用41[4, 1])作为 ISO\键;
  • 424C:Z、X、C、V、B、N、M、,./、右 Shift;
  • 4D:上方向键([4, 13]);
  • 4E:图中为空位(┌───┐围起的空槽),对应 ANSI 配列下 Shift 行 2.25u 左 Shift 挤占后空出的物理位置;
  • 4F4G4H:数字键盘 1、2、3;
  • 4I:数字键盘 Enter,矩阵位置[4, 18],在 keyboard.json 中声明为"h": 2,与数字键盘+类似纵向占两格。

2.6 底排(第 5 行):标准排与 WKL 排

第 5 行是配列差异最大的区域,矩阵图用两种形式给出了同一行的不同键帽方案:

标准(非 WKL)底排:

  • 50:Ctrl(1.25u);
  • 51:GUI / Win(1.25u);
  • 52:Alt(1.25u);
  • 55:Space(6.25u);
  • 59:右 Alt(1.5u);
  • 5A:右 Ctrl(1.5u);
  • 5B5C5E:←、↓、→ 三个方向键(注意5D不存在,方向键之间的空隙不占用矩阵位置);
  • 5F5G:数字键盘 0,二者合并构成2u Numpad Zero(矩阵图底部注释│5F │ 2u Numpad Zero即指5F+5G两格合并为 2u 键帽);
  • 5H:数字键盘.(小数点)。

WKL 底排(矩阵图底部┌─────┬─────┬─────...┐ │50 │51 │55 ... │59 │5A │ WKL):

  • 5051变为各 1.5u 的 Ctrl 与 Alt,同时删除 GUI / Win 键
  • 55变为 7u Space;
  • 595A保持 1.5u 的 Alt 与 Ctrl。

这与 keyboard.json 中LAYOUT_ansi_wkl的定义一一对应:Ctrl [5,0] w:1.5Alt [5,1] w:1.5Space [5,5] w:7。也就是说,同一套物理矩阵、同一批引脚,仅仅改变布局 JSON 中的宽度与占位,就能在"标准底排"与"WKL 底排"之间切换,这正是数据驱动配置(data-driven config)的价值所在。

三、从矩阵图到固件:布局 JSON 与 keymap.c 的对应关系

矩阵图并不直接参与编译,它需要经过两层"翻译"才能变成固件:

第一层:布局描述(LAYOUT_*)。keyboard.json 中定义了 8 个布局宏:LAYOUT_allLAYOUT_ansiLAYOUT_ansi_split_bsLAYOUT_ansi_wklLAYOUT_ansi_wkl_split_bsLAYOUT_isoLAYOUT_iso_split_bsLAYOUT_iso_wkl。每个布局条目都携带matrix: [row, col]坐标、x/y视觉坐标以及可选的w/h键帽尺寸,矩阵坐标全部来自矩阵图。例如矩阵图中的1E(2u Backspace)在LAYOUT_ansi中就是{"label": "Backspace", "matrix": [1, 14], "w": 2}

第二层:键值映射(keymap.c)。以 default/keymap.c 为例,它通过LAYOUT_all(...)宏按行依次给出每个矩阵位置的键值:

[0] = LAYOUT_all( KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , /* ... */ KC_HOME, KC_END , KC_DEL , KC_GRV , KC_1 , /* ... */ KC_BSPC, KC_BSPC, KC_INS , KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, /* ... */ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0 , KC_P0 , KC_PDOT )

可以看到LAYOUT_all中两个KC_BSPC(对应[1,13][1,14]的分体 Backspace)以及末尾两个KC_P0(对应[5,15][5,16]合并成的 2u 数字键盘 0)——矩阵图中每一个坐标位置都需要一个键值参数,参数的个数与顺序必须与布局宏严格一致。

仓库为 Austin 提供了 8 套官方键位,分别覆盖 ANSI/ISO × 标准底排/WKL × 整体/分体 Backspace 的全部组合:

  • default(LAYOUT_all全键位)
  • default_ansi
  • default_ansi_split_bs
  • default_ansi_wkl
  • default_ansi_wkl_split_bs
  • default_iso
  • default_iso_split_bs
  • default_iso_wkl

以 default_iso/keymap.c 为例,ISO 配列在键值层的差异主要体现在:KC_NUHS(对应[3,12]#)、KC_NUBS(对应[4,1]的 ISO\),以及回车键位置的调整——这些位置正是矩阵图中标注ISO Enter的区域。

四、矩阵图的读图技巧小结

  1. 先定范围:Austin 为 6 行 × 19 列(COL2ROW),坐标第一个字符永远是 0~5,第二个字符是 0~9 或 A~I。
  2. 跨行键看高度:ISO 回车([2,13],h:2)、数字键盘+[3,18],h:2)、数字键盘 Enter([4,18],h:2)在矩阵图中以"竖跨两行"的格子绘制,实际只占用一个[row, col]坐标,靠h属性表达。
  3. 合并键看宽度:2u Backspace(1E)、2.25u LShift(40)、2u 数字键盘 0(5F+5G)在布局 JSON 中通过w宽度与"同一键值填两个坐标"两种方式实现;矩阵图底部专门用注释标出这三个特殊键。
  4. 同列可跨行:数字键盘-位于5I(第 5 行、第 18 列),与同排的*/并不同行,读图与写 keymap 时务必以坐标为准,不要以视觉位置臆断。
  5. 矩阵图不唯一:矩阵图描述的是 PCB 上的物理矩阵,LAYOUT_all是全键位超集;其他 7 个LAYOUT_*是它的子集,用于在不同键帽方案下复用同一块 PCB。

五、验证与编译:让矩阵图"跑"起来

矩阵图给出的坐标与 keyboard.json 的matrix字段一一对应,可通过 QMK 的调试手段验证扫描结果是否符合预期:开启console特性(Austin 的 keyboard.json 已启用)后,按下任一按键可在调试输出中看到其矩阵坐标,与矩阵图对照即可确认读图正确。

编译任一官方键位只需在 QMK 环境就绪后执行:

make acheron/austin:default # LAYOUT_all 全键位 make acheron/austin:default_ansi # ANSI 底排 make acheron/austin:default_iso # ISO 配列 make acheron/austin:default_ansi_wkl # ANSI + WKL 底排

固件烧写依赖 STM32F072 的stm32-dfu引导加载器(见 keyboard.json),编译产出为 DFU 格式镜像,可配合 QMK 官方烧录流程写入。若需自定义键位,最稳妥的做法是以上述任一官方 keymap 为模板,对照 matrix_diagram.md 与对应LAYOUT_*宏的行列顺序逐参数改写,即可保证每个键值落到正确的物理按键上。

六、总结

Austin 的矩阵图虽然只有一张 ASCII 图,却是连接"PCB 物理矩阵"与"固件键位逻辑"的核心文档。通过将 6×19 矩阵坐标、2u Backspace、ISO Enter、2.25u LShift、2u 数字键盘 0、WKL 底排这些特殊键位逐一映射到 keyboard.json 的布局定义,再落到 keymaps 下 8 套官方键位的keymap.c,你可以清楚地看到一块 1800 配列 PCB 如何在 ANSI/ISO、WKL/标准底排、整体/分体 Backspace 之间灵活复用同一套矩阵资源。掌握矩阵图的读法,是后续自定义 Austin 键位、甚至移植其他 1800 配列键盘时最扎实的一步。

【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 13:48:09

Dify 工作流从零到一:3 步导入 40 多个免费 DSL 模板的实战指南

Dify 工作流从零到一:3 步导入 40 多个免费 DSL 模板的实战指南 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awes…

作者头像 李华
网站建设 2026/9/16 13:44:17

ThinkPHP收卡系统实践:卡密表设计、并发锁卡与对账机制

简介:新版运营版收卡网源码(ThinkPHP收卡系统)专为卡券回收平台搭建者设计,面向需要快速上线礼品卡、电子券、卡密回收业务的开发者和运营者。系统直接面对用户提交卡号卡密完成回收交易,可解决礼品卡闲置、资金回流缓…

作者头像 李华
网站建设 2026/9/16 13:44:09

C# 上位机通过 OPC DA 与 KEPServerEX 实现多 PLC 数据采集实战

简介:C#开发者或工业自动化工程师如果需要在.NET环境中与OPC Server通信,这份源码提供了一套开箱即用的解决方案。它基于KEPServerEX V5.14完成亲测,能够通过OPC DA方式读写多种品牌PLC数据,代码按抽象设备统一封装,无…

作者头像 李华
网站建设 2026/9/16 13:39:55

STM32F4扫频阻抗测试仪设计与HAL定制实践

简介:本资源为2019年全国大学生电子设计竞赛(电赛)‘简易电路特性测试仪’赛题的完整实现方案,面向本科阶段备赛或复盘的电子类、自动化、通信等专业学生,聚焦模拟电路参数测量与嵌入式系统开发能力提升。压缩包含124个…

作者头像 李华
网站建设 2026/9/16 13:39:49

IPAD协议857深度应用:构建企业级客户画像分析系统

ipad协议友情链接,点击即可访问。 背景与需求分析 随着企业客户规模扩大,业务人员与客户的微信沟通存在以下痛点: 1.沟通内容缺乏可视化监管 2.客户资源沉淀困难 3.会话数据分析难以实现 传统解决方案依赖人工抽查或专用设备(如iPad集中管理),存在成本高、扩展性差等问题…

作者头像 李华