07_瑞萨GUI(LVGL)移植实战教程之LVGL对接EC11旋转编码器驱动

这篇具有很好参考价值的文章主要介绍了07_瑞萨GUI(LVGL)移植实战教程之LVGL对接EC11旋转编码器驱动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本系列教程配套出有视频教程,观看地址:https://www.bilibili.com/video/BV1gV4y1e7Sg

7. LVGL对接EC11旋转编码器驱动

本次实验我们向LVGL库中对接EC11旋转编码器驱动,让我们能通过EC11旋转编码器操作UI。

7.1 复制工程

上次实验得出的工程我们可以通过复制在原有的基础上得到一个新的工程。

如果你不清楚复制工程的步骤,请参考阅读第三章实验的步骤教程。

本次实验我们的项目命名为:05_dshanmcu_ra6m5_lvgl_display_touchpad_encoder

07_瑞萨GUI(LVGL)移植实战教程之LVGL对接EC11旋转编码器驱动,瑞萨MCU基础入门教程,瑞萨,LVGL,单片机

7.2 对接驱动

打开 05_dshanmcu_ra6m5_lvgl_display_touchpad_encoder\dshanmcu_ra6m5\drivers\drv_gpio_ec11.c 文件,做如下修改:

将第 9 行的代码改为如下:

#define DRV_GPIO_EC11_USE_LVGL  (1)

打开 05_dshanmcu_ra6m5_lvgl_display_touchpad_encoder\dshanmcu_ra6m5\drivers\lv_port_indev.c 文件,下面对其进行修改适配我们的工程:

  1. 在第 14 行空白处添加头文件包含:
#include "drv_gpio_ec11.h"
  1. 修改 lv_port_indev_init 函数为如下代码:
void lv_port_indev_init(void)
{
    /**
     * Here you will find example implementation of input devices supported by LittelvGL:
     *  - Touchpad
     *  - Mouse (with cursor support)
     *  - Keypad (supports GUI usage only with key)
     *  - Encoder (supports GUI usage only with: left, right, push)
     *  - Button (external buttons to press points on the screen)
     *
     *  The `..._read()` function are only examples.
     *  You should shape them according to your hardware
     */
    /*------------------
     * Touchpad
     * -----------------*/

    /*Initialize your touchpad if you have*/
    touchpad_init();

    /*Register a touchpad input device*/
    static lv_indev_drv_t indev_pointer_drv;
    lv_indev_drv_init(&indev_pointer_drv);
    indev_pointer_drv.type = LV_INDEV_TYPE_POINTER;
    indev_pointer_drv.read_cb = touchpad_read;
    indev_touchpad = lv_indev_drv_register(&indev_pointer_drv);

    /*------------------
     * Mouse
     * -----------------*/

    /*Initialize your mouse if you have*/
    //mouse_init();

    /*Register a mouse input device*/
    //lv_indev_drv_init(&indev_drv);
    //indev_drv.type = LV_INDEV_TYPE_POINTER;
    //indev_drv.read_cb = mouse_read;
    //indev_mouse = lv_indev_drv_register(&indev_drv);

    /*Set cursor. For simplicity set a HOME symbol now.*/
    //lv_obj_t * mouse_cursor = lv_img_create(lv_scr_act());
    //lv_img_set_src(mouse_cursor, LV_SYMBOL_HOME);
    //lv_indev_set_cursor(indev_mouse, mouse_cursor);

    /*------------------
     * Keypad
     * -----------------*/

    /*Initialize your keypad or keyboard if you have*/
    //keypad_init();

    /*Register a keypad input device*/
    //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);

    /*Later you should create group(s) with `lv_group_t * group = lv_group_create()`,
     *add objects to the group with `lv_group_add_obj(group, obj)`
     *and assign this input device to group to navigate in it:
     *`lv_indev_set_group(indev_keypad, group);`*/

    /*------------------
     * Encoder
     * -----------------*/

    /*Initialize your encoder if you have*/
    encoder_init();

    /*Register a encoder input device*/
    static lv_indev_drv_t indev_encoder_drv;
    lv_indev_drv_init(&indev_encoder_drv);
    indev_encoder_drv.type = LV_INDEV_TYPE_ENCODER;
    indev_encoder_drv.read_cb = encoder_read;
    indev_encoder = lv_indev_drv_register(&indev_encoder_drv);

    /*Later you should create group(s) with `lv_group_t * group = lv_group_create()`,
     *add objects to the group with `lv_group_add_obj(group, obj)`
     *and assign this input device to group to navigate in it:
     *`lv_indev_set_group(indev_encoder, group);`*/

    /*------------------
     * Button
     * -----------------*/

    /*Initialize your button if you have*/
    //button_init();

    /*Register a button input device*/
    //lv_indev_drv_init(&indev_drv);
    //indev_drv.type = LV_INDEV_TYPE_BUTTON;
    //indev_drv.read_cb = button_read;
    //indev_button = lv_indev_drv_register(&indev_drv);

    /*Assign buttons to points on the screen*/
    //static const lv_point_t btn_points[2] = {
    //    {10, 10},   /*Button 0 -> x:10; y:10*/
    //    {40, 100},  /*Button 1 -> x:40; y:100*/
    //};
    //lv_indev_set_button_points(indev_button, btn_points);

    lv_group_t *g = lv_group_create();
    lv_group_set_default(g);
    lv_indev_set_group(indev_touchpad, g);
    lv_indev_set_group(indev_encoder, g);
}
  1. 修改 encoder_init 函数为如下代码:
