disp接口
简介
LCD全称是Liquid Crystal Display,是指液晶显示屏,属于平面显示器的一种。
合宙Cat.1模块LCD接口主要用来UI设计,包括LCD初始化,图片显示操作,文字显示操作等。
LCD接口控制
LCD的库由底层core实现,相关API接口如下:
API接口 | 描述 |
---|---|
disp.init() | 初始化LCD驱动配置 |
disp.clear() | 清空显示 |
disp.update() | 刷新数据到LCD |
disp.puttext() | 显示文字 |
disp.putimage() | 显示文字 |
disp.drawrect() | 显示矩形框 |
disp.setcolor() | 设置前景色 |
disp.setbkcolor() | 设置背景色 |
disp.putqrcode() | 显示二维码 |
disp.loadfont() | 加载字体文件 |
disp.setfont() | 设置当前显示字体 |
disp.sleep() | 控制LCD是否进入休眠 |
disp.write() | 向LCD控制器写入命令 |
disp.getlcdinfo() | 获取屏幕分辨率和位深度 |
disp.close() | 关闭显示模块 |
详细的API介绍见luat core API
接口名称 | AIR724脚位 | 逻辑名 |
---|---|---|
LCD_CS | 对应管脚39 | LCD_CS/WAKEUP_OUT/GPIO_3 |
LCD_RS | 对应管脚58 | LCD_DC/NET_STATUS/GPIO_1 |
LCD_RST | 对应管脚56 | LCD_RST/W_DISABLE/GPIO_6 |
LCD_DIO | 对应管脚41 | LCD_DATA/GPIO_0 |
LCD_CLK | 对应管脚40 | LCD_CLK/AP_WAKEUP_MODULE/GPIO_2 |
V_LCD | 对应管脚81 | VCC_LCD |
disp初始化屏幕
local 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()
命令序列在手册中的位置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o6a4hn59-1624500220443)(http://openluat-luatcommunity.oss-cn-hangzhou.aliyuncs.com/images/20210430093151180_20200531002935157_QQ图片20200531002929.png “ST7735S 命令”)]
disp使用示例
--清空LCD显示缓冲区
disp.clear()
if lcd.WIDTH==128 and lcd.HEIGHT==128 then
--显示logo图片
disp.putimage("/lua/logo_"..(lcd.BPP==1 and "mono.bmp" or "color.png"),lcd.BPP==1 and 41 or 0,lcd.BPP==1 and 18 or 0)
elseif lcd.WIDTH==240 and lcd.HEIGHT==320 then
disp.puttext(common.utf8ToGb2312("欢迎使用Luat"),lcd.getxpos(common.utf8ToGb2312("欢迎使用Luat")),10)
--显示logo图片
disp.putimage("/lua/logo_color_240X320.png",0,80)
else
--从坐标16,0位置开始显示"欢迎使用Luat"
disp.puttext(common.utf8ToGb2312("欢迎使用Luat"),lcd.getxpos(common.utf8ToGb2312("欢迎使用Luat")),0)
--显示logo图片
disp.putimage("/lua/logo_"..(lcd.BPP==1 and "mono.bmp" or "color.png"),lcd.BPP==1 and 41 or 1,lcd.BPP==1 and 18 or 33)
end
--刷新LCD显示缓冲区到LCD屏幕上
disp.update()
常见问题
为什么屏幕点不亮
1. 检查SPI (四线制)
2. 检查V_LCD是否有电压输出,正常3.2V