LCD和TP驱动
一、演示功能概述
本章节用一个示例演示 Air8101 的 LCD 功能,配合 Air8101 开发板配套的四种 LCD 屏幕显示内容。
二、准备硬件环境
1. 参考:硬件环境清单 - luatos@air8101 - 合宙文档中心,准备以及组装好基本硬件环境。
2. 参考:Air8101 开发板使用教程 ,准备组装好所需的屏幕以及 LCD 扩展板
三、准备软件环境
1. 烧录工具 Luatools;
2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V1002_Air8101.soc;
3. LuatOS 需要的脚本和资源文件:https://gitee.com/openLuat/LuatOS-Air8101/tree/master/demo/lcd;
4. lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8101 开发板 - luatos@air8101 - 合宙文档中心,将本篇文章中演示使用的项目文件烧录到 Air8101 开发板中。
四、LCD 软硬件资料
4.1 API 接口介绍
https://docs.openluat.com/air8101/luatos/api/core/lcd/
五、代码示例介绍
5.1 代码介绍
PROJECT = "lcddemo"
VERSION = "1.0.0"
log.info("main", PROJECT, VERSION)
-- sys库是标配
_G.sys = require("sys")
-- 添加硬狗防止程序卡死
if wdt then
wdt.init(9000) -- 初始化watchdog设置为9s
sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
end
local lcd_use_buff = true -- 是否使用缓冲模式, 提升绘图效率,占用更大内存
local port, pin_reset, bl = lcd.RGB, 36, 25
-- Air8101开发板配套LCD屏幕 分辨率800*480
lcd.init("h050iwv", {
port = port,
pin_dc = 0xff,
pin_pwr = bl,
pin_rst = pin_reset,
direction = 0,
w = 800,
h = 480,
xoffset = 0,
yoffset = 0
})
-- Air8101开发板配套LCD屏幕 分辨率1024*600
-- lcd.init("hx8282",
-- {port = port,pin_pwr = bl, pin_rst = pin_reset,
-- direction = 0,w = 1024,h = 600,xoffset = 0,yoffset = 0})
-- Air8101开发板配套LCD屏幕 分辨率720*1280
-- lcd.init("nv3052c",
-- {port = port,pin_pwr = bl, pin_rst = pin_reset,
-- direction = 0,w = 720,h = 1280,xoffset = 0,yoffset = 0})
-- Air8101开发板配套LCD屏幕 分辨率480*854
-- lcd.init("st7701sn",
-- {port = port,pin_pwr = bl, pin_rst = pin_reset,
-- direction = 0,w = 480,h = 854,xoffset = 0,yoffset = 0})
-- 如果显示颜色相反,请解开下面一行的注释,关闭反色
-- lcd.invoff()
sys.taskInit(function()
-- 开启缓冲区, 刷屏速度会加快, 但也消耗2倍屏幕分辨率的内存
lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种
lcd.autoFlush(false)
while 1 do
lcd.clear()
log.info("合宙工业引擎 Air8101")
if lcd.showImage then
-- 注意, jpg需要是常规格式, 不能是渐进式JPG
-- 如果无法解码, 可以用画图工具另存为,新文件就能解码了
lcd.showImage(0, 0, "/luadb/picture1.jpg") --lcd屏幕分辨率800*480
-- lcd.showImage(0, 0, "/luadb/picture2.jpg") --lcd屏幕分辨率1024*600
-- lcd.showImage(0, 0, "/luadb/picture3.jpg") --lcd屏幕分辨率720*1280
-- lcd.showImage(0, 0, "/luadb/picture4.jpg") --lcd屏幕分辨率480*854
sys.wait(100)
end
-- log.info("lcd.drawLine", lcd.drawLine(20, 20, 150, 20, 0x001F)) --在屏幕两点之间画一条线
-- log.info("lcd.drawRectangle", lcd.drawRectangle(20, 40, 120, 70, 0xF800)) --从屏幕左上边缘开始绘制一个框
-- log.info("lcd.drawCircle", lcd.drawCircle(50, 50, 20, 0x0CE0)) --从圆心开始绘制一个圆
if lcd_use_buff then
lcd.flush()
end
sys.wait(1000)
end
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
5.2 结果演示
使用 Air8101 开发板 + 分辨率为 800*480 的 LCD 屏幕,效果如下图所示:
5.3 烧录代码注意事项
如果所用不是 800480 分辨率的横屏 5.1 寸 LCD 屏幕,需要在代码处将所对应分辨率的显示图片注释打开,并将 800480 屏幕分辨率的显示图片注释关闭,如下图所示:
并在烧录时,将所对应图片上传:
六、总结
通过本教程的深入学习,相信您已经全面掌握了 LCD 的使用方法。现在,就请您结合教程中的详细步骤,积极动手实践,去创造和开发属于自己的独特 LCD 内容吧!期待您的创意与灵感在 LCD 屏幕上绽放出耀眼的光芒!