跳转至

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 屏幕上绽放出耀眼的光芒!