news 2026/9/20 4:55:28

QMK 复古改造:Numeric Keypad IIe 默认键位详解与 USB 转换实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
QMK 复古改造:Numeric Keypad IIe 默认键位详解与 USB 转换实践

QMK 复古改造:Numeric Keypad IIe 默认键位详解与 USB 转换实践

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

导读

本文聚焦 QMK 固件仓库中keyboards/converter/numeric_keypad_iie这一经典改造项目——把苹果 Apple //e 时代的Numeric Keypad IIe(型号 A2M2003)外置数字键盘改装成现代 USB 键盘。文章以官方default键位图(readme)为核心,结合 keymap.c 源码与 keyboard.json 硬件配置,完整还原其按键映射、矩阵接线与编译烧录流程,让你能够理解并复现这一"旧硬件 + 新固件"的完整链路。


一、项目背景:从 Apple //e 主板接口到 USB

Numeric Keypad IIe 是苹果公司为 Apple //e 个人电脑推出的外置数字小键盘。它没有板载控制器,必须通过一根 DB15(外观同 VGA)固定线缆直接连接 Apple //e 主板的扩展接口。这意味着:键盘本身只有键轴矩阵和物理走线,没有任何"大脑"——这正是它能够被 QMK 复活的根本原因。

该项目(键盘维护者为 Adam Newbold)给出的参考改造方案是:

  1. 使用键盘自带的 DB15 固定线缆;
  2. 连接到一个 DB15 接线端子转接板(breakout board);
  3. 将转接板各引脚接到Arduino Micro(搭载 ATmega32U4 主控)上,由 QMK 固件负责扫描矩阵、生成 USB HID 报告。

支持硬件与器件信息:

  • 硬件:Numeric Keypad IIe 内部 PCB(Apple 零件号 820.0081.c)
  • 主控:ATmega32U4 微控制器
  • 构建命令make converter/numeric_keypad_iie:default

仓库中的converter目录下还汇集了其他类似的旧键盘转换项目(如adb_usbibm_terminalsun_usbxt_usb等,见 keyboards/converter),numeric_keypad_iie是其中针对 Apple 外设的典型案例,同一思路也适用于 M0110 等苹果经典键盘。


二、默认键位布局全景:与原装键帽一一对应

default键位图的设计原则非常朴素:所有按键都执行其原装键帽上印制的默认功能,不做任何自定义改动,最大限度还原 Apple //e 时代的操作习惯。

readme.md特别强调了唯一的例外与历史细节:"Print" 键被映射为问号(?)。这是因为在 Apple //e 的 AppleSoft BASIC 环境中,问号?PRINT命令的简写形式,因此原装键盘上这颗标有 "Print" 的键,其原始电气行为就是输出?——QMK 默认键位忠实地复刻了这一行为。

keymap.c中的布局注释以 ASCII 图示完整呈现了 24 键位结构:

+-------+ +-------+-------+-------+ +-------+-------+ | Esc | | 7 | 8 | 9 | | ( | ) | +-------+ +-------+-------+-------+ +-------+-------+ | <-- | | 4 | 5 | 6 | | - | / | +-------+ +-------+-------+-------+ +-------+-------+ | --> | | 1 | 2 | 3 | | + | * | +-------+ +--+-------+-------+-------+ +-------+-------+ | Space | | 0 | , | . | | Ret | Print | +-------+ +----------+-------+-------+ +-------+-------+

可以看到这是一块典型的四行数字键盘:左侧竖排是 Esc 与光标方向键(<---->、Space),中间是标准数字小键盘区,右侧是 Apple 风格的运算符号区(括号()-/+*),底行则是0、逗号、句号、回车与 Print。


三、源码级键位对照:每个按键的 QMK Keycode

keymap.c使用LAYOUT宏一次性定义全部 24 个键位,逐键对照如下(源码见 keymaps/default/keymap.c):

键帽标注QMK Keycode实际输出
EscKC_ESCAPEEsc
<--KC_LEFT左方向键
-->KC_RIGHT右方向键
SpaceKC_SPACE空格
7 / 8 / 9KC_KP_7/KC_KP_8/KC_KP_9小键盘数字
4 / 5 / 6KC_KP_4/KC_KP_5/KC_KP_6小键盘数字
1 / 2 / 3KC_KP_1/KC_KP_2/KC_KP_3小键盘数字
0KC_KP_0小键盘 0
,KC_KP_COMMA小键盘逗号
.KC_KP_DOT小键盘小数点
(KC_LEFT_PAREN左括号
)KC_RIGHT_PAREN右括号
-KC_KP_MINUS小键盘减号
/KC_KP_SLASH小键盘除号
+KC_KP_PLUS小键盘加号
*KC_KP_ASTERISK小键盘乘号
RetKC_RETURN回车
PrintKC_QUESTION问号?(AppleSoft BASIC 的 PRINT 简写)

其中几个值得注意的别名细节,可对照 quantum/keycodes.h 与 quantum/keymap_extras/keymap_us.h:

  • KC_LEFT_PAREN是 US 键位扩展中KC_LPRN的别名(keymap_us.h);
  • KC_QUESTIONKC_QUES的别名(keymap_us.h);
  • KC_KP_COMMA对应 HID Usage 0x0085(keycodes.h),并拥有别名KC_PCMM(keycodes.h);
  • 数字与运算键沿用了 docs/keycodes_basic.md 中标准 Keypad 键码表(KC_KP_SLASHKC_PSLSKC_KP_ASTERISKKC_PAST等),基于 HID Keyboard/Keypad Usage Page (0x07) 定义,因此这些键在现代操作系统下同样具备 Keypad 语义(如 Num Lock 开启时输入数字、关闭时可能触发 Home/End/方向等双功能,见 docs/keycodes_basic.md)。

