]> 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.
 
-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
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
 
-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:
 
- - 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.
index df25a3ccd14e164d5716b681f42144489aaed80a..b0d9f1c068a984a4bc47bc94f2d8300a39101b58 100644 (file)
@@ -7,27 +7,27 @@
   * [学习资源](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)
-  * [构建/编译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_vagrant.md)
+  * [vagrant指南](getting_started_vagrant.md)
   * [构建/编译指令](getting_started_make_guide.md)
   * [刷新固件](flashing.md)
   * [定制功能](custom_quantum_functions.md)
-  * [布局概述](keymap.md)
+  * [映射概述](keymap.md)
 
 * [硬件](hardware.md)
-  * [AVR 处理器](hardware_avr.md)
+  * [AVR处理器](hardware_avr.md)
   * [驱动](hardware_drivers.md)
 
 * 参考
@@ -35,8 +35,8 @@
   * [配置选项](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)
 
 * [特性](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)
-  * [自动控制](feature_auto_shift.md)
+  * [自动shift](feature_auto_shift.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)
-  * [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)
-  * [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_tap_dance.md)
+  * [多击键](feature_tap_dance.md)
   * [终端](feature_terminal.md)
   * [热敏打印机](feature_thermal_printer.md)
   * [Unicode](feature_unicode.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)
-  * [理解 QMK](understanding_qmk.md)
+  * [理解QMK](understanding_qmk.md)
 
 * 其他话题
   * [使用Eclipse开发QMK](other_eclipse.md)
@@ -99,8 +99,8 @@
 * 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)
-  * [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帮我们添加需要添加的术语当然坠吼了:)