c 语言开发esp8266,ESP8266使用官方SDK中的key.c函数

ESP8266官方的IoT 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

1、gpio头文件

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_init(void)

{

struct keys_param key;

struct single_key_param single_key[1];

struct single_key_param *psingle_key = &single_key[0];

psingle_key =

key_init_single(GPIO_ID_PIN(0),PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0,key_down5s_func,key_down50ms_func);

key.key_num = 1;

//key.single_key = key_init_single(2,2,(key_function)NULL,(key_function)NULL,(key_function)NULL);

key.single_key = &psingle_key;

key_init(&key);

}

key_down50ms_func:短按后调用的函数

key_down5s_func:长安后调用的函数

my_key_init:按键初始化,这里使用引脚0作为按键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值