查看: 948|回复: 0

[评测分享] 【Telink-泰凌微电子 B91通用开发套件】(三)矩阵键盘适配

[复制链接]
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 128 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2023-10-22 22:00:28 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 andeyqi 于 2023-10-23 18:18 编辑

    简介:

    B91的开发套件上自带了2*2 的矩阵键盘,原理图如下,TL_KEY1,TL_KEY2可以作为矩阵键盘的行信号,TL_KEY3,TL_KEY4可以作为矩阵键盘的列信号,我们逐行扫描TL_KEY1,TL_KEY2,读取TL_KEY3,TL_KEY4 列信号状态即可获取案件状态,扫描TL_KEY1 时将TL_KEY1设置为高,将其他三组信号设置为输入,读取TL_KEY3,TL_KEY4信号状态即可判断按键是否按下,如果被按下对应的回去取到高电平状态,释放读取到低电平从而判断按键状态。
    keyboard.png

    GPIO 接口配置

    按照上面的读取原理,我们只要基本的配置gpio 的输入输出状态即可实现矩阵键盘的功能,TLSR9518 的gpio 配置如下寄存器即可实GPIO 的输入输出,上下拉电阻,输出驱动状态的配置。

    gpio_set.png
    GPIO 寄存器
    gpio_logic.png
    GPIO 逻辑框图

    SDK 驱动库内的接口直接调用即可完成gpio 的配置输出,按照上面的扫描原理,在((二)FreeRtos 适配SHELL)的基础上创建任务扫面按键状态,代码如下:
    1. void keyba_scan(void)
    2. {
    3.         static uint8_t key[4] = {0x00,0x00,0x00,0x00};

    4.         /* keyboard row0 init as output */
    5.         gpio_function_en(KEY_BOARD_ROW1);
    6.         gpio_output_en(KEY_BOARD_ROW1);
    7.         gpio_set_level(KEY_BOARD_ROW1,1);

    8.         /* keyboard row1 col1 col2 init as input */
    9.         gpio_function_en(KEY_BOARD_ROW2);
    10.         gpio_input_en(KEY_BOARD_ROW2);
    11.         gpio_set_up_down_res(KEY_BOARD_ROW2,GPIO_PIN_PULLDOWN_100K);
    12.         gpio_function_en(KEY_BOARD_COL1);
    13.         gpio_input_en(KEY_BOARD_COL1);
    14.         gpio_set_up_down_res(KEY_BOARD_COL1,GPIO_PIN_PULLDOWN_100K);
    15.         gpio_function_en(KEY_BOARD_COL2);
    16.         gpio_input_en(KEY_BOARD_COL2);
    17.         gpio_set_up_down_res(KEY_BOARD_COL2,GPIO_PIN_PULLDOWN_100K);

    18.         vTaskDelay(100);

    19.         /* read row status */
    20.         if(gpio_get_level(KEY_BOARD_COL1) != key[0])
    21.         {
    22.                 key[0] = gpio_get_level(KEY_BOARD_COL1);
    23.                 printf("KEY1 %s\r\n",key[0] ? "DOWN" : "UP");
    24.         }

    25.         if(gpio_get_level(KEY_BOARD_COL2) != key[1])
    26.         {
    27.                 key[1] = gpio_get_level(KEY_BOARD_COL2);
    28.                 printf("KEY2 %s\r\n",key[1] ? "DOWN" : "UP");
    29.         }

    30.         gpio_set_level(KEY_BOARD_ROW1,0);

    31.         /* keyboard row0 init as output */
    32.         gpio_function_en(KEY_BOARD_ROW2);
    33.         gpio_output_en(KEY_BOARD_ROW2);
    34.         gpio_set_level(KEY_BOARD_ROW2,1);

    35.         /* keyboard row1 col1 col2 init as input */
    36.         gpio_function_en(KEY_BOARD_ROW1);
    37.         gpio_input_en(KEY_BOARD_ROW1);
    38.         gpio_set_up_down_res(KEY_BOARD_ROW1,GPIO_PIN_PULLDOWN_100K);
    39.         gpio_function_en(KEY_BOARD_COL1);
    40.         gpio_input_en(KEY_BOARD_COL1);
    41.         gpio_set_up_down_res(KEY_BOARD_COL1,GPIO_PIN_PULLDOWN_100K);
    42.         gpio_function_en(KEY_BOARD_COL2);
    43.         gpio_input_en(KEY_BOARD_COL2);
    44.         gpio_set_up_down_res(KEY_BOARD_COL2,GPIO_PIN_PULLDOWN_100K);

    45.         vTaskDelay(100);
    46.         /* read row status */
    47.         if(gpio_get_level(KEY_BOARD_COL1) != key[2])
    48.         {
    49.                 key[2] = gpio_get_level(KEY_BOARD_COL1);
    50.                 printf("KEY3 %s\r\n",key[2] ? "DOWN" : "UP");
    51.         }

    52.         if(gpio_get_level(KEY_BOARD_COL2) != key[3])
    53.         {
    54.                 key[3] = gpio_get_level(KEY_BOARD_COL2);
    55.                 printf("KEY4 %s\r\n",key[3] ? "DOWN" : "UP");
    56.         }
    57.         gpio_set_level(KEY_BOARD_ROW2,0);
    58. }


    59. static void led_task(void *pvParameters){

    60.         while(1){
    61.                 keyba_scan();
    62.                 vTaskDelay(100);
    63.         }
    64.         (void)(pvParameters);
    65. }
    复制代码

    下载验证

    上述代码运行后可以按照期待的方式读取到按键的按下抬起动作,本示例只是单纯验证矩阵键盘功能,并没有加入按键的去抖处理。


    4e6783b13276f32e6609fbf8027587e1[00-00-00--00-00-12].gif



    ==================资料分割线==================
    官方的sdk文档及文档整理至如下路径,里面的所有资料也都可以从官方的wiki获取



    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 18:11 , Processed in 0.125974 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.