lcd - lcd驱动模块#

已适配 Air780E/Air700E Air780EP Air601 Air101/Air103 Air105 ESP32C3 ESP32S3

备注

本页文档由这个文件自动生成。如有错误,请提交issue或帮忙修改后pr,谢谢!

小技巧

本库有专属demo,点此链接查看lcd的demo例子

常量#

常量

类型

解释

lcd.font_opposansm12

font

12号字体

lcd.font_unifont_t_symbols

font

符号字体

lcd.font_open_iconic_weather_6x_t

font

天气字体

lcd.font_opposansm16

font

16号字体

lcd.font_opposansm18

font

18号字体

lcd.font_opposansm20

font

20号字体

lcd.font_opposansm22

font

22号字体

lcd.font_opposansm24

font

24号字体

lcd.font_opposansm32

font

32号字体

lcd.font_opposansm12_chinese

font

12号中文字体

lcd.font_opposansm14_chinese

font

14号中文字体

lcd.font_opposansm16_chinese

font

16号中文字体

lcd.font_opposansm18_chinese

font

18号中文字体

lcd.font_opposansm20_chinese

font

20号中文字体

lcd.font_opposansm22_chinese

font

22号中文字体

lcd.font_opposansm24_chinese

font

24号中文字体

lcd.font_opposansm32_chinese

font

32号中文字体

lcd.HWID_0

硬件lcd驱动id0

(根据芯片支持选择)

lcd.WIRE_3_BIT_9_INTERFACE_I

三线spi

9bit 模式I

lcd.WIRE_4_BIT_8_INTERFACE_I

四线spi

8bit 模式I

lcd.WIRE_3_BIT_9_INTERFACE_II

三线spi

9bit 模式II

lcd.WIRE_4_BIT_8_INTERFACE_II

四线spi

8bit 模式II

lcd.init(tp, args, spi_dev, init_in_service)#

lcd显示屏初始化

参数

传入值类型

解释

string

lcd类型,当前支持:
st7796
st7789
st7735
st7735v
st7735s
gc9a01
gc9106l
gc9306x
ili9486
custom

table

附加参数,与具体设备有关:
pin_pwr(背光)为可选项,可不设置
port:spi端口,例如0,1,2…如果为device方式则为”device”
pin_dc:lcd数据/命令选择引脚
pin_rst:lcd复位引脚
pin_pwr:lcd背光引脚 可选项,可不设置
direction:lcd屏幕方向 0:0° 1:180° 2:270° 3:90°
w:lcd 水平分辨率
h:lcd 竖直分辨率
xoffset:x偏移(不同屏幕ic 不同屏幕方向会有差异)
yoffset:y偏移(不同屏幕ic 不同屏幕方向会有差异)
direction0:0°方向命令,(不同屏幕ic会有差异)
direction90:90°方向命令,(不同屏幕ic会有差异)
direction180:180°方向命令,(不同屏幕ic会有差异)
direction270:270°方向命令,(不同屏幕ic会有差异)
sleepcmd:睡眠命令,默认0X10
wakecmd:唤醒命令,默认0X11
interface_mode lcd模式,默认lcd.WIRE_4_BIT_8_INTERFACE_I

userdata

spi设备,当port = “device”时有效

boolean

允许初始化在lcd service里运行,默认是false

返回值

例子

-- 初始化spi0的st7735s 注意:lcd初始化之前需要先初始化spi
spi_lcd = spi.deviceSetup(0,20,0,0,8,2000000,spi.MSB,1,1)
log.info("lcd.init",
lcd.init("st7735s",{port = "device",pin_dc = 17, pin_pwr = 7,pin_rst = 19,direction = 2,w = 160,h = 80,xoffset = 1,yoffset = 26},spi_lcd))

lcd.close()#

关闭lcd显示屏

参数

返回值

例子

-- 关闭lcd
lcd.close()

lcd.on()#

开启lcd显示屏背光

参数

返回值

例子

-- 开启lcd显示屏背光
lcd.on()

lcd.off()#

关闭lcd显示屏背光

参数

返回值

例子

-- 关闭lcd显示屏背光
lcd.off()

lcd.sleep()#

lcd睡眠

参数

返回值

例子

-- lcd睡眠
lcd.sleep()

lcd.wakeup()#

lcd唤醒

参数

返回值

例子

-- lcd唤醒
lcd.wakeup()

lcd.invon()#

lcd反显

参数

返回值

例子

-- lcd反显
lcd.invon()

lcd.invoff()#

lcd反显关闭

参数

返回值

例子

-- lcd反显关闭
lcd.invoff()

lcd.cmd(cmd)#

lcd命令

参数

传入值类型

解释

int

cmd

返回值

例子

-- lcd命令
lcd.cmd(0x21)

lcd.data(data)#

lcd数据

参数

传入值类型

解释

int

data

返回值

例子

-- lcd数据
lcd.data(0x21)

lcd.setColor(back,fore)#

lcd颜色设置

参数

传入值类型

解释

int

背景色

int

前景色

返回值

例子

-- lcd颜色设置
lcd.setColor(0xFFFF,0x0000)