由于default键位只有一个 0 号图层,若想在此基础上增加自定义图层(例如按住 Esc 切换为符号层),可直接在keymaps/default/keymap.c中追加[1] = LAYOUT(...)定义,QMK 会自动将其识别为附加层。


四、硬件接线与矩阵配置:COL2ROW 六列四行

keyboard.json中记录了这块 Apple PCB 在 QMK 下的完整硬件定义,是复刻硬件改装的直接依据:

"matrix_pins": { "cols": ["D1", "D0", "D4", "C6", "D7", "E6"], "rows": ["B0", "B2", "D2", "D3"] }, "diode_direction": "COL2ROW", "processor": "atmega32u4", "bootloader": "caterina"

解读要点:

  • 矩阵规模:6 列 × 4 行,共 24 个交叉点,恰好对应 24 颗按键,说明键盘没有冗余矩阵位。
  • 二极管方向COL2ROW,即二极管阴极朝向列线(从列读入、行输出驱动),这是接线转接板时最重要的方向约束——接反会导致整块键盘无响应。
  • 主控与引导atmega32u4+caterina(Arduino Micro 的默认引导程序),编译产物可通过 Arduino 标准的 DFU/串口方式烧录。
  • USB 标识:VID0xFEED、PID0x0000,设备版本0.0.1device_version字段可自行调整。
  • 功能开关command: true(调试命令)、console: true(调试输出)、extrakey: true(媒体键)、mousekey: true(鼠标键)均已启用,而bootmagicnkro关闭,保持轻量。

keyboard.json中的LAYOUT定义同时给出了每个物理按键在矩阵中的位置(matrix: [行, 列])与屏幕坐标(x/y),例如顶行7位于矩阵[0,5]8位于[3,2]9位于[3,3],底行长条0键还带有"w": 1.5的宽度属性。这套信息一方面驱动 QMK 的矩阵扫描逻辑,另一方面也可用于 docs/reference_info_json.md 描述的可视化布局生成。


五、编译与烧录:从源码到固件

确保构建环境就绪后,在仓库根目录执行:

make converter/numeric_keypad_iie:default
  • converter/numeric_keypad_iie是键盘目录的路径标识;
  • default即 keymaps/default 键位图。

如需生成并烧录到 Arduino Micro,可追加:flash目标(make converter/numeric_keypad_iie:default:flash)。首次接触 QMK 的用户,建议先阅读 docs/getting_started_introduction.md 完成开发环境搭建,再参考 docs/getting_started_make_guide.md 了解 Make 目标语法;新手可从 docs/newbs.md 的入门路线开始。

编译产物的验证方式也很直接:由于keyboard.json启用了console功能,可以在固件运行后通过 QMK 的调试命令查看矩阵扫描与键值上报,确认 DB15 转接板各引脚与矩阵定义一一对应。


六、改造要点总结

  1. 硬件改造:Numeric Keypad IIe 无板载控制器,DB15 线缆 → 转接板 → Arduino Micro(ATmega32U4)是官方参考路径,接线必须严格对照keyboard.json的 6 列 4 行引脚表。
  2. 固件配置COL2ROW二极管方向、caterina引导程序决定了板级行为;default键位图忠实复刻原装键帽功能,无需额外配置即可使用。
  3. 历史细节:Print 键输出?不是疏忽,而是对 AppleSoft BASIC 中?=PRINT简写的原样保留,这也让默认键位具有档案级的历史还原意义。
  4. 扩展空间:24 键矩阵、单一图层只是起点,后续完全可以在LAYOUT基础上添加自定义功能层、宏或组合键,把这块 40 年前的键盘变成现代生产力小键盘。

通过本文的键位对照表、矩阵接线说明与构建命令,你可以独立复现或进一步改造这一复古 USB 转换项目。

【免费下载链接】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/20 4:51:03

LibreChat:开源LLM对话平台与MCP协议集成指南

1. LibreChat 是什么&#xff1f;一个真正能落地的开源对话平台LibreChat 不是另一个“玩具级”聊天界面&#xff0c;它是一个面向真实工作流设计的、可自托管、可深度集成的开源对话平台。我第一次在 GitHub 上看到它时&#xff0c;第一反应是&#xff1a;终于有个东西能把 LL…

作者头像 李华
网站建设 2026/9/20 4:50:13

51单片机矩阵键盘与LED动态扫描实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 4:50:07

DeepSeek-Harness本地Docker部署与插件机制实战指南

1. 为什么要在本地用 Docker 跑 DeepSeek-Harness第一次看到 DeepSeek-Harness 这个名字&#xff0c;很多人会下意识把它和 DeepSeek 大模型本身混为一谈。实际上这是两个层面的东西&#xff1a;DeepSeek 是模型&#xff0c;Harness 是让模型"动起来"的运行框架。打个…

作者头像 李华
网站建设 2026/9/20 4:48:17

从零看懂 llvm-project:LLVM 与 Clang 工具链全景解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 4:46:57

OpenResearch:本地优先的科研协作范式与CLI实践

1. OpenResearch 是什么&#xff1a;一个被严重低估的本地优先科研协作范式OpenResearch 不是一个软件、不是一个平台&#xff0c;更不是某个大厂新推的 AI 工具套件——它是一种正在 quietly reshaping 科研工作流的底层实践哲学。我从 2019 年开始在高校实验室带学生做跨校课…

作者头像 李华