avatar

松果工作室

欢迎光临

  • 首页
  • freeRTOS
  • ESP
  • 开发手册
  • 快速笔记
  • 个人收藏
  • 工具
Home LVGL 对接键盘接口
文章

LVGL 对接键盘接口

Posted 2024-04-11 Updated 2024-04- 20
By YCP
11~14 min read

初始化键盘配置

void lv_port_indev_init(void) {
  static lv_indev_drv_t indev_drv;

  keypad_init();
  lv_indev_drv_init(&indev_drv);
  indev_drv.type = LV_INDEV_TYPE_KEYPAD;
  indev_drv.read_cb = keypad_read;
  indev_keypad = lv_indev_drv_register(&indev_drv);
}

相关配置函数

#if KEYPAD
#define BTN_PIN 9
static void keypad_init(void) {
    gpio_config_t btn_config = {
            .pin_bit_mask = (1ULL << BTN_PIN),
            .mode = GPIO_MODE_INPUT,
            .pull_up_en = GPIO_PULLUP_ENABLE,
            .pull_down_en = GPIO_PULLDOWN_DISABLE,
            .intr_type = GPIO_INTR_DISABLE,
    };
    gpio_config(&btn_config);
}
static void keypad_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data) {
    static uint32_t last_key = 0;
    //mouse_get_xy(&data->point.x, &data->point.y);
    uint32_t act_key = keypad_get_key();
    if (act_key != 0) {
        data->state = LV_INDEV_STATE_PR;
        switch (act_key) {
            case 1:
                act_key = LV_KEY_NEXT;
                break;
            case 2:
                act_key = LV_KEY_PREV;
                break;
            case 3:
                act_key = LV_KEY_LEFT;
                break;
            case 4:
                act_key = LV_KEY_RIGHT;
                break;
            case 5:
                act_key = LV_KEY_ENTER;
                break;
        }

        last_key = act_key;
    } else {
        data->state = LV_INDEV_STATE_REL;
    }
    data->key = last_key;
}
static uint32_t keypad_get_key(void) {
    if(gpio_get_level(BTN_PIN) == 0){
        return LV_KEY_ENTER;
    }else return 0;
}
#endif

注册组

void ui_Screen1_screen_init(void){
    //创建屏幕对象
    ui_Screen1 = lv_obj_create(NULL);
    lv_obj_clear_flag( ui_Screen1, LV_OBJ_FLAG_SCROLLABLE );

    //创建一个组链接实体按键
    lv_group_t * group = lv_group_create();
    lv_indev_set_group(indev_keypad, group);

    //创建按钮
    lv_obj_t * button = lv_btn_create(ui_Screen1);
    lv_obj_set_size(button, 60, 35);
    lv_obj_set_pos(button, 50, 125);
    lv_obj_add_event_cb(button, btn_event_cb, LV_EVENT_ALL, NULL);

    //链接实体按键
    lv_group_add_obj(group, button);

    //LVGL定时器
    lv_timer_create(update_time_cb, 1000, NULL);//创建一个定时器,每秒更新一次日期、时间、时长
}

现象

屏幕出现一个蓝色按钮并被选中,按键点击产生动作

坑和笔记
ESP
License:  CC BY 4.0
Share

Further Reading

Dec 23, 2024

其他笔记

EC800K AT连接移远云 配置过程 # 配置产品信息(初次连接需配置) AT+QIOTCFG="productinfo","pxxxxt","cDVTxxxxxxxxWGVB" # 连接开发者中心 AT+QIOTREG=1 # 查询当前连接状态(+QIOTSTATE: 8为正常) AT+QI

Jun 21, 2024

环形滤波算法

#include <stdio.h> #include <stdlib.h> #define BUFFER_SIZE 10 // 缓冲区大小 #define THRESHOLD 180

Jun 17, 2024

STM32 ADC采集的三种方式

采样周期 单个采集模式 ADC_Settings: 程序使用 uint16_t ADC_Read(

OLDER

LVGL 创建对象

NEWER

LVGL 对接 EC11

Recently Updated

  • ESP32(八) 简单的webserver
  • ESP32(七) NVS
  • ESP32(四) STA & AP
  • 多级菜单
  • ESP32(五) ESP32 OTA

Trending Tags

WCH Linux Elec freeRTOS STM ESP Flutter Others SwiftUI

Contents

©2025 松果工作室. Some rights reserved.

Using the Halo theme Chirpy