lcd.draw(x1, y1, x2, y2,color)#

lcd颜色填充

参数

传入值类型

解释

int

左上边缘的X位置.

int

左上边缘的Y位置.

int

右下边缘的X位置.

int

右下边缘的Y位置.

string

字符串或zbuff对象

返回值

例子

-- lcd颜色填充
local buff = zbuff.create({201,1,16},0x001F)
lcd.draw(20,30,220,30,buff)

lcd.clear(color)#

lcd清屏

参数

传入值类型

解释

int

屏幕颜色 可选参数,默认背景色

返回值

例子

-- lcd清屏
lcd.clear()

lcd.fill(x1, y1, x2, y2,color)#

lcd颜色填充

参数

传入值类型

解释

int

左上边缘的X位置.

int

左上边缘的Y位置.

int

右下边缘的X位置,不含

int

右下边缘的Y位置,不含

int

绘画颜色 可选参数,默认背景色

返回值

例子

-- lcd颜色填充
lcd.fill(20,30,220,30,0x0000)

lcd.drawPoint(x0,y0,color)#

画一个点.

参数

传入值类型

解释

int

点的X位置.

int

点的Y位置.

int

绘画颜色 可选参数,默认前景色

返回值

例子

lcd.drawPoint(20,30,0x001F)

lcd.drawLine(x0,y0,x1,y1,color)#

在两点之间画一条线.

参数

传入值类型

解释

int

第一个点的X位置.

int

第一个点的Y位置.

int

第二个点的X位置.

int

第二个点的Y位置.

int

绘画颜色 可选参数,默认前景色

返回值

例子

lcd.drawLine(20,30,220,30,0x001F)

lcd.drawRectangle(x0,y0,x1,y1,color)#

从x / y位置(左上边缘)开始绘制一个框

参数

传入值类型

解释

int

左上边缘的X位置.

int

左上边缘的Y位置.

int

右下边缘的X位置.

int

右下边缘的Y位置.

int

绘画颜色 可选参数,默认前景色

返回值

例子

lcd.drawRectangle(20,40,220,80,0x001F)

lcd.drawCircle(x0,y0,r,color)#

从x / y位置(圆心)开始绘制一个圆

参数

传入值类型

解释

int

圆心的X位置.

int

圆心的Y位置.

int

半径.

int

绘画颜色 可选参数,默认前景色

返回值

例子

lcd.drawCircle(120,120,20,0x001F)

lcd.drawQrcode(x, y, str, size)#

缓冲区绘制QRCode

参数

传入值类型

解释

int

x坐标

int

y坐标

string

二维码的内容

int

显示大小 (注意:二维码生成大小与要显示内容和纠错等级有关,生成版本为1-40(对应 21x21 - 177x177)的不定大小,如果和设置大小不同会自动在指定的区域中间显示二维码,如二维码未显示请查看日志提示)

返回值

返回值类型

解释

nil

无返回值

例子


lcd.setFont(font, indentation)#

设置字体

参数

传入值类型

解释

int

font lcd.font_XXX 请查阅常量表

int

indentation, 等宽字体ascii右侧缩进0~127个pixel,等宽字体的ascii字符可能在右侧有大片空白,用户可以选择删除部分。留空或者超过127则直接删除右半边, 非等宽字体无效

返回值

例子

-- 设置为字体,对之后的drawStr有效,调用lcd.drawStr前一定要先设置

-- 若提示 "only font pointer is allow" , 则代表当前固件不含对应字体, 可使用云编译服务免费定制
-- 云编译文档: https://wiki.luatos.com/develop/compile/Cloud_compilation.html

-- lcd库的默认字体均以 lcd.font_ 开头
lcd.setFont(lcd.font_opposansm12)
lcd.drawStr(40,10,"drawStr")
sys.wait(2000)
lcd.setFont(lcd.font_opposansm12_chinese) -- 具体取值可参考api文档的常量表
lcd.drawStr(40,40,"drawStr测试")

lcd.drawStr(x,y,str,fg_color)#

显示字符串

参数

传入值类型

解释

int

x 横坐标

int

y 竖坐标 注意:此(x,y)为左下起始坐标

string

str 文件内容

int

fg_color str颜色 注意:此参数可选,如不填写则使用之前设置的颜色,绘制只会绘制字体部分,背景需要自己清除

返回值

例子

-- 显示之前先设置为中文字体,对之后的drawStr有效
lcd.setFont(lcd.font_opposansm12)
lcd.drawStr(40,10,"drawStr")
sys.wait(2000)
lcd.setFont(lcd.font_opposansm16_chinese)
lcd.drawStr(40,40,"drawStr测试")

lcd.drawGtfontGb2312(str,size,x,y)#

使用gtfont显示gb2312字符串

参数

传入值类型

解释

string

str 显示字符串

int

size 字体大小 (支持16-192号大小字体)

int

x 横坐标

int

y 竖坐标

返回值

例子

-- 注意, gtfont是额外的字体芯片硬件, 需要外挂在SPI总线才能调用本函数的
lcd.drawGtfontGb2312("啊啊啊",32,0,0)

lcd.drawGtfontGb2312Gray(str,size,gray,x,y)#

