目录
界面显示
简介
disp(界面显示)可以在LCD屏幕上显示内容,文字、图片、二维码都可以显示
API说明
API接口 | 描述 |
---|---|
disp.init(para) | 初始化LCD屏幕驱动 |
disp.clear() | 清空屏幕内容 |
disp.update() | 刷新屏幕,将内容显示到屏幕上 |
disp.puttext() | 显示文字 |
disp.setfontheight() | 缩放字体 |
disp.putimage() | 显示图片 |
disp.drawrect() | 显示矩形框(画一个框) |
disp.setcolor() | 设置前景色 |
disp.setbkcolor() | 设置背景色 |
disp.putqrcode() | 显示二维码 |
disp.getlcdinfo() | 获取屏幕分辨率和位深度 |
disp.close() | 关闭显示模块 |
详细的API介绍见disp(ui) API章节
实现流程
- 初始化LCD屏幕驱动
使用disp.init() 初始化屏幕驱动 - 清除屏幕
使用disp.clear() 清除屏上显示的内容 - 放置文字或图片
使用disp.puttext(str, x, y)来放置文字
使用disp.putimage(img, x, y)放置图片 - 刷新屏幕
使用disp.update()来刷新屏幕,在调用disp.clear()或放置文字之后,必须使用disp.update()后才可以清除屏幕或将放置的文字图片刷新到屏幕
显示二维码
示例
相关实例程序在脚本库的demo\ui文件夹下
初始化屏幕驱动
以\script_LuaTask_V2.3.8\demo\ui的demo为例。demo中在开机以后初始化lcd屏幕驱动,此功能演示选择的是LCD屏(ST7735)作为演示,我们选择对应的驱动“color_lcd_spi_st7735.lua”
module(...,package.seeall)
--[[
函数名:init
功能 :初始化LCD参数
参数 :无
返回值:无
]]
function init()
local para =
{
width = 128, --分辨率宽度,128像素;用户根据屏的参数自行修改
height = 160, --分辨率高度,160像素;用户根据屏的参数自行修改
bpp = 16, --位深度,彩屏仅支持16位
bus = disp.BUS_SPI4LINE, --LCD专用SPI引脚接口,不可修改
xoffset = 2, --X轴偏移
yoffset = 1, --Y轴偏移
freq = 13000000, --spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000)
pinrst = pio.P0_6, --reset,复位引脚
pinrs = pio.P0_1, --rs,命令/数据选择引脚
--初始化命令
--前两个字节表示类型:0001表示延时,0000或者0002表示命令,0003表示数据
--延时类型:后两个字节表示延时时间(单位毫秒)
--命令类型:后两个字节命令的值
--数据类型:后两个字节数据的值
initcmd =
{
0x00020011,
0x00010078,
--0x00020021, -- 反显
0x000200B1,
0x00030002,
0x00030035,
0x00030036,
0x000200B2,
0x00030002,
0x00030035,
0x00030036,
0x000200B3,
0x00030002,
0x00030035,
0x00030036,
0x00030002,
0x00030035,
0x00030036,
0x000200B4,
0x00030007,
0x000200C0,
0x000300A2,
0x00030002,
0x00030084,
0x000200C1,
0x000300C5,
0x000200C2,
0x0003000A,
0x00030000,
0x000200C3,
0x0003008A,
0x0003002A,
0x000200C4,
0x0003008A,
0x000300EE,
0x000200C5,
0x0003000E,
0x00020036,
0x000300C0,
0x000200E0,
0x00030012,
0x0003001C,
0x00030010,
0x00030018,
0x00030033,
0x0003002C,
0x00030025,
0x00030028,
0x00030028,
0x00030027,
0x0003002F,
0x0003003C,
0x00030000,
0x00030003,
0x00030003,
0x00030010,
0x000200E1,
0x00030012,
0x0003001C,
0x00030010,
0x00030018,
0x0003002D,
0x00030028,
0x00030023,
0x00030028,
0x00030028,
0x00030026,
0x0003002F,
0x0003003B,
0x00030000,
0x00030003,
0x00030003,
0x00030010,
0x0002003A,
0x00030005,
0x00020029,
},
--休眠命令
sleepcmd = {
0x00020010,
},
--唤醒命令
wakecmd = {
0x00020011,
}
}
disp.init(para)
disp.clear()
disp.update()
end
--控制SPI引脚的电压域
pmd.ldoset(15,pmd.LDO_VLCD)
init()
对于不同的屏幕有不同的驱动,目前demo里有如下几种屏幕的驱动
color_lcd_spi_gc9a01.lua
color_lcd_spi_gc9106l.lua
color_lcd_spi_ILI9341.lua
color_lcd_spi_st7735.lua
mono_lcd_spi_ssd1306.lua
LCD屏幕驱动初始化完毕后,接下来就可以在屏幕上显示内容了
显示文字
我们可以使用disp.puttext()在屏幕上显示文字,也可以使用disp.setcolor()更改文字颜色与disp.setbkcolor()更改背景颜色,如下代码
module(...,package.seeall)
function textColorTest()
--将屏幕背景色设置为黑色
disp.setbkcolor(0x0000)
--刷新内容先需要先清除一下屏幕
disp.clear()
--颜色值为16位的565颜色值,565颜色值由RGB换算.
--RGB值第一个字节取高五位,第二个字节取高六位,第三个字节取高五位。
--这里用的字体颜色为粉色,RGB值为(255, 101, 230),换算成565值为0XFB3C
disp.setcolor(0XFB3C)
--放置文字,只能放置GB2312编码的文字,其他的会乱码
--此处编写代码时编辑器所用的文字编码格式为UTF8,使用接口将文字编码格式转为GB2312
disp.puttext(common.utf8ToGb2312("屏幕上可以看到我"), 64, 80)
--使用此接口刷新屏幕
disp.update()
end
--执行函数
textColorTest()
显示图片
我们可以使用disp.putimage()在屏幕上显示图片,如下代码
module(...,package.seeall)
function putImageTest()
--刷新内容先需要先清除一下屏幕
disp.clear()
--这张图片是在格式网站上裁剪后转为png格式的图片,下载脚本时将图片一起下进模块
--图片所在路径为"/lua"
disp.putimage("/lua/mengqi.png", 0, 0)
disp.update()
end
--执行函数
putImageTest()
画框
我们可以使用disp.drawrect()在屏幕上画框,如下代码
module(...,package.seeall)
function putFrameTest()
--刷新内容先需要先清除一下屏幕
disp.clear()
--开始画框
disp.drawrect(8, 10, 120, 26,0x0000)
disp.drawrect(8, 28, 120, 44,0xF800)
disp.drawrect(8, 46, 120, 62,0x001F )
disp.drawrect(8, 64, 120, 80,0x07E0)
disp.drawrect(8, 82, 120, 98,0XFB3C)
disp.drawrect(8, 100, 120, 116,0xFFE0)
disp.drawrect(8, 118, 120, 134,0x7BE0)
disp.drawrect(8, 136, 120, 152,0x780F)
--刷新显示
disp.update()
end
--执行函数
putFrameTest()
常见问题
1、如何设置字体大小?
core中的默认支持的字体大小为16
如果需要调整为其他大小,使用disp.setfontheight(x)接口设置,x为字号大小
2、支持的屏的分辨率最高到多少?
240*320
3、如何生成ascii码可见字符的字库文件?
4、如何旋转屏幕内容?
用ST7735来做例子
更改驱动代码就可实现,如下
--先找到0x00020036和0x000200E0
--中间0x000300C0就是控制屏幕旋转方向的命令
--C0/00/A0/60或C8/08/A8/68就可以控制屏幕旋转方向
--如
0x000300A0
5、一款新屏,例如347D的屏能驱动吗?
目前 Air724 所有支持的屏幕驱动已经添加到了 demo\ui 路径下,可以先在 demo 中查看自己需要的屏幕驱动是否已经实现。
如果屏幕驱动未实现,但是屏幕接口属于spi,或者i2c,那么用户需要自己根据屏幕厂家提供的 datasheet 进行驱动编写了。
若在未支持的屏幕中驱动调试碰到问题,也可以将屏幕寄给我们进行驱动调试。
6、Air724有适配过比1.8寸更大的屏吗?
这个是跟分辨率相关的,和屏幕尺寸无关,Air724 支持的屏幕分辨率最大是 240*320,如果这个分辨率的屏大于 1.8寸,同样也是可以驱动的。