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

按键与消息机制测试