ESP8266官方开发包ESP8266 NONOS SDK中有按键驱动函数,经过几天的摸索我总算知道怎么使用这些函数了。
首先看看头文件key.h有什么
#ifndef __KEY_H__ #define __KEY_H__ #include "gpio.h" typedef void (* key_function)(void); struct single_key_param { uint8 key_level; uint8 gpio_id; uint8 gpio_func; uint32 gpio_name; os_timer_t key_5s; os_timer_t key_50ms; key_function short_press; key_function long_press; }; struct keys_param { uint8 key_num; struct single_key_param **single_key; }; struct single_key_param *key_init_single(uint8 gpio_id, uint32 gpio_name, uint8 gpio_func, key_function long_press, key_function short_press); void key_init(struct keys_param *key); #endif
2、一个函数指针——key_function
3、两个结构体:single_key_param和keys_param
4、两个初始化函数——key_init_single和key_init
下面分析一下结构体single_key_param:
key_level:按键触发电平(待验证)
gpio_id:引脚ID
gpio_func:引脚功能
gpio_name:引脚名
key_5s:5秒定时器,用来触发长按的事件
key_50ms:50ms定时器,用来触发短按的事件
short_press:短按的函数指针
long_press:长按的函数指针
下面分析一下keys_param结构体:
key_num:要初始化的按键数量。
single_key:指向single_key_param结构体指针的指针,也可以说是指向那个结构体数组的指针
两个初始化函数:
key_init_single:初始化按键的结构体。
key_init:初始化按键。
下面给出使用这个API的例子,本人自己写的:
void key_down50ms_func(void) { os_printf("key down 50ms!\n"); } void key_down5s_func(void) { os_printf("key down 5s!\n"); } void my_key_all_init(void) { LOCAL struct keys_param key; LOCAL struct single_key_param *psingle_key[2]; psingle_key[0] = key_init_single(GPIO_ID_PIN(4),PERIPHS_IO_MUX_GPIO4_U,FUNC_GPIO4,key_down5s_func,key_down50ms_func); psingle_key[1] = key_init_single(GPIO_ID_PIN(5),PERIPHS_IO_MUX_GPIO5_U,FUNC_GPIO5,key_down5s_func,key_down50ms_func); key.key_num = 2; key.single_key = &psingle_key[0]; key_init(&key); }
key_down5s_func:长安后调用的函数
my_key_all_nit:按键初始化,这里使用引脚4和引脚5作为按键。