gk104_q1_ansi compiled pass.

This commit is contained in:
NaturalZh 2024-02-02 14:35:04 +08:00
parent 5ae58a483e
commit 47b1f3871b
6 changed files with 336 additions and 127 deletions

View File

@ -2,32 +2,172 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
int FN_WIN = 0;
int FN_MAC = 0;
int L_WIN = 0;
int L_MAC = 0;
enum layer_names {
_WIN,
_MAC,
_WIN_INDEX,
_MAC_INDEX
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_SCRL, KC_PAUS, KC_HOME, KC_END,
[_WIN] = LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_DEL, KC_PGUP, KC_PGDN, KC_PSCR,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_MENU, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_WIN_INDEX), KC_APP, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
[1] = LAYOUT_all(
_______, KC_F14, KC_F15, G(KC_TAB), KC_WSCH, G(C(KC_S)), KC_SLEP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, G(KC_SPC), RCS(KC_SPC), G(RCS(KC_4)), KC_PGUP, KC_PGDN,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_RMOD, RGB_MOD, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PPLS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT,
_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SPD, RGB_VAD, RGB_SPI, KC_P0, KC_PDOT
[_MAC] = LAYOUT_all(
KC_ESC, KC_F14, KC_F15, C(KC_UP), G(KC_D), G(KC_SPC), LAG(KC_EJCT), KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_DEL, KC_PGUP, KC_PGDN, KC_PSCR,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RCMD, MO(_MAC_INDEX), KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
),
[_WIN_INDEX] = LAYOUT_all(
_______, KC_F14, KC_F15, G(KC_TAB), KC_WSCH, G(C(KC_S)), KC_SLEP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, G(KC_SPC), RCS(KC_SPC), G(RCS(KC_4)), KC_HOME, KC_END,
_______, _______, _______, _______, _______, _______, TO(_WIN), TO(_MAC), _______, _______, RGB_TOG, RGB_RMOD, RGB_MOD, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PPLS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LGUI, KC_LALT, _______, _______, _______, KC_RALT, _______, KC_APP, RGB_SPD, RGB_VAD, RGB_SPI, KC_P0, KC_PDOT
),
[_MAC_INDEX] = LAYOUT_all(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, G(KC_SPC), RCS(KC_SPC), G(RCS(KC_4)), KC_HOME, KC_END,
_______, _______, _______, _______, _______, _______, TO(_WIN), TO(_MAC), _______, _______, RGB_TOG, RGB_RMOD, RGB_MOD, KC_DEL, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PPLS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT,
KC_LCTL, KC_LALT, KC_LGUI, _______, _______, _______, KC_RCMD, _______, KC_RALT, RGB_SPD, RGB_VAD, RGB_SPI, KC_P0, KC_PDOT
)
};
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(C(KC_WH_D), C(KC_WH_U))},
[1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SPD, RGB_SPI), ENCODER_CCW_CW(C(KC_WH_D), C(KC_WH_U))}
[_WIN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(C(KC_MINS), C(KC_EQL)), ENCODER_CCW_CW(RGB_SPD, RGB_SPI),ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(C(KC_WH_D), C(KC_WH_U))},
[_MAC] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(G(KC_MINS), G(KC_EQL)), ENCODER_CCW_CW(RGB_SPD, RGB_SPI),ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(C(KC_WH_D), C(KC_WH_U))},
[_WIN_INDEX] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(C(KC_MINS), C(KC_EQL)), ENCODER_CCW_CW(RGB_SPD, RGB_SPI),ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(C(KC_WH_D), C(KC_WH_U))},
[_MAC_INDEX] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(G(KC_MINS), G(KC_EQL)), ENCODER_CCW_CW(RGB_SPD, RGB_SPI),ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(C(KC_WH_D), C(KC_WH_U))}
};
#endif
bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
switch (get_highest_layer(layer_state)) {
case 2:{
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
} break;
case 3:{
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
}
} break;
case 0:{
if (L_WIN) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
}else{
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
}
}
} break;
case 1:{
if (L_MAC) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
}
}else{
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
}
} break;
default:{
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
}
}
return true;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
# ifdef RGB_MATRIX_ENABLE
case RGB_TOG:
if (record->event.pressed) {
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL: {
rgb_matrix_set_flags(LED_FLAG_NONE);
rgb_matrix_set_color_all(0, 0, 0);
} break;
default: {
rgb_matrix_set_flags(LED_FLAG_ALL);
} break;
}
}
return false;
case RGB_VAI:
rgb_matrix_set_flags(LED_FLAG_ALL);
return true;
# endif
case TO(0):
if (record->event.pressed) {
L_WIN = 1;
set_single_persistent_default_layer(0); // Save default layer 0 to eeprom
} else {
L_WIN = 0;
}
return true; // continue all further processing of this key
case MO(2):
if (record->event.pressed) {
FN_WIN = 1;
} else {
FN_WIN = 0;
}
return true; // continue all further processing of this key
case TO(1):
if (record->event.pressed) {
L_MAC = 1;
set_single_persistent_default_layer(1); //Save default layer 1 to eeprom
} else {
L_MAC = 0;
}
return true; // continue all further processing of this key
case MO(3):
if (record->event.pressed) {
FN_MAC = 1;
} else {
FN_MAC = 0;
}
return true; // continue all further processing of this key
default:
return true;
}
}

