ARTICLE DETAIL

资讯详情

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

AMJ40 默认键位映射深度解析:基于 QMK 固件的 40% 键盘分层布局实战指南

AMJ40 默认键位映射深度解析:基于 QMK 固件的 40% 键盘分层布局实战指南 AMJ40 默认键位映射深度解析基于 QMK 固件的 40% 键盘分层布局实战指南【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmwareAMJ40 是一款已停产的 DIY/成品 40% 机械键盘本篇文章以其默认键位映射default keymap为核心完整拆解这套融合 TMK 传统与 Planck 正交键盘分层思想的固件实现。读完本文你将掌握 QMK 中 QWERTY/LOWER/RAISE/ADJUST 四层布局的设计方法、LT()层切换与三键层联动tri-layer的源码级原理以及背光与 RGB 下灯效控制的完整配置思路。AMJ40 键盘与默认 keymap 概览AMJ40 是位于 keyboards/amjkeyboard/amj40/readme.md 下的紧凑型 40% 键盘其默认键位映射文档 keyboards/amjkeyboard/amj40/keymaps/default/readme.md 明确给出了三个核心设计要点默认 keymap 融合了 TMK 固件中的原始 AMJ40 键位以及 Planck 正交键盘的Lower、Raise、Adjust分层思想完整的键位分布以 keymaps/default/keymap.c 为权威参考该 keymap 提供了同时控制开关轴体 LED背光与下灯 RGBunderglow的按键。从 keyboards/amjkeyboard/amj40/keyboard.json 可以看到该键盘的硬件基础主控为atmega32u4、引导加载器为atmel-dfuUSB 标识 VID0x00D8/ PID0x6072矩阵为 4 行 × 12 列COL2ROW硬件层面已启用backlight、bootmagic、extrakey、mousekey、nkro、rgblight等功能特性背光引脚为B64 级亮度WS2812 下灯引脚为D34 颗 LED。默认 keymap 的四个层QWERTY / LOWER / RAISE / ADJUST默认 keymap 通过枚举定义了四个层keymap.cenum layer_names { _QWERTY, _LOWER, _RAISE, _ADJUST, };第一层QWERTY默认打字层默认层为 12 列紧凑布局底行采用左右对称的功能键与空格设计keymap.c[_QWERTY] LAYOUT( KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LCTL, KC_LGUI, KC_LALT, LT1_SPC, LT2_SPC, LT3_LGU, KC_RALT, KC_RCTL ),底行是这套 keymap 的灵魂所在三个宏定义将空格和修饰键与层切换绑定在一起keymap.c#define LT1_SPC LT(_LOWER, KC_SPC) /* 按下空格长按进入 LOWER 层 */ #define LT2_SPC LT(_RAISE, KC_SPC) /* 按下空格长按进入 RAISE 层 */ #define LT3_LGU LT(_ADJUST, KC_LGUI) /* 按下左 GUI长按进入 ADJUST 层 */LT(layer, key)是 QMK 的 Layer-Tap 键码短按触发普通键功能按住超过TAPPING_TERM则切入指定层。这里将两个空格分别映射为 LOWER 与 RAISE 入口而右数第二颗键通常的右 Alt 位置被改造成LT3_LGU——日常作为左 GUI 修饰键长按即可进入 ADJUST 层实现一颗键两个用途。LOWER 层HHKB 风格的符号与功能键LOWER 层注释自述为 Function Layer 1 HHKB style承担数字上档符号与 F 键功能keymap.c[_LOWER] LAYOUT( KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), BL_TOGG, BL_UP, BL_DOWN, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT ),该层集中体现了 40% 键盘少键多能的哲学第一行映射~ ! # $ % ^ * ( )等 Shift 组合符号第二行是F1~F6并补充_ { } |第三行是F7~F12同时放置了背光控制键BL_TOGG开关背光、BL_UP亮度、BL_DOWN亮度-底行使用_______透明占位符沿用下层键位右侧KC_LEFT/KC_DOWN/KC_UP/KC_RGHT组成方向键。RAISE 层数字行与符号补充RAISE 层提供完整数字行、括号等符号以及 RGB 控制keymap.c[_RAISE] LAYOUT( KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______, _______, UG_TOGG ),与 LOWER 层配合LOWER RAISE 的组合将自动切入 ADJUST 层见下文 tri-layer 机制。RAISE 层的亮点数字1~0、-、、[、]、\集中在首两行KC_NUHS非美式反斜杠\、KC_NUBS非美式井号#照顾非美式布局用户底行最右侧UG_TOGG用于开关下灯 RGB与 LOWER 层的背光控制形成一个层管轴灯、一个层管下灯的分工。ADJUST 层系统控制与 RGB 调色板ADJUST 层集合了重启、音频开关、键位交换与 RGB 特效调节keymap.c[_ADJUST] LAYOUT( _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, _______, UG_TOGG, UG_NEXT, UG_HUEU, UG_HUED, UG_SATU, UG_SATD, UG_VALU, UG_VALD, KC_SLEP, _______, _______, _______, _______, _______, _______, _______ ),各键位的实际作用如下表键位功能说明QK_BOOT进入引导加载程序用于重新刷写固件AU_ON/AU_OFF开启/关闭音频依赖键盘硬件是否具备蜂鸣器AG_NORM/AG_SWAP恢复/交换 Alt 与 GUI 键macOS 与 Windows 之间切换的利器UG_TOGG开关下灯 RGB与 RAISE 层一致UG_NEXT切换下一个 RGB 特效UG_HUEU/UG_HUED色相 / 色相 -UG_SATU/UG_SATD饱和度 / 饱和度 -UG_VALU/UG_VALD亮度 / 亮度 -KC_SLEP系统睡眠依赖extrakey特性KC_DEL删除从 keyboard.json 的rgblight配置看该键盘固件默认启用了breathing、rainbow_mood、rainbow_swirl、snake、knight、christmas、static_gradient、rgb_test、alternating、twinkle共 10 种动画色相步进为 10UG_NEXT正是在这些动画之间循环切换。自定义键码与 tri-layer 联动机制默认 keymap 定义了 4 个自定义键码keymap.cenum custom_keycodes { QWERTY SAFE_RANGE, LOWER, RAISE, ADJUST, };并通过process_record_user()钩子实现手动层管理keymap.cbool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case LOWER: if (record-event.pressed) { layer_on(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_LOWER); update_tri_layer(_LOWER, _RAISE, _ADJUST); } return false; break; case RAISE: if (record-event.pressed) { layer_on(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } else { layer_off(_RAISE); update_tri_layer(_LOWER, _RAISE, _ADJUST); } return false; break; case ADJUST: if (record-event.pressed) { layer_on(_ADJUST); } else { layer_off(_ADJUST); } return false; break; } return true; }关键点在于update_tri_layer()的调用时机无论按下还是抬起 LOWER/RAISE都重新计算 tri-layer 状态。其底层实现在 quantum/action_layer.clayer_state_t update_tri_layer_state(layer_state_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { layer_state_t mask12 ((layer_state_t)1 layer1) | ((layer_state_t)1 layer2); layer_state_t mask3 (layer_state_t)1 layer3; return (state mask12) mask12 ? (state | mask3) : (state ~mask3); } void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) { layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3)); }这套逻辑可以概括为一句规则当 LOWER 与 RAISE 同时处于激活状态时自动叠加 ADJUST 层只要其中一个释放ADJUST 层立即撤销。这使得用户无需为 ADJUST 单独安排常驻按键——默认 keymap 中LT3_LGU长按也可直达 ADJUST两条路径并行不悖。layer_on()/layer_off()声明位于 quantum/action_layer.h是 QMK 最基础的层状态接口。需要说明的是虽然自定义键码LOWER/RAISE/ADJUST已通过process_record_user完整实现适合在此基础上扩展互斥、锁定等行为但默认 keymap 的四个层并未直接使用这些自定义键码而是通过LT()宏完成层切换自定义键码作为可扩展的能力保留在源码中。四套官方 keymap 的横向对比AMJ40 在 keyboards/amjkeyboard/amj40/keymaps 下提供了四套官方 keymap分别适配不同空格配列keymap 目录使用的布局宏空格长度特点defaultLAYOUT2.25u 2.75u 双空格四层 tri-layer 背光/RGB 控制功能最全default_625u_spaceLAYOUT_625u_space6.25u 单空格三层数字/F 键布局LT()挂载在;与上default_ortho_600u_spaceLAYOUT_ortho_600u_space6u 单空格全正交 12×4 排列MO()瞬时层切换default_ortho_275u_spaceLAYOUT_ortho_275u_space2.75u 单空格全正交排列 方向键兼顾符号与 F 键default_625u_spacekeymap.c将LT(1, KC_SCLN)与LT(2, KC_QUOT)挂在;与上空格保持常规单空格第二层放数字与括号第三层放 F 键与背光、方向键default_ortho_275u_spacekeymap.c是接近 Planck 的正交配列MO(1)触发符号层、LT(2, KC_SLSH)触发数字/F 键层并把↑ ← ↓ →常驻于底行与第三行default_ortho_600u_spacekeymap.c为 6u 单空格正交配列MO(1)/MO(2)分别提供数字符号层与 F 键/背光层。对比可见default 版之所以被称为默认在于它完整继承了 TMK 时代的 AMJ40 配列直觉又通过 LOWER/RAISE/ADJUST 三层把 40% 键盘的符号、数字、功能键、方向键、RGB 调节全部收纳于三颗拇指区按键之上。构建与刷写方法在完成 QMK 构建环境配置后AMJ40 的默认 keymap 可通过以下命令编译与烧录keyboards/amjkeyboard/amj40/readme.md# 编译默认 keymap make amjkeyboard/amj40:default # 编译并刷写 make amjkeyboard/amj40:default:flash # 其他 keymap 同理 make amjkeyboard/amj40:default_625u_space make amjkeyboard/amj40:default_ortho_600u_space make amjkeyboard/amj40:default_ortho_275u_space如需将键盘复位进入 bootloader 模式可以按住键盘左上角第一颗键Esc 位置的同时插入 USB 数据线——这也是 keyboard.json 中启用bootmagic特性所提供的复位捷径注意该操作会同时清除持久化设置。进入 bootloader 后也可借助固件内QK_BOOT键ADJUST 层第一行第二颗完成同样的复位。总结AMJ40 默认 keymap 是一份极具学习价值的 40% 键盘分层设计范本它以LT()层切换键将双空格底行改造成 LOWER/RAISE 入口以update_tri_layer()实现 LOWER RAISE 同时按下自动进入 ADJUST 的三层联动并通过BL_*与UG_*键码把背光、下灯 RGB 的控制权完整交还用户。无论你是 AMJ40 用户想要微调键位还是希望借鉴一套经过验证的 40% 分层方案都可以直接以 keymaps/default/keymap.c 为起点结合 keyboard.json 中的硬件配置进行二次开发。【免费下载链接】qmk_firmwareOpen-source keyboard firmware for Atmel AVR and Arm USB families项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表