static void encoder_init(void)
{
    /*Your code comes here*/
    fsp_err_t err;

    err = drv_gpio_ec11_init();
    if(FSP_SUCCESS != err)
    {
        printf ("%s %d\r\n", __FUNCTION__, __LINE__);
        __BKPT();
    }
}

  1. 修改 encoder_read 函数为如下代码:
/*Will be called by the library to read the encoder*/
static void encoder_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
    uint32_t handler_start = lv_tick_get();

    if(drv_gpio_ec11_get_pin_state(EC11_PIN_KEY))
    {
        if(handler_start >= drv_gpio_ec11_get_pin_press_tick(EC11_PIN_KEY))
        {
            encoder_diff = 0;
            encoder_state = LV_INDEV_STATE_PR;
            drv_gpio_ec11_set_pin_state(EC11_PIN_KEY, 0);
        }
    }
    else if(drv_gpio_ec11_get_pin_state(EC11_PIN_S1))
    {
        if(handler_start >= drv_gpio_ec11_get_pin_press_tick(EC11_PIN_S1))
        {
            encoder_diff -= 1;
            drv_gpio_ec11_set_pin_state(EC11_PIN_S1, 0);
        }
    }
    else if(drv_gpio_ec11_get_pin_state(EC11_PIN_S2))
    {
        if(handler_start >= drv_gpio_ec11_get_pin_press_tick(EC11_PIN_S2))
        {
            encoder_diff += 1;
            drv_gpio_ec11_set_pin_state(EC11_PIN_S2, 0);
        }
    }
    else
    {
        bsp_io_level_t level;
        g_ioport.p_api->pinRead(&g_ioport_ctrl, EC11_PIN_KEY, &level);
        if(level)
        {
            encoder_state = LV_INDEV_STATE_REL;
            encoder_diff = 0;
        }
    }

    data->enc_diff = encoder_diff;
    data->state = encoder_state;
}

7.3 调用app

打开 05_dshanmcu_ra6m5_lvgl_display_touchpad_encoder\dshanmcu_ra6m5\src\hal_entry.c 将 hal_entry 函数修改为如下所示的代码:

void hal_entry(void)
{
    /* TODO: add your own code here */
    //app_uart_test();
    //app_i2c_touchpad_test();
    //app_spi_display_test();
    app_lvgl_test();
    //app_ec11_test();

#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif
}

7.4 验证效果

点击编译按钮,再点击 debug 按钮,将程序烧写到开发板中。操作EC11编码器(左转、右转、按下)会看到UI也会跟着变化。文章来源地址https://www.toymoban.com/news/detail-708395.html

本节完