View File

@ -1 +0,0 @@
ENCODER_MAP_ENABLE = yes

View File

@ -21,9 +21,30 @@
# define WIN_MOD_INDEX 23
# define MAC_MOD_INDEX 24
# define WIN_LOCK_INDEX 75
# define CAPS_LOCK_INDEX 35
# define SCR_LOCK_INDEX 14
# define SDB B5
# define RGB_MATRIX_KEYPRESSES
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#endif // RGB_MATRIX_ENABLE
/*
*LED display driver.74HC595 Serial to parallel control LED field on/off.
* data(default):1-on/0-off
* bit0 --- MAC layer indicator
* bit1 --- Win layer indicator
* bit2 --- CAPS indicator
* bit3 --- NUM indicator
* bit4 --- SCR indicator
* bit7 --- Skyloong LOGO display
*/
#define MAC_ON 0b00000001
#define WIN_ON 0b00000010
#define CAPS_ON 0b00000100
#define NUM_ON 0b00001000
#define SCR_ON 0b00010000
#define SKYLOONG 0b10000000

View File

@ -0,0 +1,104 @@
// Copyright 2023 NaturalZh (@NaturalZh)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#ifndef HC595_ST_PIN
# error hc595: no storage register clock pins defined!
#endif
#ifndef HC595_SH_PIN
# error hc595: no shift register clock pins defined!
#endif
#ifndef HC595_DS
# error hc595: no serial data input pins defined!
#endif
/**
* 74HC595 Skyloong LED display Driver
* data(default):1-on/0-off
* bit0 --- MAC layer indicator
* bit1 --- Win layer indicator
* bit2 --- CAPS indicator
* bit3 --- NUM indicator
* bit4 --- SCR indicator
* bit7 --- Skyloong LOGO display
*
**/
#ifndef ClockTime
# define ClockTime 15
#endif
//enable mac layer indicator on LED diaplay
#ifndef MAC_ON
# define MAC_ON 0b00000001
#endif
//enable win layer indicator on LED diaplay
#ifndef WIN_ON
# define WIN_ON 0b00000010
#endif
//enable caps lock indicator on LED diaplay
#ifndef CAPS_ON
# define CAPS_ON 0b00000100
#endif
//enable number lock indicator on LED diaplay
#ifndef NUM_ON
# define NUM_ON 0b00001000
#endif
//enable scroll lock indicator on LED diaplay
#ifndef SCR_ON
# define SCR_ON 0b00010000
#endif
//Skyloong LOGO display on
#ifndef SKYLOONG
# define SKYLOONG 0b10000000
#endif
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
writePinLow(pin);
}
}
static inline void setPinOutput_writeHigh(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
writePinHigh(pin);
}
}
static inline void select_delay(uint16_t n) {
while (n-- > 0) {
asm volatile("nop" ::: "memory");
};
}
static inline void clockPulse(uint16_t n) {
writePinHigh(HC595_SH_PIN);
writePinHigh(HC595_ST_PIN);
select_delay(n);
writePinLow(HC595_SH_PIN);
writePinLow(HC595_ST_PIN);
}
static void s_serial_to_parallel(uint8_t data) { // Serial port to parallel port function
setPinOutput_writeLow(HC595_DS);
setPinOutput_writeLow(HC595_SH_PIN);
setPinOutput_writeLow(HC595_ST_PIN);
for(uint8_t i = 0; i < 8; i++) {
if(data & 0x01){
writePinHigh(HC595_DS);
}else{
writePinLow(HC595_DS);
}
clockPulse(ClockTime);
data >>= 1; // Move the data one digit to the right
}
}

