diff --git a/APP/key.c b/APP/key.c index 28fc20c..06ffb2c 100644 --- a/APP/key.c +++ b/APP/key.c @@ -18,17 +18,50 @@ void key_init(key_module_t *key_module) { } void key_do_loop_in_each_period() { + //如果没初始化则不进行按键扫描 + if (!s_inited) { + return; + } + + //按键扫描 for (int i = 0; i < key_module_s->nkey; i++) { // printf("key_name:%s\n", key_module_s->keys[i].name); key_process_each(&key_module_s->keys[i]); } } +static void prv_zkey_process_each_after_filter(key_t *each, bool now_io_state) { + if (now_io_state != each->last_io_state) { + if (now_io_state) { + each->keep_state_count = 0; + each->hasProcessed = false; + each->cur_state = zks_rising_edge; + key_module_s->onkey(each, each->cur_state); + } else { + each->cur_state = zks_falling_edge; + key_module_s->onkey(each, each->cur_state); + each->keep_state_count = 0; + } + each->last_io_state = now_io_state; + } else { + each->cur_state = zks_keep; + if (now_io_state) { + key_module_s->onkey(each, each->cur_state); + } + } +} + void key_process_each(key_t *each) { each->keep_state_count++; - bool now_io_state = each->get_key_state(); //获取现在的按键io状态 - if (!now_io_state) { - key_module_s->onkey(each, zks_rising_edge); - } + bool now_io_state = each->get_key_state(); //获取现在的按键io状态 true未按下 false按下 + +// if (now_io_state != each->last_io_state) { +// each->keep_state_count = 0; +// } + + each->after_filter_state = now_io_state; + each->last_real_state = now_io_state; + + prv_zkey_process_each_after_filter(each, each->after_filter_state); } \ No newline at end of file