LVGL 之旋转屏幕方向

关键字 :LVGL,QSPI LCD

 一、更改屏幕默认显示方向

在横屏竖屏切换时,需要旋转屏幕显示方向,一般考虑从以下几个方向入手:

        ① 在屏的 Driver IC 更改显示方向设置,该方法只需要设置屏的显示驱动芯片的寄存器就可以更改默认显示方向,属于硬件旋转,不会额外占用 CPU 算力,所以不会影响帧率,通常优先考虑这种方式;

        ② GPU 旋转,若 MCU 内部带有 GPU 类的图像加速器,可以使用其进行旋转,这种属于 GPU 帮忙做计算,不会大量占用 CPU 的资源;

        ③ GUI / MCU 软件旋转,这种一般是 CPU 自己做计算进行旋转,会占用较多 CPU 算力,一般会明显拉低帧率。

二、问题描述


比如最近遇到一个 QSPI LCD,默认是竖屏显示,客户开发产品时需要改为横屏显示,如下图所示。



图 1. 竖屏切横屏

咨询屏厂后得知该屏的 Driver IC 不支持更改显示方向,也就是在屏的硬件上固定为竖屏显示,无法更改,方法 ① 行不通。由于 MCU 内部也没有 GPU 类的图像加速器,所以方法 ② 也不行,只能考虑方法 ③。客户使用的 GUI 是  LVGL,我们可以借用其自带的软件旋转。

 

三、解决方法


按照上述思路,我们以 NXP LPC55xx 为例(使用 LVGL V8.5.3)来设置 LVGL 进行旋转。这部分在 LVGL 官网有相关介绍,我们需要设置 sw_rotate 标志位和旋转角度 0° / 90° / 180° / 270°。



图 2. 旋转设置



lvgl_support.c 的函数 lv_port_disp_init() 中做如下修改,主要目的是添加软件旋转的设置。



图 3. 代码旋转设置

以下为更改前后的图片,由于 QSPI 屏是刷新的局部窗口,所以在画面变化不大时,该软件旋转没有明显拉低帧率,如果是全屏刷新,则增加软件旋转后帧率会明显降低。



图 4. 修改前


图 5. 修改后

在这里修改后,Touch 报点的坐标无需自己手动从竖屏修改为横屏,LVGL 内部会自动处理。写界面时,控件的坐标、对齐等位置关系的设置以横屏坐标为准。也就是除了 LCD 硬件驱动层是竖屏坐标,其他 GUI 的软件层均为横屏坐标。

 

 

四、参考资料


(1)LVGL 参考文档,可在 LVGL 官网下载,网址如下:

https://docs.lvgl.io/8.3/porting/display.html

(2)LPC5536 Reference Manual,可在 NXP 官网下载,网址如下:

https://www.nxp.com/webapp/sps/download/license.jsp?colCode=LPC553xRM

 

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论