View File

@ -1,11 +1,22 @@
// Copyright 2023 JZ-Skyloong (@JZ-Skyloong)
// Copyright 2023 NaturalZh (@NaturalZh)
// SPDX-License-Identifier: GPL-2.0-or-later
#include "quantum.h"
#define MAC_OFF 0x1A //disable mac layer indicator on LED display
#define MAC_ON 0x3B //enable mac layer indicator on LED diaplay
/**
* 74HC595 Skyloong LED display Driver
* data(default):1-on/0-off
* bit0 --- MAC layer indicator
* bit1 --- Win layer indicator
* bit2 --- CAPS indicator
* bit3 --- NUM indicator
* bit4 --- SCR indicator
* bit7 --- Skyloong LOGO display
*
**/
#define HC595_ST_PIN A6 //74HC595 storage register clock input
#define HC595_SH_PIN A5 //74HC595 shift register clock input
#define HC595_DS A7 // 74HC595 serial data input
#include "led_hc595.c"
uint8_t IND = 0; //buffer of LED Display
#if defined(RGB_MATRIX_ENABLE) /*&& defined(CAPS_LOCK_INDEX)*/
@ -128,16 +139,14 @@ const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = {
{1, CS16_SW5, CS17_SW5, CS18_SW5},
{1, CS16_SW6, CS17_SW6, CS18_SW6}
};
#endif
void suspend_power_down_kb() {
# ifdef RGB_MATRIX_ENABLE
writePinLow(SDB);
# endif
writePinLow(MAC_PIN);
s_serial_to_parallel(0);
suspend_power_down_user();
}
@ -145,11 +154,13 @@ void suspend_wakeup_init_kb() {
# ifdef RGB_MATRIX_ENABLE
writePinHigh(SDB);
# endif
s_serial_to_parallel(IND);
suspend_wakeup_init_user();
}
bool shutdown_kb(bool jump_to_bootloader) {
writePinLow(SDB);
s_serial_to_parallel(0);
return shutdown_user(jump_to_bootloader);
}
@ -157,15 +168,18 @@ layer_state_t default_layer_state_set_kb(layer_state_t state) {
switch (get_highest_layer(state)) {
case 0:
writePinLow(MAC_PIN);
IND =& MAC_OFF;
serial_to_parallel(IND);
//switch to win layer display
IND = IND & (~MAC_ON);
IND = IND | WIN_ON;
break;
case 1:
writePinHigh(MAC_PIN);
IND =|| MAC_ON;
serial_to_parallel(IND);
//switch to mac layer display
IND = IND & (~WIN_ON);
IND = IND | MAC_ON;
break;
}
s_serial_to_parallel(IND);
return state;
}
@ -174,63 +188,39 @@ bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
return false;
}
//caps lock display
if (host_keyboard_led_state().caps_lock) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_INDEX, 255, 255, 255);
IND = IND | CAPS_ON;
} else {
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(CAPS_LOCK_INDEX, 0, 0, 0);
}
IND = IND & (~CAPS_ON);
}
//number lock display
if (host_keyboard_led_state().num_lock) {
RGB_MATRIX_INDICATOR_SET_COLOR(NUM_LOCK_INDEX, 255, 255, 255);
IND = IND | NUM_ON;
} else {
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(NUM_LOCK_INDEX, 0, 0, 0);
}
IND = IND & (~NUM_ON);
}
//scroll lock display
if (host_keyboard_led_state().scroll_lock) {
RGB_MATRIX_INDICATOR_SET_COLOR(SCR_LOCK_INDEX, 255, 255, 255);
IND = IND | SCR_ON;
} else {
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(SCR_LOCK_INDEX, 0, 0, 0);
}
IND = IND & (~SCR_ON);
}
switch (get_highest_layer(layer_state)) {
case 2:{
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
} break;
case 3:{
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
}
} break;
case 0:{
if (L_WIN) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
}else{
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
}
}
} break;
case 1:{
if (L_MAC) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 255, 255, 255);
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
}
}else{
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
}
} break;
default:{
if (!rgb_matrix_get_flags()) {
RGB_MATRIX_INDICATOR_SET_COLOR(WIN_MOD_INDEX, 0, 0, 0);
RGB_MATRIX_INDICATOR_SET_COLOR(MAC_MOD_INDEX, 0, 0, 0);
}
}
}
return false;
s_serial_to_parallel(IND);
return true;
}
@ -243,51 +233,6 @@ void board_init(void) {
# endif
setPinOutput(MAC_PIN);
writePinHigh(MAC_PIN);
s_serial_to_parallel(SKYLOONG);
}
/*
LED display driver
*/
#define ClockTime 15
#define HC595_ST_PIN A6 //74HC595 storage register clock input
#define HC595_SH_PIN A5 //74HC595 shift register clock input
#define HC595_DS A7 // 74HC595 serial data input
static inline void setPinOutput_writeLow(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
writePinLow(pin);
}
}
static inline void setPinOutput_writeHigh(pin_t pin) {
ATOMIC_BLOCK_FORCEON {
setPinOutput(pin);
writePinHigh(pin);
}
}
static inline void select_delay(uint16_t n) {
while (n-- > 0) {
asm volatile("nop" ::: "memory");
};
}
static inline void clockPulse(uint16_t n) {
writePinHigh(HC595_SH_PIN);
writePinHigh(HC595_ST_PIN);
select_delay(n);
writePinLow(HC595_SH_PIN);
writePinLow(HC595_ST_PIN);
}
void serial_to_parallel(uint8_t data) { // 串口转并口函数
setPinOutput_writeLow(HC595_DS);
setPinOutput_writeLow(HC595_SH_PIN);
setPinOutput_writeLow(HC595_ST_PIN);
for(uint8_t i = 0; i < 8; i++) { // 循环8次每次输出一位数据
HC595_DS = (data & 0x01); // 将最低位写入串口数据输入端
clockPulse(ClockTime);
data >>= 1; // 将数据右移一位,准备输出下一位数据
}
}