到了这里,关于07_瑞萨GUI(LVGL)移植实战教程之LVGL对接EC11旋转编码器驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 EC11 旋转编码器

    代码在最后,复制可直接食用 以及我的电路图 在研究EC11的时序之前首先要了解一点,EC11按旋转的输出动作可以分为两种。一种是转两格,A、B对C端输出一个完整脉冲(转一格就只是由低电平-高电平或由高电平-低电平);另一种就是转一格,A、B对C端输出一个完整脉冲。

    2024年02月02日
    浏览(40)
  • ESP32蓝牙+EC11旋转编码器实现对电脑音量控制

    ✨本项目基于Arduino开发框架下功能实现。 🛠蓝牙设备添加和连接 ⚡需要有带蓝牙硬件支持的电脑才能实现连接并控制,当然手机也可以连接但是不能实现对手机音量控制, 🌿以 Win10 系统电脑为例。在设置里面找到,添加 蓝牙和其他设备 🌿会搜索到 ESP32-keyboard 设备。 🌿

    2024年01月18日
    浏览(56)
  • STM32移植LVGL8.0.2超详细的保姆级教程附移植好的工程文件

    网上教程那么多,为什么你要写这个教程? 问的好,csnd上很多类似的教程,他们写的都很好,但是有些过于简洁,对刚上手的小伙伴不太友好,移植到一半遇到bug就想放弃。一些第三方的教程很详细,但是由于lvgl的版本迭代很快,移植的过程有了一些变化,所谓失之毫厘差

    2024年02月03日
    浏览(43)
  • 单片机移植freemodbus主机(STM32、GD32、瑞萨、国民技术等)

    从github下载:https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32 无法下载或者下载太慢可以用资源下载,无需积分。freeModbus主机源码下载 示例代码 参考从机代码创建 将FreeModbus主机源代码拷贝到工程中间件-第三方库-freemodbus源码库:即MiddlewaresThird_PartyFreeModbusMaster文件夹中。

    2024年02月11日
    浏览(46)
  • 【快速入门 LVGL】-- 1、STM32 工程移植 LVGL

    目录 一、LVGL 简述 二、复制一个STM32工程 三、下载 LVGL 四、裁剪 源文件 五、工程添加 LVGL 文件  六、注册 显示 七、注册 触摸屏 八、LVGL 心跳、任务刷新 九、开跑 LVGL  十、控件的事件添加、响应处理 十 一、几个好玩小事情 十 二、显示中文 丰富且强大的模块化图形组

    2024年04月27日
    浏览(35)
  • lvgl移植流程

    基于梁山派屏幕扩展板mcu屏幕源码Screen_MCU移植 下载lvgl 8.3版本源码下载地址:https://github.com/lvgl/lvgl 参考文档:Set-up a project — LVGL documentation 删除源码中不需要的文件夹,仅保留如下内容 demos : lvgl综合案例 examples :单个功能案例 src : 源代码 lv_conf_template.h : 重要的配置文件

    2024年01月19日
    浏览(28)
  • 第二节 LVGL移植

    确定输入、输出设备 输入:触摸屏、鼠标、键盘以及编码器;输出:显示屏 准备LVGL库、例程 准备V8.2版本的LVGL库文件,还有支持所需功能的例程源码 添加LVGL库到工程 按需裁剪、修改LVGL库文件,并添加到MDK工程中 配置输入、输出设备 适配自己的输入和输出设备,添加所需

    2024年02月06日
    浏览(34)
  • 【RV1126】移植LVGL

    RV1126文件系统下面没有 /dev/fb0 设备节点: 进入kernel 进入配置: 修改位置一,如下: 修改位置二,如下: 之后重新编译生成固件烧写到开发板。 地址:https://github.com/lvgl/lv_port_linux_frame_buffer git克隆地址:https://github.com/lvgl/lv_port_linux_frame_buffer.git 官方文档:https://blog.lvgl.i

    2024年02月07日
    浏览(48)
  • 【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL

    最近emwin用的比较烦躁,同时被LVGL酷炫的界面吸引到了,所以准备换用LVGL试试水。 LVGL(轻量级和通用图形库)是一个免费和开源的图形库,它提供了创建嵌入式GUI所需的一切,具有易于使用的图形元素,美丽的视觉效果和低内存占用。 丰富且强大的模块化图形组件:按钮 (b

    2024年02月02日
    浏览(71)
  • STM32移植LVGL(LittleVGL)

    https://lvgl.io/ 这是LVGL的官网, http://lvgl.100ask.org/8.2/intro/index.html 这是lvgl的中文介绍网站。 先通过这两个网站大致了解一下lvgl,在后面移植时会有个大概了解,移植起来会更清晰易懂。 1、准备STM32工程 1、先准备所用到的屏幕的显示和触摸(有触摸功能的屏幕)的工程。我这

    2023年04月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包