HLK-W801-LVGL8之横屏显示
- 前言
- 剖析正常竖屏显示
- 剖析横屏显示
- 显示效果
前言
前几天已经完成了关于W801移植LVGL,实现效果如下图所示:
‘
图片是竖屏显示的,因为屏幕就是240x320 分辨率的,如果要横屏显示呢,即把屏幕看成是320x240的该如何配置。原来本想直接通过配置LVGL中的一些配置参数来达到这个目的,但实际操作起来有几个问题,LVGL中可以通过sw_rotate=1,rotated=LV_DISP_ROT_90来达到旋转目的,而实际效果确实软件实现带来的帧率低和CPU占有高,且图片旋转后也只能显示240*320效果,不能宽屏显示。所以这里在思考如何利用ILI9325里面的显示驱动功能来实现(即ILI9235驱动配置显示旋转90°)
剖析正常竖屏显示
如图所示,F1区域竖屏显示:
屏幕水平H :垂直V = 240 :320
屏幕原点坐标 O1(0,0)
在lvgl的接口函数flush需实现区域填充,具体详见 LCD驱动 这里说明基本步骤:
1)配置Entry Mode (R03h)
Bit3 AM,Bit4:5=ID0:1
AM=0,ID0:1=3
2) F1区域填充时Window Area((R50h, R51h, R52h, R53h) 和起始坐标(R20h,R21h)
- 设置填充区域起始/终止坐标
reg :
0x50 set h1
0x51 set h2
0x52 set v1
0x53 set v2 - 设置起始坐标地址
reg:
0x20 set h1
0x21 set v1
剖析横屏显示
如图所示,F1区域横屏显示:
横屏显示看作将屏幕顺时针旋转90°,但这时屏幕水平X:垂直Y= 320 :240
显示起点坐标变成O2(0,0)
在lvgl的接口函数flush需实现区域填充,
1)配置Entry Mode (R03h)
Bit3 AM,Bit4:5=ID0:1
AM=1,ID0:1=2 ,这里设置ORG=1,此时起点坐标由O1(0,0)变成O2(0,0)
2)F1区域填充时Window Area((R50h, R51h, R52h, R53h) 和起始坐标(R20h,R21h)
这里是关键点:因为填充区域的起点和终点仍然由屏幕原点坐标O1(0,0)决定,所以当调整ORG=1后,O2坐标系所填充的区域需要转换成O1坐标系
如图F1区域的起点和终点坐标O2(x1,y1),O2(x2,y2),
在配置window area时需配置为 O1(h1,v1),O1(h2,v2)
根据屏幕的坐标关系可以得出:
- 设置填充区域起始/终止坐标
reg :
0x50 set h1=239-y2
0x51 set h2=239-y1
0x52 set v1=x1
0x53 set v2=x2 - 设置起始坐标地址
reg:
0x20 set x1
0x21 set y1
对于flush接口实现如下图:
显示效果
这里注意触摸的坐标也需要转换一些坐标:
O1(h3,v3) -> O2(x3=v3,y3=239-h3)