View File

@ -1,26 +1,26 @@
# GK980 Q1 Keyboard
# GK104 Q1 LED Display Keyboard
![GK980 Q1](https://i.imgur.com/TYx22dhh.jpg)
![GK104 Q1](https://i.imgur.com/TYx22dhh.jpg)
## The PCB features:
* QMK & VIA compatibility
* RGB Matrix backlight
* Use PTIR switches instead of mechanical switches to increase the service life and reliability of switches.
* Mechanical switches Keyboard with LED display.
The following is the QMK Firmware for the Destop 87% keylayout - designed by Dongguan Jizhi Electronic Technology Co., Ltd
* Keyboard Maintainer: [JZ-Skyloong](https://github.com/JZ-skyloong)
* Hardware Supported: DestopPCB for Skyloong keylayout 85%, STM32F103C8T6
* Keyboard Maintainer: [NaturalZh](https://github.com/NaturalZh)
* Hardware Supported: DestopPCB for Skyloong keylayout 100%, STM32F103C8T6
* Hardware Availability: http://www.skyloong.com.cn https://skyloong.vip
Make example for this keyboard (after setting up your build environment):
make skyloong/gk980/q1:default
make skyloong/gk104/q1/ansi:default
Flashing example for this keyboard:
make skyloong/gk980/q1:default:flash
make skyloong/gk104/q1/ansi:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).