#include //定义布尔 #include #include "key.h" #include "port.h" #include "systicket.h" #include "this_device.h" static key_t s_keys[] = { s_key_init("powerkey", port_gpio_get_power_key_state), s_key_init("levelkey", port_gpio_get_level_key_state), s_key_init("timerkey", port_gpio_get_timer_key_state), s_key_init("intervalkey", port_gpio_get_interval_key_state), }; static ThisDevice_t this_device = {.power = false}; static void mf_init_all_subdevice_state() { port_debug_set(false); port_fan_set(false); port_led0_set(false); port_led1_set(false); port_led2_set(false); port_led3_set(false); port_led_r_set(false); port_led_g_set(false); port_led_b_set(false); } static void poweron() { this_device.power = true; port_fan_set(true); return; } static void powerdown() { this_device.power = false; port_fan_set(false); return; } // 各个按键处理逻辑 static void mf_process_poweron_key(key_t *key) { printf("key name:%s\n", key->name); if (!this_device.power) { poweron(); } else { powerdown(); } return; } static void mf_process_level_key(key_t *key) { printf("key name:%s\n", key->name); return; } static void mf_process_timer_key(key_t *key) { printf("key name:%s\n", key->name); return; } static void mf_process_interval_key(key_t *key) { printf("key name:%s\n", key->name); return; } static void onkey(key_t *key, key_state_t key_state) { if /* */ (strcmp(key->name, "powerkey") == 0 && zks_rising_edge == key_state) { mf_process_poweron_key(key); } else if (strcmp(key->name, "levelkey") == 0 && zks_rising_edge == key_state) { mf_process_level_key(key); } else if (strcmp(key->name, "timerkey") == 0 && zks_rising_edge == key_state) { mf_process_timer_key(key); } else if (strcmp(key->name, "intervalkey") == 0 && zks_rising_edge == key_state) { mf_process_interval_key(key); } } key_module_t key_module = key_module_init(s_keys, onkey); void hardware_init() { SystemInit(); //配置系统时钟 DeviceClockAllEnable(); //打开所有外设时钟 systicket_init(); port_init(); } void hardware_default_settings() { mf_init_all_subdevice_state(); } void flip_debuf_light_level() { static uint8_t debug_led_state = 1; debug_led_state = !debug_led_state; port_debug_set(debug_led_state); } int main() { hardware_init(); hardware_default_settings(); key_init(&key_module); while (true) { // scan key DO_IT_EACH_MS(20) { key_do_loop_in_each_period(); }; END(); // debug light DO_IT_EACH_MS(150) { flip_debuf_light_level(); } END(); } return 0; }