首先这个屏幕默认就是竖着的,他的240方向排列着子像素 是行扫描方向 有三个寄存器会影响显示的扫描顺序
// R1是SS:选择源极驱动器输出的移位方向。 这里以竖屏,排线在下确定说原点位置 屏幕在240分辨率方向是三像素,子像素排列在240方向 // 当 SS = 0 时,输出的移位方向是从 S1 到 S720 s1在右边 s720在左边 // 当 SS = 1 时,输出的移位方向是从 S720 到 S1。 LCD_WriteReg(LCD_REG_1, 0x0000); // ss sm bit 240方向扫描方向(左右) 0100 从右往左/0000从左往右 // scan line原点设置(320方向上下) a700在上/2700原点在下 LCD_WriteReg(LCD_REG_96, 0x2700); // scan line原点设置(320方向上下) a700在上/2700原点在下 /* set GRAM write direction and BGR = 1 */ /* I/D=00第四位 (Horizontal : increment, Vertical : decrement) */ /* AM=1 第三位 (address is updated in vertical writing direction) */ /* 设置 GRAM 写入方向和 BGR = 1 */ /* I/D=00第四位(水平:递增,垂直:递减)*/ /* AM=1(垂直写入方向更新地址)*/ LCD_WriteReg(LCD_REG_3, 0x1000 | 0x0020 | 0x0010 | 0x0000); // RGB&GBR/左右0010/0000、上下0000/0020、水平垂直0000/0008 lvgl008出错
如果图像是镜像,可以调整reg1根reg96
reg3跟lvgl的disp驱动写法密切相关,这限制了lvgl的屏幕方向,如果想旋转lvgl的显示 ,可以使用软件旋转
在lvgl_init()函数中,可以找到lv_disp_drv_t结构体定义的一个变量disp_drv,修改disp_drv这两个参数的值即可实现旋转;
...
/*Create a display*/
lv_disp_drv_t disp_drv;
lv_disp_drv_init(&disp_drv);
disp_drv.buffer = &disp_buf;
disp_drv.flush_cb = lvgl_flush_cb;
disp_drv.sw_rotate = 1; // add for rotation 软件算法旋转
disp_drv.rotated = LV_DISP_ROT_90; // add for rotation 可以是 LV_DISP_ROT_NONE
, LV_DISP_ROT_90
, LV_DISP_ROT_180
, or LV_DISP_ROT_270
这些宏定义代表了旋转角度
lv_disp_drv_register(&disp_drv);
...