IO 按键
Overview
以 AC638N 为例,提供 IO 按键应用示例、工程配置、API 介绍和常见问题。
应用示例
- 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; } } } 
工程配置
- 在 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住按,观察打印的信息。 
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 - 按键与消息机制测试