最近放假了,趁这个空余在做一个分支项目,一款机械键盘,量子键盘取自固件名称QMK(Quantum Mechanical Keyboard)。
键盘作为计算机或其他电子设备的重要输入设备之一,通过将按键的物理动作转换为数字信号,实现用户与设备的交互。
键盘的工作原理可以分为几个关键部分,包括按键矩阵、扫描电路、信号传输和固件控制等。下面将详细介绍这些基本原理。
1. 键盘按键矩阵
大多数键盘采用按键矩阵结构来实现多个按键的检测。按键矩阵是一种通过行列交叉的方式连接多个按键的电路布局,这样可以减少所需的电线数量。
-
行(Rows)和列(Columns):键盘的每个按键通常通过一个行和一个列来标识。当按下某个键时,它连接了一个特定的行和列,这样可以通过电路检测出该按键的位置。
-
矩阵布局:假设有一个4x4的矩阵布局,代表16个按键。每个按键都由一行和一列组成。按下某个按键时,电路中对应的行和列之间会闭合,从而让控制器可以确定是哪个按键被按下。
/*
* ┌───┬───┬───┬───┐
* │ 7 │ 8 │ 9 │ │
* ├───┼───┼───┤ + │
* │ 4 │ 5 │ 6 │ │
* ├───┼───┼───┼───┤
* │ 1 │ 2 │ 3 │ │
* ├───┴───┼───┤Ent│
* │ 0 │ . │ │
* └───────┴───┴───┘
*/
例如,如果你按下位于第2行和第3列的按键,电路会通过扫描检测到该按键位置,输出6这个数字。
2. 键盘扫描与信号检测
键盘的扫描是通过控制器(通常是微控制器或专用的键盘芯片)完成的。扫描过程可以分为以下步骤:
-
行激活:控制器逐一激活键盘的每一行,并读取与之连接的所有列。
-
列检测:在某一行激活时,控制器会读取所有列的信号。如果某个列的信号改变(通常是由按键按下引起的电流流动),说明该行列交点上的按键被按下。
-
去抖动:按键的物理开关会在按下和松开时发生微小的震动,这会导致信号的不稳定。为了避免错误的按键输入,控制器会进行去抖动处理,即在按键被按下后,控制器会等待短暂时间再确认按键状态。
-
重复检测:当用户按住某个按键时,键盘通常会以一定的速度重复发送按键信号,直到按键松开。这是为了在长时间按住某个按键时能够持续输入。
提起键盘定制,QMK(Quantum Mechanical Keyboard)固件无疑是其中的佼佼者。作为一个开源项目,QMK固件已经成为了键盘爱好者和DIY者的标配工具。它不仅提供了高度的定制能力,还支持各种复杂的功能和设置,使得用户能够根据自己的需求,打造出个性化的键盘布局和操作体验。QMK固件是一款针对机械键盘的开源固件,基于C语言编写,允许用户自由修改和配置键盘的各项功能。QMK原本是基于一个叫做TMK的开源固件开发的,后来因为功能强大和灵活性高,逐渐成为了社区的主流选择。
QMK的最大亮点在于它的高度可定制性,它不仅支持常见的按键映射和宏命令,还支持更多复杂的功能,如多层布局、特殊键位、RGB灯效等。用户可以通过修改QMK固件中的代码,轻松实现个人化需求。
QMK固件的强大之处还在于它可以对键盘的各个方面进行深入的定制。以下是QMK固件的一些核心功能:
-
按键映射(Keymap):QMK允许用户自定义每个按键的功能,包括普通键位、功能键、组合键、宏命令等。通过QMK的配置文件,用户可以为每个按键分配不同的任务,使得每个按键的功能都可以根据需要进行调整。
-
多层(Layers)支持:QMK固件支持多层布局功能,允许用户通过按下特定的修饰键(如Shift、Ctrl等)来切换不同的键位布局。这使得键盘的功能得到极大的扩展。例如,你可以将一层映射为数字键盘,另一层用于控制媒体播放,或者将一层配置为游戏快捷键。
-
宏命令(Macros):QMK支持宏命令功能,允许用户定义一组按键序列,并将其绑定到某个单独的按键上。通过按下这个特定的按键,QMK会自动执行这组按键序列。宏命令功能非常适合需要频繁输入复杂命令的用户,比如程序员、游戏玩家等。
-
RGB灯效:QMK还支持RGB背光的控制,可以根据需要调整灯效的颜色、亮度以及动态效果。用户可以通过固件代码自定义灯效模式,例如设置呼吸灯、波浪灯、渐变色等效果,或者根据按键的状态变化调整灯光。
-
定制功能:QMK固件还支持一些特殊的功能,如按键防抖、长按触发、按键禁用、音效反馈等。这些功能可以进一步提升用户体验,使得键盘更加智能和人性化。
QMK固件的配置和编程过程是有一定的学习曲线,但一旦掌握了,就可以进行极其灵活和深入的定制。以下是QMK固件配置的基本步骤:
安装QMK MSYS
打开QMK MSYS在shell里面输入qmk setup
下载QMK固件源代码:会通过git 去QMK官方GitHub仓库下载固件源代码。QMK的源代码中包含了许多已经预定义好的配置文件和示例代码,用户可以根据自己的需求进行修改。本着国内GitHub访问的不稳定性,科学上网是必要的,因为在sub-routine这块很容易失败
这个最好设置一下git的代理
如果想取消代理
在shell里面输入qmk new-keyboard
输入一个键盘的名称和Github用户名称
选择键盘和布局:在QMK固件中,每个键盘都有一个对应的配置文件,用户需要选择适合自己键盘的文件。如果是自定义键盘,用户需要根据自己的硬件设计来编写新的配置文件。
选择你想要的键盘布局,然后选择开发板,这里手里因为有块树莓派的RP2040的开发板,所以选择了15
这里的RP2040有足够的IO口关键还很便宜10-20RMB,还包邮
修改按键映射和功能:在QMK的配置文件中,用户可以根据自己的需求修改每个按键的功能。可以是单一的字符,也可以是复杂的宏命令。QMK允许用户通过修改C语言代码来自定义每个按键的行为,例如设置某个按键为切换多层、触发宏命令等。
设计好引脚和键盘扫描电路的mapping
一些个性化的定制也可以通过QMK Configurator进行修改,生成的文件替换文件夹里的文件
在编译之前一定修改matrix_pins的对应,因为我用了RP2040
编译并烧录固件:修改完配置后,用户需要使用QMK的编译工具将固件编译成可供键盘使用的二进制文件。然后,使用适当的工具(如QMK Toolbox)将固件烧录到键盘的微控制器中。
输入:qmk compile -kb demo_keyboard -km default
开始编译固件
编译成功
烧录固件,qmk flash -kb demo_keyboard -km default 注意RP2040按住boot键然后松开
调试与测试:烧录完成后,用户需要通过测试确保每个按键的功能都正常工作。如果有任何问题,可以重新调整配置文件并编译新的固件版本。
这个是4*4矩阵键盘打印出的
7++++++7744566456123