使用gtfont灰度显示gb2312字符串

参数

传入值类型

解释

string

str 显示字符串

int

size 字体大小 (支持16-192号大小字体)

int

gray 灰度[1阶/2阶/3阶/4阶]

int

x 横坐标

int

y 竖坐标

返回值

例子

-- 注意, gtfont是额外的字体芯片硬件, 需要外挂在SPI总线才能调用本函数的
lcd.drawGtfontGb2312Gray("啊啊啊",32,4,0,40)

lcd.drawGtfontUtf8(str,size,x,y)#

使用gtfont显示UTF8字符串

参数

传入值类型

解释

string

str 显示字符串

int

size 字体大小 (支持16-192号大小字体)

int

x 横坐标

int

y 竖坐标

返回值

例子

lcd.drawGtfontUtf8("啊啊啊",32,0,0)

lcd.drawGtfontUtf8Gray(str,size,gray,x,y)#

使用gtfont灰度显示UTF8字符串

参数

传入值类型

解释

string

str 显示字符串

int

size 字体大小 (支持16-192号大小字体)

int

gray 灰度[1阶/2阶/3阶/4阶]

int

x 横坐标

int

y 竖坐标

返回值

例子

lcd.drawGtfontUtf8Gray("啊啊啊",32,4,0,40)

lcd.getSize()#

获取屏幕尺寸

参数

返回值

返回值类型

解释

int

宽, 如果未初始化会返回0

int

高, 如果未初始化会返回0

例子

log.info("lcd", "size", lcd.getSize())

lcd.drawXbm(x, y, w, h, data)#

绘制位图

参数

传入值类型

解释

int

X坐标

int

y坐标

int

位图宽

int

位图高

int

位图数据,每一位代表一个像素

返回值

例子

-- 取模使用PCtoLCD2002软件即可 阴码 逐行 逆向
-- 在(0,0)为左上角,绘制 16x16 "今" 的位图
lcd.drawXbm(0, 0, 16,16, string.char(
    0x80,0x00,0x80,0x00,0x40,0x01,0x20,0x02,0x10,0x04,0x48,0x08,0x84,0x10,0x83,0x60,
    0x00,0x00,0xF8,0x0F,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x00
))

lcd.showImage(x, y, file)#

显示图片,当前只支持jpg,jpeg

参数

传入值类型

解释

int

X坐标

int

y坐标

string

文件路径

返回值

例子

lcd.showImage(0,0,"/luadb/logo.jpg")

lcd.flush()#

主动刷新数据到界面, 仅设置buff且禁用自动属性后使用

参数

返回值

返回值类型

解释

bool

成功返回true, 否则返回nil/false

例子


lcd.setupBuff(conf, onheap)#

设置显示缓冲区, 所需内存大小为 2×宽×高 字节. 请衡量内存需求与业务所需的刷新频次.

参数

传入值类型

解释

userdata

conf指针, 不需要传

bool

true使用heap内存, false使用vm内存, 默认使用vm内存, 不需要主动传

返回值

返回值类型

解释

bool

是否成功

例子

-- 初始化lcd的buff缓冲区, 可理解为FrameBuffer区域.
lcd.setupBuff()

lcd.autoFlush(enable)#

设置自动刷新, 需配合lcd.setupBuff使用

参数

传入值类型

解释

bool

是否自动刷新,默认为true

返回值

例子

-- 设置buff 并禁用自动更新
lcd.setupBuff()
lcd.autoFlush(false)
-- 禁止自动更新后, 需要使用 lcd.flush() 主动刷新数据到屏幕

lcd.rgb565(r, g, b, swap)#

RGB565颜色生成

参数

传入值类型

解释

int

红色, 0x00 ~ 0xFF

int

绿色, 0x00 ~ 0xFF

int

蓝色, 0x00 ~ 0xFF

bool

是否翻转, true 翻转, false 不翻转. 默认翻转

返回值

返回值类型

解释

int

颜色值

例子

-- 本API支持多种模式, 参数数量分别是 1, 2, 3, 4
-- 1. 单参数形式, 24bit RGB值, swap = true, 推荐
local red =   lcd.rgb565(0xFF0000)
local green = lcd.rgb565(0x00FF00)
local blue =  lcd.rgb565(0x0000FF)

-- 2. 两参数形式, 24bit RGB值, 增加swap的设置
local red =   lcd.rgb565(0xFF0000, true)
local green = lcd.rgb565(0x00FF00, true)
local blue =  lcd.rgb565(0x0000FF, true)

-- 3. 三参数形式, 红/绿/蓝, 各8bit
local red = lcd.rgb565(0xFF, 0x00, 0x00)
local green = lcd.rgb565(0x00, 0xFF, 0x00)
local blue = lcd.rgb565(0x00, 0x00, 0xFF)

-- 4. 四参数形式, 红/绿/蓝, 各8bit, 增加swap的设置
local red = lcd.rgb565(0xFF, 0x00, 0x00, true)
local green = lcd.rgb565(0x00, 0xFF, 0x00, true)
local blue = lcd.rgb565(0x00, 0x00, 0xFF, true)