8. IO 按键
Overview
以 AC638N 为例,提供 IO 按键应用示例、工程配置、API 介绍和常见问题。
8.1. 应用示例
IO 按键具体源代码详见 sdk/bsp/AC638N/src/key_driver.c
key_driver.c
中参考示例如下:void key_msg_test_demo() { /*******demo实现前提**********/ //消息机制初始化: msg_init //按键初始化: key_driver_init //定时器10ms扫描:key_driver_scan u16 msg; while (1) { msg = get_msg(); if (msg == NO_MSG) { continue; } switch (msg) { case MSG_TEST_IO_KEY1_SHORT: log_info("IO_KEY1_SHOURT"); break; case MSG_TEST_IO_KEY1_LONG: log_info("IO_KEY1___LONG"); break; case MSG_TEST_IO_KEY1_HOLD: log_info("IO_KEY1_HOLD"); break; case MSG_TEST_IO_KEY1_LONG_HOLD_UP: log_info("IO_KEY1_LONG_HOLD_UP"); break; case MSG_TEST_IO_KEY2_SHORT: log_info("IO_KEY2_SHOURT"); break; case MSG_TEST_IO_KEY2_LONG: log_info("IO_KEY2___LONG"); break; case MSG_TEST_IO_KEY2_HOLD: log_info("IO_KEY2_HOLD"); break; case MSG_TEST_IO_KEY2_LONG_HOLD_UP: log_info("IO_KEY2_LONG_HOLD_UP"); break; default: log_info("default msg:%x", msg); break; } } }
8.2. 工程配置
在 sdk/bsp/AC638N/board/board_demo.c 中配置按键io引脚:
/**************** key driver config ****************/ #if (USE_KEY_DRIVER == 1) //2个测试io按键 u16 io_key_table[2] = { IO_PORTA_01, IO_PORTA_02, }; #endif
在 sdk/apps/main.c 中函数
user_main()
添加如下工程代码:int user_main() { extern void key_msg_test_demo(void); key_msg_test_demo(); }
编译下载后,PA1 和 PA2 分别接上 key 按键,再分别进行长按、短按、hold住按,观察打印的信息。
8.3. API参考
IO 按键常用相关 API 介绍,具体软件代码见 sdk/bsp/AC638N/src/key_driver.c
Functions
-
int io_key_init(void *para)
IO按键值状态初始化
- Parameters
para – 用户参数
- Returns
0:初始化成功
-
u8 io_get_key_value(void)
IO按键值获取
- Returns
按键值
-
void io_key_process(u8 key_status, u8 key_value)
按键处理函数
Note
注意按键处理时间不宜过长
- Parameters
key_status – 按键状态(短按、长按、连按、抬起等)
key_value – 按键值
-
void key_driver_scan(void *_scan_para)
按键扫描函数,判断是否有按键按下,按下的时间状态
- Parameters
_scan_para – 按键参数
-
int key_driver_init(struct key_driver_para *key_para)
按键初始化
- Parameters
key_para – 按键参数
- Returns
-1:初始化错误 0:初始化成功
-
void key_msg_test_demo()
按键测试demo
Note
按键与消息机制测试