]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
docs to Mandarin Chinese (#5960)
authorymzcdg <49898694+ymzcdg@users.noreply.github.com>
Tue, 4 Jun 2019 18:06:17 +0000 (02:06 +0800)
committerMechMerlin <30334081+mechmerlin@users.noreply.github.com>
Tue, 4 Jun 2019 18:06:17 +0000 (11:06 -0700)
* faq_general.md to Chinese

faq_general.md to Chinese
faq finished

* custom_quantum_functions.md to Chinese

custom_quantum_functions.md to Chinese

* custom_quantum_functions.md fix

custom_quantum_functions.md fix

* custom_quantum_functions.md fix translate

custom_quantum_functions.md fix translate

* !ver.English! _summary.md bug fix

 _summary.md bug fix of English doc. add".md" behind "feature_combo"

* !ver.English! custom_quantum_functions.md fix#5869

custom_quantum_functions.md in English : delete redundant "is" . issue#5869

* !ver.English! how_keyboards_work.md link fix

change
https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
to
https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_input
"#Hexadecimal_code_input" not exist

* !English! how_keyboards_work.md add missing "t"

Tied to a specific OS a a time (need recompilation when changing OS);
change to
Tied to a specific OS at a time (need recompilation when changing OS);

* _summary.md improve translation

_summary.md improve translation

* reference_glossary.md into Chinese

reference_glossary.md into Chinese
术语表翻译,这个术语表英文版似乎不太全,应该补充英文版,并在中文版添加其他具有中国特色的术语。

docs/custom_quantum_functions.md
docs/how_keyboards_work.md
docs/zh-cn/_summary.md
docs/zh-cn/custom_quantum_functions.md [new file with mode: 0644]
docs/zh-cn/faq_general.md [new file with mode: 0644]
docs/zh-cn/reference_glossary.md [new file with mode: 0644]

index 6287b9530909e596d44095d6f0162d3774c15f7f..7be82c650f7d0e6843616d506b3406603746bb59 100644 (file)
@@ -267,7 +267,7 @@ You should use this function if you need custom matrix scanning code. It can als
 
 If the board supports it, it can be "idled", by stopping a number of functions.  A good example of this is RGB lights or backlights.   This can save on power consumption, or may be better behavior for your keyboard.
 
 
 If the board supports it, it can be "idled", by stopping a number of functions.  A good example of this is RGB lights or backlights.   This can save on power consumption, or may be better behavior for your keyboard.
 
-This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system is board is idled and when it wakes up, respectively.
+This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_init_*`, which are called when the system board is idled and when it wakes up, respectively.
 
 
 ### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation
 
 
 ### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation
index 0772f055d685496253daa5f98d530ef53f77314c..5697a21872c052552c261e82f42821e3741b2dd2 100644 (file)
@@ -63,10 +63,10 @@ You may wonder why a keyboard layout containing all of Unicode is not devised th
 
 ## How to (Maybe) Enter Unicode Characters
 
 
 ## How to (Maybe) Enter Unicode Characters
 
-You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS.
+You can have the firmware send *sequences of keys* to use the [software Unicode Input Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_input) of the target operating system, thus effectively entering characters independently of the layout defined in the OS.
 
 Yet, it does come with multiple disadvantages:
 
 
 Yet, it does come with multiple disadvantages:
 
- - Tied to a specific OS a a time (need recompilation when changing OS);
+ - Tied to a specific OS at a time (need recompilation when changing OS);
  - Within a given OS, does not work in all software;
  - Limited to a subset of Unicode on some systems.
  - Within a given OS, does not work in all software;
  - Limited to a subset of Unicode on some systems.
index df25a3ccd14e164d5716b681f42144489aaed80a..b0d9f1c068a984a4bc47bc94f2d8300a39101b58 100644 (file)
@@ -7,27 +7,27 @@
   * [学习资源](newbs_learn_more_resources.md)
 
 * [QMK基础](README.md)
   * [学习资源](newbs_learn_more_resources.md)
 
 * [QMK基础](README.md)
-  * [QMK 简介](getting_started_introduction.md)
-  * [贡献 QMK](contributing.md)
+  * [QMK简介](getting_started_introduction.md)
+  * [向QMK贡献](contributing.md)
   * [如何使用Github](getting_started_github.md)
   * [获得帮助](getting_started_getting_help.md)
 
 * [问题解答](faq.md)
   * [一般问题](faq_general.md)
   * [如何使用Github](getting_started_github.md)
   * [获得帮助](getting_started_getting_help.md)
 
 * [问题解答](faq.md)
   * [一般问题](faq_general.md)
-  * [构建/编译QMK](faq_build.md)
-  * [调试/故障排除 QMK](faq_debug.md)
-  * [键盘布局](faq_keymap.md)
+  * [构建/编译](faq_build.md)
+  * [调试/故障排除](faq_debug.md)
+  * [键盘映射](faq_keymap.md)
 
 * 详细指南
   * [安装构建工具](getting_started_build_tools.md)
 
 * 详细指南
   * [安装构建工具](getting_started_build_tools.md)
-  * [流浪者指南](getting_started_vagrant.md)
+  * [vagrant指南](getting_started_vagrant.md)
   * [构建/编译指令](getting_started_make_guide.md)
   * [刷新固件](flashing.md)
   * [定制功能](custom_quantum_functions.md)
   * [构建/编译指令](getting_started_make_guide.md)
   * [刷新固件](flashing.md)
   * [定制功能](custom_quantum_functions.md)
-  * [布局概述](keymap.md)
+  * [映射概述](keymap.md)
 
 * [硬件](hardware.md)
 
 * [硬件](hardware.md)
-  * [AVR 处理器](hardware_avr.md)
+  * [AVR处理器](hardware_avr.md)
   * [驱动](hardware_drivers.md)
 
 * 参考
   * [驱动](hardware_drivers.md)
 
 * 参考
@@ -35,8 +35,8 @@
   * [配置选项](config_options.md)
   * [键码](keycodes.md)
   * [记录最佳实践](documentation_best_practices.md)
   * [配置选项](config_options.md)
   * [键码](keycodes.md)
   * [记录最佳实践](documentation_best_practices.md)
-  * [æ\96\87æ¡£æ\8c\87å\8d\97](documentation_templates.md)
-  * [词汇表](reference_glossary.md)
+  * [æ\96\87档模æ\9d¿](documentation_templates.md)
+  * [术语表](reference_glossary.md)
   * [单元测试](unit_testing.md)
   * [有用的功能](ref_functions.md)
   * [配置器支持](reference_configurator_support.md)
   * [单元测试](unit_testing.md)
   * [有用的功能](ref_functions.md)
   * [配置器支持](reference_configurator_support.md)
 
 * [特性](features.md)
   * [基本键码](keycodes_basic.md)
 
 * [特性](features.md)
   * [基本键码](keycodes_basic.md)
-  * [US ANSI 控制键](keycodes_us_ansi_shifted.md)
+  * [US ANSI控制码](keycodes_us_ansi_shifted.md)
   * [量子键码](quantum_keycodes.md)
   * [高级键码](feature_advanced_keycodes.md)
   * [音频](feature_audio.md)
   * [量子键码](quantum_keycodes.md)
   * [高级键码](feature_advanced_keycodes.md)
   * [音频](feature_audio.md)
-  * [自动控制](feature_auto_shift.md)
+  * [自动shift](feature_auto_shift.md)
   * [背光](feature_backlight.md)
   * [蓝牙](feature_bluetooth.md)
   * [背光](feature_backlight.md)
   * [蓝牙](feature_bluetooth.md)
-  * [Bootmagic](feature_bootmagic.md)
+  * [热改键](feature_bootmagic.md)
   * [组合](feature_combo)
   * [命令](feature_command.md)
   * [动态宏指令](feature_dynamic_macros.md)
   * [编码器](feature_encoders.md)
   * [组合](feature_combo)
   * [命令](feature_command.md)
   * [动态宏指令](feature_dynamic_macros.md)
   * [编码器](feature_encoders.md)
-  * [Grave Escape](feature_grave_esc.md)
-  * [键锁](feature_key_lock.md)
-  * [å±\82](feature_layouts.md)
-  * [å¼\95导键](feature_leader_key.md)
-  * [LED 阵列](feature_led_matrix.md)
+  * [重音号Esc复合键](feature_grave_esc.md)
+  * [自锁键](feature_key_lock.md)
+  * [å¸\83å±\80](feature_layouts.md)
+  * [å\89\8d导键](feature_leader_key.md)
+  * [LED阵列](feature_led_matrix.md)
   * [宏指令](feature_macros.md)
   * [鼠标键](feature_mouse_keys.md)
   * [一键功能](feature_advanced_keycodes.md#one-shot-keys)
   * [指针设备](feature_pointing_device.md)
   * [宏指令](feature_macros.md)
   * [鼠标键](feature_mouse_keys.md)
   * [一键功能](feature_advanced_keycodes.md#one-shot-keys)
   * [指针设备](feature_pointing_device.md)
-  * [PS/2 鼠标](feature_ps2_mouse.md)
-  * [RGB 光](feature_rgblight.md)
-  * [RGB 矩阵](feature_rgb_matrix.md)
+  * [PS/2鼠标](feature_ps2_mouse.md)
+  * [RGB光](feature_rgblight.md)
+  * [RGB矩阵](feature_rgb_matrix.md)
   * [空格候补换挡](feature_space_cadet_shift.md)
   * [空格候补换挡回车](feature_space_cadet_shift_enter.md)
   * [速录机](feature_stenography.md)
   * [换手](feature_swap_hands.md)
   * [空格候补换挡](feature_space_cadet_shift.md)
   * [空格候补换挡回车](feature_space_cadet_shift_enter.md)
   * [速录机](feature_stenography.md)
   * [换手](feature_swap_hands.md)
-  * [踢踏舞](feature_tap_dance.md)
+  * [多击键](feature_tap_dance.md)
   * [终端](feature_terminal.md)
   * [热敏打印机](feature_thermal_printer.md)
   * [Unicode](feature_unicode.md)
   * [终端](feature_terminal.md)
   * [热敏打印机](feature_thermal_printer.md)
   * [Unicode](feature_unicode.md)
   * [速度键](feature_velocikey.md)
 
 * 针对制造者和定制者
   * [速度键](feature_velocikey.md)
 
 * 针对制造者和定制者
-  * [é£\9e线æ\8c\87å\8d\97](hand_wire.md)
-  * [ISP 刷新指南](isp_flashing_guide.md)
-  * [ARM 调试指南](arm_debugging.md)
-  * [I2C 驱动](i2c_driver.md)
-  * [GPIO 控制器](internals_gpio_control.md)
-  * [Proton C 转换](proton_c_conversion.md)
+  * [æ\89\8bå·¥è¿\9e线æ\8c\87å\8d\97](hand_wire.md)
+  * [ISP刷新指南](isp_flashing_guide.md)
+  * [ARM调试指南](arm_debugging.md)
+  * [I2C驱动](i2c_driver.md)
+  * [GPIO控制器](internals_gpio_control.md)
+  * [Proton C转换](proton_c_conversion.md)
 
 * 深入了解
   * [键盘如何工作](how_keyboards_work.md)
 
 * 深入了解
   * [键盘如何工作](how_keyboards_work.md)
-  * [理解 QMK](understanding_qmk.md)
+  * [理解QMK](understanding_qmk.md)
 
 * 其他话题
   * [使用Eclipse开发QMK](other_eclipse.md)
 
 * 其他话题
   * [使用Eclipse开发QMK](other_eclipse.md)
@@ -99,8 +99,8 @@
 * QMK 内构 (正在编写)
   * [定义](internals_defines.md)
   * [输入回调寄存器](internals_input_callback_reg.md)
 * QMK 内构 (正在编写)
   * [定义](internals_defines.md)
   * [输入回调寄存器](internals_input_callback_reg.md)
-  * [Midi 设备](internals_midi_device.md)
-  * [Midi 设备设置过程](internals_midi_device_setup_process.md)
-  * [Midi 工具库](internals_midi_util.md)
+  * [Midi设备](internals_midi_device.md)
+  * [Midi设备设置过程](internals_midi_device_setup_process.md)
+  * [Midi工具库](internals_midi_util.md)
   * [发送函数](internals_send_functions.md)
   * [发送函数](internals_send_functions.md)
-  * [Sysex 工具](internals_sysex_tools.md)
+  * [Sysex工具](internals_sysex_tools.md)
diff --git a/docs/zh-cn/custom_quantum_functions.md b/docs/zh-cn/custom_quantum_functions.md
new file mode 100644 (file)
index 0000000..42ceba9
--- /dev/null
@@ -0,0 +1,490 @@
+# ÈçºÎ¶¨ÖÆÄã¼üÅ̵ŦÄÜ
+
+¶ÔÓںܶàÈËÀ´Ëµ¿ÍÖÆ»¯¼üÅ̿ɲ»Ö»ÊÇÏòÄãµÄµçÄÔ·¢ËÍÄã°´ÁËÄǸö¼þÕâô¼òµ¥¡£Äã¿Ï¶¨ÏëʵÏֱȼòµ¥°´¼üºÍºê¸ü¸´ÔӵŦÄÜ¡£QMKÓÐÄÜÈÃÄã×¢Èë´úÂëµÄ¹³×Ó, ¸²¸Ç¹¦ÄÜ, ÁíÍ⣬»¹¿ÉÒÔ×Ô¶¨Òå¼üÅÌÔÚ²»Í¬Çé¿öϵÄÐÐΪ¡£
+
+±¾Ò³²»¼Ù¶¨ÈκÎÌØÊâµÄQMK֪ʶ£¬µ«ÔĶÁ[Àí½âQMK](understanding_qmk.md)½«»áÔÚ¸ü»ù´¡µÄ²ãÃæ°ïÄãÀí½â·¢ÉúÁËʲô¡£
+
+## A Word on Core vs ¼üÅÌ vs ²¼¾Ö
+
+ÎÒÃÇ°Ñqmk×éÖ¯³ÉÒ»¸ö²ã´Î½á¹¹£º
+
+* Core (`_quantum`)
+  * Keyboard/Revision (`_kb`)
+    * Keymap (`_user`)
+
+ÏÂÃæÃèÊöµÄÿһ¸öº¯Êý¶¼¿ÉÒÔÔÚ¶¨ÒåÉϼÓÒ»¸ö`_kb()`»ò `_user()` ºó׺¡£ ½¨ÒéÔÚ¼üÅÌ/ÐÞ¶©²ãʹÓÃ`_kb()`ºó׺£¬ÔÚ²¼¾Ö²ãʹÓÃ`_user()`ºó׺¡£
+
+ÔÚ¼üÅÌ/ÐÞ¶©²ã¶¨Ò庯Êýʱ£¬`_kb()`ÔÚÖ´ÐÐÈκδúÂëÇ°Ïȵ÷ÓÃ`_user()`ÊDZØÒªµÄ£¬²»È»²¼¾Ö²ãº¯Êý¾Í²»Òª±»µ÷Óá£
+<!-- ·­ÒëÎÊÌ⣺ÉÏÃæÄǾ䷭ÒëµÄ²»Ì«ºÃ-->
+# ×Ô¶¨Òå¼üÂë
+
+µ½Ä¿Ç°ÎªÖ¹£¬×î³£¼ûµÄÈÎÎñÊǸü¸ÄÏÖÓмüÂëµÄÐÐΪ»ò´´½¨ÐµļüÂë¡£´Ó´úÂë½Ç¶ÈÀ´¿´ÕâЩ²Ù×÷¶¼ºÜÏàËÆ¡£
+
+## ¶¨ÒåÒ»¸öмüÂë
+
+´´½¨¼üÂëµÚÒ»²½£¬ÏÈö¾Ù³öËüÈ«²¿£¬Ò²¾ÍÊǸø¼üÂëÆð¸öÃû×Ö²¢·ÖÅäΨһÊýÖµ¡£QMKûÓÐÖ±½ÓÏÞÖÆ×î´ó¼üÂëÖµ´óС£¬¶øÊÇÌṩÁËÒ»¸ö`SAFE_RANGE`ºê¡£Äã¿ÉÒÔÔÚö¾ÙʱÓÃ`SAFE_RANGE`À´±£Ö¤ÄãÈ¡µÃÁËΨһµÄ¼üÂëÖµ¡£
+
+
+ÕâÓÐö¾ÙÁ½¸ö¼üÂëµÄÀý×Ó¡£°ÑÕâ¿é¼Óµ½`keymap.c`µÄ»°Äã¾ÍÔÚ²¼¾ÖÖÐÄÜÓÃ`FOO`ºÍ`BAR`ÁË¡£
+
+```c
+enum my_keycodes {
+  FOO = SAFE_RANGE,
+  BAR
+};
+```
+
+## Îª¼üÂëµÄÐÐΪ±à³Ì
+
+µ±Ä㸲¸ÇÒ»¸öÒÑ´æÔÚ°´¼üµÄÐÐΪʱ£¬»ò½«Õâ¸öÐÐΪ¸³¸øмüʱ£¬ÄãÒªÓÃ`process_record_kb()`ºÍ`process_record_user()`º¯Êý¡£ÕâÁ©º¯ÊýÔÚ¼ü´¦ÀíÖÐÕæʵ¼üʼþ±»´¦ÀíÇ°±»QMKµ÷Óá£Èç¹ûÕâÁ©º¯Êý·µ»Ø`true`£¬QMK½«»áÓÃÕý³£µÄ·½Ê½´¦Àí¼üÂë¡£ÕâÑù¿ÉÒԺܷ½±ãµÄÀ©Õ¹¼üÂëµÄ¹¦Äܶø²»ÊÇÌæ»»Ëü¡£Èç¹ûº¯Êý·µ»Ø`false` QMK»áÌø¹ýÕý³£¼ü´¦Àí£¬È»ºó·¢Ëͼü×Ó̧Æð»¹ÊÇ°´ÏÂʼþ¾ÍÓÉÄã¾ö¶¨ÁË¡£
+
+µ±Ä³¸ö¼ü°´Ï»òÊÍ·ÅʱÕâÁ©º¯Êý»á±»µ÷Óá£
+
+### process_record_user()`º¯ÊýʾÀýʵÏÖ
+
+Õâ¸öÀý×Ó×öÁËÁ½¸öÊ¡£×Ô¶¨ÒåÁËÒ»¸ö½Ð×ö`FOO`µÄ¼üÂëµÄÐÐΪ£¬²¢²¹³äÁËÔÚ°´Ï»سµÊ±²¥·ÅÒô·û¡£
+
+```c
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case FOO:
+      if (record->event.pressed) {
+        // °´ÏÂʱ×öЩʲô
+      } else {
+        // ÊÍ·Åʱ×öЩʲô
+      }
+      return false; // Ìø¹ý´Ë¼üµÄËùÓнøÒ»²½´¦Àí
+    case KC_ENTER:
+      // µ±°´Ï»سµÊ±²¥·ÅÒô·û
+      if (record->event.pressed) {
+        PLAY_NOTE_ARRAY(tone_qwerty);
+      }
+      return true; // ÈÃQMK´¥·¢»Ø³µ°´ÏÂ/ÊÍ·Åʼþ
+    default:
+      return true; // Õý³£´¦ÀíÆäËû¼üÂë
+  }
+}
+```
+
+### `process_record_*` º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
+* ²¼¾Ö: `bool process_record_user(uint16_t keycode, keyrecord_t *record)`
+
+`keycode(¼üÂë)`²ÎÊýÊÇÔÚ²¼¾ÖÉ϶¨ÒåµÄ£¬±ÈÈç`MO(1)`, `KC_L`, µÈµÈ¡£ ÄãÒªÓà`switch...case` ¿éÀ´´¦ÀíÕâЩʼþ¡£
+
+`record`²ÎÊýº¬ÓÐʵ¼Ê°´¼üµÄÐÅÏ¢£º
+
+```c
+keyrecord_t record {
+  keyevent_t event {
+    keypos_t key {
+      uint8_t col
+      uint8_t row
+    }
+    bool     pressed
+    uint16_t time
+  }
+}
+```
+
+# LED¿ØÖÆ
+
+qmkÌṩÁ˶ÁÈ¡HID¹æ·¶°üº¬µÄ5¸öLEDµÄ·½·¨¡£:
+
+* `USB_LED_NUM_LOCK`
+* `USB_LED_CAPS_LOCK`
+* `USB_LED_SCROLL_LOCK`
+* `USB_LED_COMPOSE`
+* `USB_LED_KANA`
+
+ÕâÎå¸ö³£Á¿¶ÔÓ¦ÓÚÖ÷»úLED״̬µÄλÖÃλ¡£
+ÓÐÁ½ÖÖ·½·¨¿ÉÒÔ»ñµÃÖ÷»úLED״̬£º
+
+* Í¨¹ýÖ´ÐР`led_set_user()`
+* Í¨¹ýµ÷Óà`host_keyboard_leds()`
+
+## `led_set_user()`
+
+µ±5¸öLEDÖÐÈκÎÒ»¸öµÄ״̬ÐèÒª¸Ä±äʱ£¬´Ëº¯Êý½«±»µ÷Óᣴ˺¯Êýͨ¹ý²ÎÊýÊäÈëLED²ÎÊý¡£
+ʹÓÃ`IS_LED_ON(usb_led, led_name)`ºÍ`IS_LED_OFF(usb_led, led_name)`ÕâÁ½¸öºêÀ´¼ì²éLED״̬¡£
+
+!> `host_keyboard_leds()`¿ÉÄÜ»áÔÚ`led_set_user()`±»µ÷ÓÃÇ°·µ»ØÐÂÖµ¡£
+
+### `led_set_user()`º¯ÊýʾÀýʵÏÖ
+
+```c
+void led_set_user(uint8_t usb_led) {
+    if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+        writePinLow(B0);
+    } else {
+        writePinHigh(B0);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+        writePinLow(B1);
+    } else {
+        writePinHigh(B1);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+        writePinLow(B2);
+    } else {
+        writePinHigh(B2);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
+        writePinLow(B3);
+    } else {
+        writePinHigh(B3);
+    }
+    if (IS_LED_ON(usb_led, USB_LED_KANA)) {
+        writePinLow(B4);
+    } else {
+        writePinHigh(B4);
+    }
+}
+```
+
+### `led_set_*`º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `void led_set_kb(uint8_t usb_led)`
+* ²¼¾Ö: `void led_set_user(uint8_t usb_led)`
+
+## `host_keyboard_leds()`
+
+µ÷ÓÃÕâ¸öº¯Êý»á·µ»Ø×îºóÊÕµ½µÄLED״̬¡£Õâ¸öº¯ÊýÔÚ`led_set_*`Ö®Íâ¶ÁÈ¡LED״̬ʱºÜÓÐÓ㬱ÈÈçÔÚ[`matrix_scan_user()`](#¾ØÕóɨÃè´úÂë).
+ΪÁ˱ã½Ý£¬Äã¿ÉÒÔÓÃ`IS_HOST_LED_ON(led_name)`ºÍ`IS_HOST_LED_OFF(led_name)` ºê£¬¶ø²»Ö±½Óµ÷Óúͼì²é`host_keyboard_leds()`¡£
+
+## ÉèÖÃÎïÀíLED״̬
+
+һЩ¼üÅÌʵÏÖÁËΪÉèÖÃÎïÀíLEDµÄ״̬ÌṩÁË·½±ãµÄ·½·¨¡£
+
+### Ergodox Boards
+
+ErgodoxʵÏÖÁËÌṩ`ergodox_right_led_1`/`2`/`3_on`/`off()`À´ÈÃÿ¸öLED¿ª»ò¹Ø, Ò²¿ÉÒÔÓà`ergodox_right_led_on`/`off(uint8_t led)` °´Ë÷Òý´ò¿ª»ò¹Ø±ÕËûÃÇ¡£
+
+´ËÍ⣬»¹¿ÉÒÔʹÓÃ`ergodox_led_all_set(uint8_t n)`Ö¸¶¨ËùÓÐLEDµÄÁÁ¶È¼¶±ð£»Õë¶Ôÿ¸öLEDÓÃ`ergodox_right_led_1`/`2`/`3_set(uint8_t n)`£»Ê¹ÓÃË÷ÒýµÄ»°ÓÃ`ergodox_right_led_set(uint8_t led, uint8_t n)`¡£
+
+Ergodox boards Í¬Ê±¶¨ÒåÁË×îµÍÁÁ¶È¼¶±ð`LED_BRIGHTNESS_LO`ºÍ×î¸ßÁÁ¶È¼¶±ð`LED_BRIGHTNESS_HI`(ĬÈÏ×î¸ß).
+
+# ¼üÅ̳õʼ»¯´úÂë
+
+¼üÅ̳õʼ»¯¹ý³ÌÓм¸¸ö²½Öè¡£ÄãÊÇÓÃÄǸöº¯ÊýÈ¡¾öÓÚÄãÏëÒª×öʲô¡£
+
+ÓÐÈý¸öÖ÷Òª³õʼ»¯º¯Êý£¬°´µ÷ÓÃ˳ÐòÁгö¡£
+
+* `keyboard_pre_init_*` - »áÔÚ´ó¶àÊýÆäËû¶«Î÷ÔËÐÐÇ°ÔËÐС£ÊÊÓÃÓÚÄÄЩÐèÒªÌáÇ°ÔËÐеÄÓ²¼þ³õʼ»¯¡£
+* `matrix_init_*` - Ôڹ̼þÆô¶¯¹ý³ÌÖм䱻µ÷ÓᣴËʱӲ¼þÒѳõʼ»¯£¬¹¦ÄÜÉÐδ³õʼ»¯¡£
+* `keyboard_post_init_*` - Ôڹ̼þÆô¶¯¹ý³Ì×îºó±»µ÷Óᣴó¶àÊýÇé¿öÏ£¬ÄãµÄ¡°¿ÍÖÆ»¯¡±´úÂ붼¿ÉÒÔ·ÅÔÚÕâÀï¡£
+
+!> ¶ÔÓÚ´ó¶àÊýÈËÀ´Ëµ`keyboard_post_init_user`ÊÇÄãÏëÒªµ÷Óõĺ¯Êý¡£ÀýÈç, ´ËʱÄã¿ÉÒÔÉèÖÃRGBµÆ·¢¹â¡£
+
+## ¼üÅÌÔ¤³õʼ»¯´úÂë
+
+Õâ´úÂ뼫ÔçÔËÐУ¬ÉõÖÁ¶¼ÔÚUSB³õʼ»¯Ç°ÔËÐС£
+
+ÔÚÕâÖ®ºó²»¾Ã¾ØÕó¾Í±»³õʼ»¯ÁË¡£
+
+¶ÔÓÚ´ó¶àÊýÓû§À´Ëµ,ÕâÓò»µ½£¬ÒòΪËüÖ÷ÒªÊÇÓÃÓÚÃæÏòÓ²¼þµÄ³õʼ»¯¡£
+
+µ«Èç¹ûÄãÓÐÓ²¼þ³õʼ»¯µÄ»°·ÅÔÚÕâÀïÔٺò»¹ýÁË(±ÈÈç³õʼ»¯LEDÒý½ÅÒ»ÀàµÄ).
+
+### `keyboard_pre_init_user()`º¯ÊýʾÀýʵÏÖ
+
+±¾ÀýÖÐÔÚ¼üÅ̼¶±ð£¬É趨 B0, B1, B2, B3, ºÍ B4 ÊÇLEDÒý½Å¡£
+
+```c
+void keyboard_pre_init_user(void) {
+  // µ÷ÓüüÅÌÔ¤³õʼ»¯´úÂë
+
+  // ÉèÖÃLEDÒý½ÅΪÊä³öģʽ
+  setPinOutput(B0);
+  setPinOutput(B1);
+  setPinOutput(B2);
+  setPinOutput(B3);
+  setPinOutput(B4);
+}
+```
+
+### `keyboard_pre_init_*` º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `void keyboard_pre_init_kb(void)`
+* ²¼¾Ö: `void keyboard_pre_init_user(void)`
+
+## ¾ØÕó³õʼ»¯´úÂë
+
+Õ⽫»áÔÚ¾ØÕó³õʼ»¯Ê±±»µ÷Óã¬ÔÚijЩӲ¼þÉèÖúú󣬵«ÔÚһЩ¹¦Äܱ»³õʼ»¯Ç°¡£ 
+
+ÕâÔÚÄãÉèÖÃÆäËûµØ·½»áÓõ½µÄ¶«Î÷µÄʱºò»áºÜÓÐÓ㬵«ÓëÓ²¼þÎ޹أ¬Ò²²»ÒÀÀµÓÚËüµÄÆô¶¯Î»Öá£
+
+
+### `matrix_init_*`º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `void matrix_init_kb(void)`
+* ²¼¾Ö: `void matrix_init_user(void)`
+
+
+## ¼üÅ̺ó³õʼ»¯´úÂë
+
+ÕâÊǼüÅ̳õʼ»¯¹ý³ÌÖеÄ×îºóÒ»¸öÈÎÎñ¡£Èç¹ûÄúÏë¸ü¸ÄijЩÌØÐÔ£¬Õâ»áºÜÓÐÓã¬ÒòΪ´ËʱӦ¸Ã¶ÔËüÃǽøÐгõʼ»¯¡£
+
+
+### `keyboard_post_init_user()`ʾÀýʵÏÖ
+
+±¾Ê¾ÀýÔÚËùÓгõʼ»¯Íê³ÉºóÔËÐУ¬ÅäÖÃRGBµÆ¡£
+
+```c
+void keyboard_post_init_user(void) {
+  // µ÷Óúó³õʼ»¯´úÂë
+  rgblight_enable_noeeprom(); // Ê¹ÄÜRgb£¬²»±£´æÉèÖÃ
+  rgblight_sethsv_noeeprom(180, 255, 255); // ½«ÑÕÉ«ÉèÖõ½À¶ÂÌÉ«(ÇàÉ«)²»±£´æ
+  rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3); // ÉèÖÿìËÙºôÎüģʽ²»±£´æ
+}
+```
+
+### `keyboard_post_init_*` º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `void keyboard_post_init_kb(void)`
+* ²¼¾Ö: `void keyboard_post_init_user(void)`
+
+# ¾ØÕóɨÃè´úÂë
+
+¿ÉÄܵĻ°ÄãÒªÓÃ`process_record_*()`×Ô¶¨Òå¼üÅÌ£¬ÒÔÕâÖÖ·½Ê½Á¬½Óµ½Ê¼þÖУ¬ÒÔÈ·±£´úÂë²»»á¶Ô¼üÅ̲úÉú¸ºÃæµÄÐÔÄÜÓ°Ï졣Ȼ¶ø£¬ÔÚ¼«ÉÙÊýÇé¿öÏ£¬ÓбØÒª½øÐоØÕóɨÃè¡£ÔÚÕâЩº¯ÊýÖÐÒªÌرð×¢Òâ´úÂëµÄÐÔÄÜ£¬ÒòΪËüÿÃëÖÁÉÙ±»µ÷ÓÃ10´Î¡£
+
+### `matrix_scan_*`ʾÀýʵÏÖ
+
+Õâ¸öÀý×Ó±»¹ÊÒâÊ¡ÂÔÁË¡£ÔÚhookÕâÑùÒ»¸ö¶ÔÐÔÄܼ°ÆäÃô¸ÐµÄÇøÓò֮ǰ£¬ÄúÓ¦¸Ã×ã¹»Á˽âqmkµÄÄÚ²¿½á¹¹£¬ÒÔ±ãÔÚûÓÐʾÀýµÄÇé¿öϱàд¡£Èç¹ûÄãÐèÒª°ïÖú£¬Çë[½¨Á¢Ò»¸öissue](https://github.com/qmk/qmk_firmware/issues/new)»ò[ÔÚDiscordÉÏÓëÎÒÃǽ»Á÷](https://discord.gg/Uq7gcHh).
+
+### `matrix_scan_*` º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `void matrix_scan_kb(void)`
+* ²¼¾Ö: `void matrix_scan_user(void)`
+
+¸Ãº¯ÊýÔÚÿ´Î¾ØÕóɨÃèʱ±»µ÷Óã¬Õâ»ù±¾ÓëMCU´¦ÀíÄÜÁ¦ÉÏÏÞÏàͬ¡£ÔÚÕâÀïд´úÂëÒª½÷É÷£¬ÒòΪËü»áÔËÐкܶà´Î¡£
+
+Äã»áÔÚ×Ô¶¨Òå¾ØÕóɨÃè´úÂëʱÓõ½Õâ¸öº¯Êý¡£ÕâÒ²¿ÉÒÔÓÃ×÷×Ô¶¨Òå״̬Êä³ö(±ÈÈçLEDµÆ»òÕßÆÁÄ»)»òÕßÆäËû¼´±ãÓû§²»ÊäÈëÄãÒ²Ï붨ÆÚÔËÐеŦÄÜ¡£
+
+
+# ¼üÅÌ ¿ÕÏÐ/»½ÐÑ ´úÂë
+
+Èç¹û¼üÅÌÖ§³Ö¾Í¿ÉÒÔͨ¹ýÍ£Ö¹Ò»´óƱ¹¦ÄÜÀ´´ïµ½"¿ÕÏÐ"¡£RGBµÆºÍ±³¹â¾ÍÊǺܺõÄÀý×Ó¡£Õâ¿ÉÒÔ½ÚÔ¼Äܺģ¬Ò²¿ÉÄÜÈÃÄã¼üÅÌ·çζ¸ü¼Ñ¡£
+
+ÓÃÁ½¸öº¯Êý¿ØÖÆ: `suspend_power_down_*`ºÍ`suspend_wakeup_init_*`, ·Ö±ðÔÚϵͳ°å¿ÕÏкͻ½ÐÑʱµ÷Óá£
+
+
+### suspend_power_down_user()ºÍsuspend_wakeup_init_user()ʾÀýʵÏÖ
+
+
+```c
+void suspend_power_down_user(void) {
+    rgb_matrix_set_suspend_state(true);
+}
+
+void suspend_wakeup_init_user(void) {
+    rgb_matrix_set_suspend_state(false);
+}
+```
+
+### ¼üÅÌ ¹ÒÆð/»½ÐÑ º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `void suspend_power_down_kb(void)` ºÍ`void suspend_wakeup_init_user(void)`
+* ²¼¾Ö: `void suspend_power_down_kb(void)` ºÍ `void suspend_wakeup_init_user(void)`
+
+# ²ã¸Ä±ä´úÂë
+
+ÿµ±²ã¸Ä±äÕâ¸ö¾ÍÔËÐдúÂë¡£Õâ¶ÔÓÚ²ãָʾ»ò×Ô¶¨Òå²ã´¦ÀíºÜÓÐÓá£
+
+### `layer_state_set_*` Ê¾ÀýʵÏÖ
+
+±¾ÀýʹÓÃÁËPlanck¼üÅÌʾ·¶ÁËÈçºÎÉèÖà[RGB±³¹âµÆ](feature_rgblight.md)ʹ֮Óë²ã¶ÔÓ¦
+
+```c
+uint32_t layer_state_set_user(uint32_t state) {
+    switch (biton32(state)) {
+    case _RAISE:
+        rgblight_setrgb (0x00,  0x00, 0xFF);
+        break;
+    case _LOWER:
+        rgblight_setrgb (0xFF,  0x00, 0x00);
+        break;
+    case _PLOVER:
+        rgblight_setrgb (0x00,  0xFF, 0x00);
+        break;
+    case _ADJUST:
+        rgblight_setrgb (0x7A,  0x00, 0xFF);
+        break;
+    default: //  for any other layers, or the default layer
+        rgblight_setrgb (0x00,  0xFF, 0xFF);
+        break;
+    }
+  return state;
+}
+```
+### `layer_state_set_*` º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `uint32_t layer_state_set_kb(uint32_t state)`
+* ²¼¾Ö: `uint32_t layer_state_set_user(uint32_t state)`
+
+
+¸Ã`״̬`Êǻ²ãµÄbitmask, Ïê¼û[²¼¾Ö¸ÅÊö](keymap.md#²¼¾ÖµÄ²ã״̬)
+
+
+# µôµç±£´æÅäÖà(EEPROM)
+
+Õâ»áÈÃÄãµÄÅäÖó¤Æڵı£´æÔÚ¼üÅÌÖС£ÕâЩÅäÖñ£´æÔÚÄãÖ÷¿ØµÄEEPROMÀµôµç²»»áÏûʧ¡£ ÉèÖÿÉÒÔÓÃ`eeconfig_read_kb`ºÍ`eeconfig_read_user`¶ÁÈ¡£¬¿ÉÒÔÓÃ`eeconfig_update_kb`ºÍ`eeconfig_update_user`дÈë¡£Õâ¶ÔÓÚÄúÏ£ÍûÄܹ»Çл»µÄ¹¦ÄܺÜÓÐÓÃ(±ÈÈçÇл»RGB²ãָʾ¡£´ËÍ⣬Äã¿ÉÒÔÓÃ`eeconfig_init_kb`ºÍ`eeconfig_init_user`À´ÉèÖÃEEPROMĬÈÏÖµ¡£ 
+
+×ÔӵIJ¿·Ö¿ÉÄÜÊÇ£¬Óкܶ෽·¨¿ÉÒÔͨ¹ýEEPROM´æ´¢ºÍ·ÃÎÊÊý¾Ý£¬²¢ÇÒ²¢Ã»ÓÐÓÃÄÄÖÖ·½·¨ÊÇ¡°ÕþÖÎÕýÈ·¡±µÄ¡£Äãÿ¸ö¹¦ÄÜÖ»ÓÐÒ»¸öË«×Ö(ËÄ×Ö½Ú)¿Õ¼ä¡£
+
+¼ÇסEEPROMÊÇÓÐдÈëÊÙÃüµÄ¡£¾¡¹ÜдÈëÊÙÃüºÜ¸ß£¬µ«ÊDz¢²»ÊÇÖ»ÓÐÉèÖÃдµÀEEPROMÖС£Èç¹ûÄãдÈëƵ·±£¬ÄãµÄMCUÊÙÃü½«»á±ä¶Ì¡£
+
+* Èç¹ûÄú²»Àí½âÕâ¸öÀý×Ó£¬ÄÇôÄú¿ÉÄÜÏ£Íû±ÜÃâʹÓÃÕâ¸öÌØÐÔ£¬ÒòΪËüÏ൱¸´ÔÓ¡£
+
+### Ê¾ÀýʵÏÖ
+
+±¾Àý½²½âÁËÈçºÎÌí¼ÓÉèÖ㬲¢ÇÒ¶Áд¡£±¾ÀïʹÓÃÁËÓû§²¼¾Ö¡£ÕâÊÇÒ»¸ö¸´Ôӵĺ¯Êý£¬ÓкܶàÊÂÇéÒª×ö¡£Êµ¼ÊÉÏ£¬ËüʹÓÃÁ˺ܶàÉÏÊöº¯ÊýÀ´¹¤×÷£¡
+
+
+ÔÚÄãµÄkeymap.cÎļþÖУ¬½«ÒÔÏ´úÂëÌí¼ÓÖÁ¶¥²¿:
+```c
+typedef union {
+  uint32_t raw;
+  struct {
+    bool     rgb_layer_change :1;
+  };
+} user_config_t;
+
+user_config_t user_config;
+```
+
+ÒÔÉÏ´úÂ뽨Á¢ÁËÒ»¸ö½á¹¹Ì壬¸Ã½á¹¹Ìå¿ÉÒÔ´æ´¢ÉèÖò¢¿ÉÓÃÓÚдÈëEEPROM¡£Èç´ËÕâ°ã½«ÎÞÐ趨Òå±äÁ¿£¬ÒòΪÔڽṹÌåÖÐÒÑÈ»¶¨Òå¡£Òª¼Çס`bool` (²¼¶û)ֵʹÓÃ1λ, `uint8_t`ʹÓÃ8λ, `uint16_t`ʹÓÃ16λ¡£Äã¿ÉÒÔ»ìºÏ´îÅäʹÓ㬵«ÊÇ˳Ðò¼Ç´í¿ÉÄÜ»áÕÐÖÂÂé·³£¬ÒòΪÄÇ»á¸Ä±äдÈëд³öµÄÖµ¡£ 
+
+ `layer_state_set_*`º¯ÊýÖÐʹÓÃÁË`rgb_layer_change`£¬Ê¹ÓÃÁË`keyboard_post_init_user`ºÍ`process_record_user`À´ÅäÖÃÒ»ÇС£
+
+Ê×ÏÈҪʹÓÃ`keyboard_post_init_user£¬ÄãÒª¼ÓÈë`eeconfig_read_user()`À´Ìî³äÄã¸Õ¸Õ´´½¨µÄ½á¹¹Ì塣ȻºóÄú¿ÉÒÔÁ¢¼´Ê¹ÓÃÕâ¸ö½á¹¹À´¿ØÖÆÄúµÄ²¼¾ÖÖеŦÄÜ¡£¾ÍÏñÕâÑù£º 
+```c
+void keyboard_post_init_user(void) {
+  // µ÷Óò¼¾Ö¼¶±ðµÄ¾ØÕó³õʼ»¯
+
+  // ´ÓEEPROM¶ÁÓû§ÅäÖÃ
+  user_config.raw = eeconfig_read_user();
+
+  // ÈçʹÄÜ£¬ÉèÖÃĬÈϲã
+  if (user_config.rgb_layer_change) {
+    rgblight_enable_noeeprom();
+    rgblight_sethsv_noeeprom_cyan(); 
+    rgblight_mode_noeeprom(1);
+  }
+}
+```
+ÒÔÉϺ¯Êý»áÔÚ¶ÁEEPROMÅäÖúóÁ¢¼´Ê¹ÓøÃÉèÖÃÀ´ÉèÖÃĬÈϲãRGBÑÕÉ«¡£"raw"µÄÖµÊÇ´ÓÄãÉÏÃæ»ùÓÚ"union"´´½¨µÄ½á¹¹ÌåÖÐת»»À´µÄ¡£ 
+
+```c
+uint32_t layer_state_set_user(uint32_t state) {
+    switch (biton32(state)) {
+    case _RAISE:
+        if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_magenta(); rgblight_mode_noeeprom(1); }
+        break;
+    case _LOWER:
+        if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); }
+        break;
+    case _PLOVER:
+        if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); }
+        break;
+    case _ADJUST:
+        if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); }
+        break;
+    default: //  Õë¶ÔÆäËû²ã»òĬÈϲã
+        if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); }
+        break;
+    }
+  return state;
+}
+```
+ÕâÑù½öÔÚֵʹÄÜʱ»á¸Ä±äRGB±³¹âµÆ¡£ÏÖÔÚÅäÖÃÕâ¸öÖµ, Îª`process_record_user`´´½¨Ò»¸öмüÂë½Ð×ö`RGB_LYR`¡£ÎÒÃÇҪȷ±££¬Èç¹ûʹÓÃÕý³£µÄRGB´úÂ룬ʹÓÃÉÏÃæµÄʾÀý½«Æä¹Ø±Õ£¬Ç뽫ÆäÉèÖÃΪ£º
+```c
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case FOO:
+      if (record->event.pressed) {
+        // °´ÏÂʱ×öµãʲô
+      } else {
+        // ÊÍ·Åʱ×öµãʲô
+      }
+      return false; // Ìø¹ý´Ë¼üµÄ½øÒ»²½´¦Àí
+    case KC_ENTER:
+        // ÔÚ°´Ï»سµÊ±²¥·ÅÒô·û
+        if (record->event.pressed) {
+            PLAY_NOTE_ARRAY(tone_qwerty);
+        }
+        return true; // ÈÃQMK²úÉú»Ø³µ°´ÏÂ/ÊÍ·Åʼþ
+    case RGB_LYR:  // ±¾¾äÈÃunderglow×÷Ϊ²ãָʾ£¬»òÕý³£Ê¹Óá£
+        if (record->event.pressed) { 
+            user_config.rgb_layer_change ^= 1; // Çл»×´Ì¬
+            eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëÐÂ״̬
+            if (user_config.rgb_layer_change) { // Èç¹û²ã״̬±»Ê¹ÄÜ
+                layer_state_set(layer_state);   // ÄÇôÁ¢¿Ì¸üвãÑÕÉ«
+            }
+        }
+        return false; break;
+    case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // ¶ÔÓÚËùÓеÄRGB´úÂë (see quantum_keycodes.h, L400 ¿ÉÒԲο¼)
+        if (record->event.pressed) { //±¾¾äʧÄܲãָʾ£¬¼ÙÉèÄã¸Ä±äÁËÕâ¸ö¡­ÄãÒª°ÑËü½ûÓÃ
+            if (user_config.rgb_layer_change) {        // ½öµ±Ê¹ÄÜʱ
+                user_config.rgb_layer_change = false;  // Ê§ÄÜ£¬È»ºó 
+                eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëÉèÖÃ
+            }
+        }
+        return true; break;
+    default:
+      return true; // °´ÆäËû¼üÕý³£
+  }
+}
+```
+×îºóÄãÒª¼ÓÈë`eeconfig_init_user`º¯Êý£¬ËùÒÔµ±EEPROMÖØÖÃʱ£¬¿ÉÒÔÖ¸¶¨Ä¬ÈÏÖµ, ÉõÖÁ×Ô¶¨Òå²Ù×÷¡£ÏëÇ¿ÖÆÖØÖÃEEPROM£¬ÇëÓÃ`EEP_RST`¼üÂë»ò[Bootmagic](feature_bootmagic.md)º¯Êý¡£±ÈÈ磬Èç¹ûÒªÔÚĬÈÏÇé¿öÏÂÉèÖÃRGB²ãָʾ£¬²¢±£´æĬÈÏÖµ
+
+```c
+void eeconfig_init_user(void) {  // EEPROMÕý±»ÖØÖÃ
+  user_config.raw = 0;
+  user_config.rgb_layer_change = true; // ÎÒÃÇÏëҪĬÈÏʹÄÜ
+  eeconfig_update_user(user_config.raw); // ÏòEEPROMдÈëĬÈÏÖµ
+
+  // use the non noeeprom versions, »¹ÒªÏòEEPROMдÈëÕâЩֵ
+  rgblight_enable(); // Ä¬ÈÏʹÄÜRGB
+  rgblight_sethsv_cyan();  // Ä¬ÈÏÉèÖÃÇàÉ«
+  rgblight_mode(1); // Ä¬ÈÏÉèÖó¤ÁÁ
+}
+```
+
+È»ºó¾ÍÍêÊÂÁË¡£RGB²ãָʾ»áÔÚÄãÏëÈÃËü¹¤×÷ʱ¹¤×÷¡£Õâ¸öÉèÖûáÒ»Ö±±£´æ£¬¼´±ãÄã°ÎϼüÅÌ¡£Èç¹ûÄãʹÓÃÆäËûRGB´úÂ룬²ãָʾ½«Ê§ÄÜ£¬ÏÖÔÚËü¿ÉÒÔ×öÄãËùÏëÁË¡£ 
+
+### 'EECONFIG' º¯ÊýÎĵµ
+
+* ¼üÅÌ/ÐÞ¶©: `void eeconfig_init_kb(void)`, `uint32_t eeconfig_read_kb(void)`ºÍ`void eeconfig_update_kb(uint32_t val)`
+* ²¼¾Ö: `void eeconfig_init_user(void)`, `uint32_t eeconfig_read_user(void)`ºÍ`void eeconfig_update_user(uint32_t val)`
+
+`val` ÊÇÄãÏëдÈëEEPROMµÄÖµ£¬`eeconfig_read_*`º¯Êý»á´ÓEEPROM·µ»ØÒ»¸ö32λ(Ë«×Ö)µÄÖµ¡£
+
+# ×Ô¶¨Òå»÷¼ü-³¤°´ÁÙ½çÖµ(TAPPING_TERM)
+ĬÈÏÇé¿öÏÂ,»÷¼ü-³¤°´ÁÙ½çÖµÊÇÈ«ÇòͳһµÄ£¬²¢ÇÒ²»ÄÜͨ¹ý¼ü½øÐÐÅäÖ᣶ÔÓÚ´ó¶àÊýÓû§À´ËµÕâºÜºÃ¡£µ«ÊÇÔÚÓÐЩÇé¿öÏ£¬¶ÔÓÚ`LT`¼üÀ´Ëµ°´¼üÑÓʱ¶ÔË«¹¦ÄܼüµÄÌáÉý¸ü´ó£¬¿ÉÄÜÊÇÒòΪÓÐЩ¼ü±ÈÆäËûµÄ¼ü¸üÈÝÒ×°´×¡¡£ÎªÁ˲»¸øÿ¸ö¶¼×Ô¶¨Òå¼üÂ룬±¾¹¦ÄÜ¿ÉÒÔΪÿ¸ö¼ü¶¨Òå`TAPPING_TERM`¡£
+
+ÏëʹÄÜÕâ¸ö¹¦ÄܵĻ°, ÒªÏÈÔÚ`config.h`¼ÓÉÏ`#define TAPPING_TERM_PER_KEY`¡£
+
+
+## `get_tapping_term`ʾÀýʵÏÖ
+
+ÏëÒªÐ޸ĻùÓÚ¼üÂëµÄ`TAPPING TERM`,ÄãÒªÏò`keymap.c`ÎļþÌí¼ÓÈçÏ´úÂë: 
+
+```c
+uint16_t get_tapping_term(uint16_t keycode) {
+  switch (keycode) {
+    case SFT_T(KC_SPC):
+      return TAPPING_TERM + 1250;
+    case LT(1, KC_GRV):
+      return 130;
+    default:
+      return TAPPING_TERM;
+  }
+}
+```
+
+### `get_tapping_term` º¯ÊýÎĵµ
+
+²»ÏñÕâƪµÄÆäËû¹¦ÄÜ,Õâ¸ö²»ÐèÒªquantum»òÕß¼üÅ̼¶±ðµÄº¯Êý£¬Ö»ÒªÓû§¼¶º¯Êý¼´¿É¡£
diff --git a/docs/zh-cn/faq_general.md b/docs/zh-cn/faq_general.md
new file mode 100644 (file)
index 0000000..4949acb
--- /dev/null
@@ -0,0 +1,19 @@
+# ³£¼ûÎÊÌâ
+
+## QMKÊÇʲô?
+
+[QMK](https://github.com/qmk), ÊÇÁ¿×Ó»úе¼üÅÌ(Quantum Mechanical Keyboard)µÄËõд£¬ÊÇһȺ¿ªÔ´°®ºÃÕßΪ¶¨ÖƼüÅÌ¿ª·¢µÄ¹¤¾ß¡£ÎÒÃÇ´Ó[QMK¹Ì¼þ](https://github.com/qmk/qmk_firmware)¿ªÊ¼£¬ÕâÊÇ[TMK](https://github.com/tmk/tmk_keyboard)µÄħ¸Ä·Ö²æ¡£
+
+### ÎªÊ²Ã´½ÐÁ¿×Ó(Quantum)?
+
+<!-- ´ýÐÞ¸´ ÒëÕßͲۣºÎĵµ×÷Õß¾¹È»Ò²²»ÖªµÀΪɶ¡£¡£¡£ -->
+
+## QMKºÍTMKÓÐʲôÇø±ð?
+
+TMK×î³õÓÉ[Jun Wako](https://github.com/tmk)Éè¼ÆºÍÖ´ÐС£QMKʼÓÚ[Jack Humbert](https://github.com/jackhumbert)ΪPlanck¼üÅÌ´´½¨µÄTMK·Ö²æ¡£Ò»¶Îʱ¼äºó£¬JackµÄ·Ö²æ¾ÍºÍTMKÏàÈ¥ÉõÔ¶ÁË£¬ÓÚÊÇÔÚ2015Ä꣬Jack¾ö¶¨¸ÄÃûQMK¡£
+
+´Ó¼¼Êõ¹ÛµãÀ´½²£¬QMKÊÇTMKÌí¼ÓһЩй¦Äܶø³ÉµÄ¡£ÓÈÆäÊÇQMKÀ©Õ¹ÁË¿ÉÓõļüÂ룬ʹ¸ß¼¶¹¦ÄܽøÒ»²½·á¸»±ÈÈç `S()`, `LCTL()`, ºÍ `MO()`¡£È«²¿¼üÂë¼û[¼üÂë](keycodes.md).
+
+´Ó¹¤³ÌµÄÉçÇø¹ÜÀíÀ´½²TMK×Ô¼ºÎ¬»¤ÁËËùÓйٷ½Ö§³ÖµÄ¼üÅÌ£¬Ö»ÓкÜСһ²¿·ÖÉçÇøÖ§³Ö¡£¶ÀÁ¢ÉçÇøά»¤ÒÑ´æÔÚ·Ö²æ»òΪÆäËû¼üÅÌ´´½¨µÄ·Ö²æ¡£Ä¬ÈÏÖ§³ÖºÜÉٵļüÂ룬ËùÒÔÓû§Í¨³£²»»áÓëËûÈË·ÖÏí²¼¾Ö¡£QMK¹ÄÀøͨ¹ý¼¯ÖйÜÀí²Ö¿â·ÖÏí²¼¾ÖºÍ¼üÅÌ£¬ÎÒÃÇ»á²ÉÄÉËùÓзûºÏÖÊÁ¿±ê×¼µÄPR¡£Õâ¾Í¼«´óµÄ±£Ö¤ÁËÉçÇøά»¤£¬Í¬Ê±QMKС×éÒ²»áÔÚ±ØҪʱ¸øÓè°ïÖú¡£
+
+ÕâÁ½ÖÖ·½·¨¶¼ÓÐÆäÓŵãºÍȱµã£¬²¢ÇÒ´úÂëÔÚÓÐÒâÒåʱÔÚTMKºÍQMKÖ®¼ä×ÔÓÉÁ÷¶¯¡£
diff --git a/docs/zh-cn/reference_glossary.md b/docs/zh-cn/reference_glossary.md
new file mode 100644 (file)
index 0000000..7b9adcc
--- /dev/null
@@ -0,0 +1,170 @@
+# QMK术语表
+
+## ARM
+多家公司生产的32位单片机系列,例如Atmel, Cypress, Kinetis, NXP, ST, 和 TI等公司。
+
+## AVR
+[Atmel](http://www.microchip.com/)公司的单片机系列。 AVR是TMK的初始支持平台。
+
+## AZERTY
+Français (法国)标准键盘布局。用键盘的前六个字母命名。
+
+## Backlight(背光)
+键盘上照明的通称。背光通常是一组LED灯,通过键帽或者按轴发光,但也不总是这样。
+
+## Bluetooth(蓝牙)
+一种短距离点对点无线协议。许多多无线键盘使用此协议。
+
+## Bootloader(引导加载程序)
+一种写到你单片机的保护区的特殊的程序,该程序可以使单片机升级自己的固件,通常是通过USB来升级。
+
+## Bootmagic(热改键)
+允许各种键盘行为动态变化的功能,如交换或禁用常用键。
+
+## C
+一种适用于系统代码的低级编程语言。大多数qmk代码是用C编写的。
+
+## Colemak
+一种流行的键盘布局。
+
+## Compile(编译)
+把人可读的代码转换成你的单片机可以运行的机器代码的过程。
+
+## Dvorak
+一个由August Dvorak博士在20世纪30年代创建的布局。Dvorak简化键盘(Dvorak Simplified Keyboard)的缩写。
+
+## Dynamic Macro(动态宏)
+一种记录在键盘上的宏,当键盘拔出或计算机重新启动时,宏将丢失。
+
+* [动态宏文档](feature_dynamic_macros.md)
+
+## Eclipse
+是一种受C语言开发者追捧的集成开发环境(IDE)。
+
+* [Eclipse安装说明](eclipse.md)
+
+## Firmware(固件)
+用来控制单片机的软件。
+
+## FLIP
+爱特梅尔(Atmel)提供的AVR器件刷写软件。我们一般推荐 [QMK刷写工具](https://github.com/qmk/qmk_flasher),但是对于一些高级用例,需要FLIP。
+
+## git
+命令行版本控制软件
+
+## GitHub
+负责大多数QMK项目的网站。它是Git、问题跟踪和其他帮助我们运行qmk的功能的集成平台。
+
+## ISP(在系统编程)
+在系统编程(In-system programming), 使用外部硬件和JTAG管脚对AVR芯片进行编程的一种方法。
+
+## hid_listen
+从键盘接收调试消息的接口。 您可以使用[QMK Flasher](https://github.com/qmk/qmk_flasher)或[PJRC's hid_listen](https://www.pjrc.com/teensy/hid_listen.html)查看这些消息
+
+## Keycode(键码)
+表示特定键的2字节数据。`0x00`-`0xFF`用于[基本键码](keycodes_basic.md)而`0x100`-`0xFFFF`用于[量子键码](quantum_keycodes.md).
+
+## Key Down
+一个键按下尚未抬起时触发的事件。
+
+## Key Up
+一个键抬起时触发的事件。
+
+## Keymap(键映射)
+映射到物理键盘布局的一组键码,在按键和按键释放时进行处理。有时翻译为布局,意为软件上表示的布局,即映射。
+
+## Layer(层)
+为了让一个键实现多个功能的抽象结构。最高活动层有限。
+
+## Leader Key(前导键、设置菜单键)
+本功能允许您点击前导键,然后按顺序按1-3个键子来激活按键或其他量子功能。
+
+* [前导键文档](feature_leader_key.md)
+
+## LED
+发光二极管,键盘上最常用的指示灯装置。
+
+## Make
+用于编译所有源文件的软件包。可以使用`make`命令和其他参数来编译你的固件。
+
+## Matrix(矩阵)
+一种由列和行组成的接线模式,使单片机能够用较少的引脚检测按键。矩阵通常包含二极管,以达到全键无冲。
+
+## Macro(宏)
+本功能可以在敲击单个键后发送多个按键事件(hid报告)。
+
+* [宏文档](feature_macros.md)
+
+## MCU(单片机、微控制单元)
+微控制单元,键盘的处理器。
+
+## Modifier(修改键、修饰键、功能键)
+按住该键将会改变其他键的功能,修饰键包括 Ctrl, Alt, 和 Shift。
+
+## Mousekeys(鼠标键)
+本功能在您敲击键盘时会控制鼠标光标。
+
+* [鼠标键文档](feature_mouse_keys.md)
+
+## N-Key Rollover (NKRO、全键无冲)
+一种术语,适用于能够同时报告任意数量按键的键盘。
+
+## Oneshot Modifier(粘滞键)
+一种能让你的功能键一直保持按下,直到你按下其他键的功能。它叫做粘滞键或叫做粘连键,该功能由软件实现而非机械结构。
+
+## ProMicro
+一种低成本AVR开发板。这种板子很容易在购物网站找到(价格不到20RMB),但是据说刷写pro micro有点令人抓狂。
+
+## Pull Request(拉请求、PR)
+向QMK请求提交代码。我们鼓励所有用户提交你们自己的键盘的代码。
+
+## QWERTY
+标准英文键盘,通常也用于其他语言,例如中文。是用键盘前6个字母命名的。
+
+## QWERTZ
+标准Deutsche(德语)键盘布局。使用前6个字母明名。
+
+## Rollover(允许翻转、无冲形式)
+该术语表示在一个键已按下时按下另一个键。形式包括2KRO(双键无冲),6KRO(6键无冲),和NKRO(全键无冲),无冲表示可同时按下而不产生冲突的键的数量。
+
+## Scancode(扫描码)
+HID报告中的一个1字节的数字,表示一个键子。这些数字在下列文档中[HID Usage Tables](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf)该文档发布于[USB-IF](http://www.usb.org/)。
+
+## Space Cadet键盘的shift键
+一种特使的shift设置,能让你通过敲击左或右shift一次或多次键入不同的括号。
+
+* [Space Cadet键盘文档](feature_space_cadet.md)
+
+## Tap(敲击、单击)
+按下并释放一个键。在某些情况下您需要区分键按下和键抬起,但是单击把两个事件都包括了。
+
+## Tap Dance(多击键)
+本功能允许向同一个键子分配多个键码,并根据按键次数区分。
+
+* [多击键文档](feature_tap_dance.md)
+
+## Teensy
+一种低成本AVR开发板<!--译者吐槽:我怎么感觉成本不低。好吧,我穷。 -->,通常用于手工连线键盘。这个teensy是有点小贵但是halfkay bootloader会让它刷写十分简单,所以也很常用。
+
+## Underlight(背光)
+用于照亮电路板底面的LED的总称。这些LED通常从印刷电路板的底部向键盘所在的表面发光。
+
+## Unicode
+在较大的计算机世界中,Unicode是一组编码方案,用于表示任何语言中的字符。 与qmk相关的是,它意味着使用各种操作系统方案来发送Unicode代码点,而不是扫描码。
+
+* [Unicode文档](feature_unicode.md)
+
+## Unit Testing(单元测试)
+针对qmk的自动运行测试框架。单元测试帮助我们确信我们的更改不会破坏任何东西。
+
+* [单元测试文档](unit_testing.md)
+
+## USB
+通用串行总线,键盘最常见的有线接口。
+
+## USB 主机 (或简易主机)
+USB诸暨市你的电脑,或者你的键盘所插的任何设备。
+
+# 并没有找到你想找到的术语?
+
+[建立一个issue](https://github.com/qmk/qmk_firmware/issues) ,想好你的问题,或许你所问的术语就会添加到这里。创建一个PR帮我们添加需要添加的术语当然坠吼了:)