查看: 5477|回复: 4

[原创] 基于LPC55S69学习GUI-Guider软件分享三 ----- lvgl输入设备模拟

[复制链接]
  • TA的每日心情
    奋斗
    2 小时前
  • 签到天数: 2398 天

    连续签到: 107 天

    [LV.Master]伴坛终老

    84

    主题

    2万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    22281
    最后登录
    2025-8-16
    发表于 2021-7-7 22:01:23 | 显示全部楼层 |阅读模式
    本帖最后由 流水源 于 2021-7-7 22:01 编辑

            继上次移植了GUI-Guider生成的GUI界面后,显示没什么问题了。但是只有显示,不能操作,看起来还是不完整。这次就分享如何移植输入设备,可以点击和移动操作。
    输入设备移植文件主要是这个。如图,可以看到lvgl支持触摸指针设备,鼠标,键盘,encoder,button。
    1.jpg

    本次是通过串口方式发送数据模拟触摸指针设备。下面是主要修改步骤。
    串口接收6个字节,定义结构体变量映射6个字节。代码如下。
    主要是初始化,获取点击状态,获取x,y坐标这3个函数。

    1. extern union Indev_uart_data
    2. {
    3.     struct
    4.     {
    5.         uint8_t     flag;
    6.         uint8_t     press;
    7.         uint16_t    x;
    8.         uint16_t    y;
    9.     }touch;
    10.     uint8_t buff[6];
    11. }g_input;

    12. /*------------------
    13. * Touchpad
    14. * -----------------*/

    15. /*Initialize your touchpad*/
    16. static void touchpad_init(void)
    17. {
    18.     /*Your code comes here*/
    19.     memset(g_input.buff, 0, sizeof(g_input.buff));
    20. }

    21. /* Will be called by the library to read the touchpad */
    22. static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
    23. {
    24.     static lv_coord_t last_x = 0;
    25.     static lv_coord_t last_y = 0;

    26.     /*Save the pressed coordinates and the state*/
    27.     if(touchpad_is_pressed()) {
    28.         touchpad_get_xy(&last_x, &last_y);
    29.         data->state = LV_INDEV_STATE_PR;
    30.     } else {
    31.         data->state = LV_INDEV_STATE_REL;
    32.     }

    33.     /*Set the last pressed coordinates*/
    34.     data->point.x = last_x;
    35.     data->point.y = last_y;

    36.     /*Return `false` because we are not buffering and no more data to read*/
    37.     return false;
    38. }

    39. /*Return true is the touchpad is pressed*/
    40. static bool touchpad_is_pressed(void)
    41. {
    42.     /*Your code comes here*/
    43.     if((g_input.touch.flag == 'T')&&(g_input.touch.press))
    44.     {
    45.         return true;
    46.     }
    47.     return false;
    48. }

    49. /*Get the x and y coordinates if the touchpad is pressed*/
    50. static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y)
    51. {
    52.     /*Your code comes here*/
    53.     if(g_input.touch.flag == 'T')
    54.     {
    55.         (*x) = g_input.touch.x;
    56.         (*y) = g_input.touch.y;
    57.     }
    58. }

    复制代码
    然后就是主函数中调用输入设备初始化。
    2.jpg
    3.jpg

    主循环通过串口接收数据,模拟触摸指针设备。注意串口接收使用非阻塞方式。
    下面是通过串口助手发送数据效果,可以看到指针位置。
    10.jpg
    11.jpg
    12.jpg
    13.jpg


    具体参考如下代码:
    lpc55s69_lcd.rar (7.49 MB, 下载次数: 11)
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3916

    主题

    7534

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39870
    最后登录
    2025-8-15
    发表于 2021-7-8 15:38:53 | 显示全部楼层
    NICE!
    qiandao qiandao
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-15 09:29
  • 签到天数: 178 天

    连续签到: 1 天

    [LV.7]常住居民III

    11

    主题

    423

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1392
    最后登录
    2025-5-15
    发表于 2021-8-3 07:44:56 | 显示全部楼层
    太赞了
    加油加油
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-5-25 16:03
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    8

    主题

    720

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3419
    最后登录
    2025-8-8
    发表于 2021-8-3 09:44:15 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-8 17:07
  • 签到天数: 212 天

    连续签到: 1 天

    [LV.7]常住居民III

    0

    主题

    224

    帖子

    0

    高级会员

    Rank: 4

    积分
    727
    最后登录
    2025-5-8
    发表于 2023-1-11 16:25:31 | 显示全部楼层
    谢谢分享!
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-16 02:57 , Processed in 0.079061 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表