فهرست منبع

add:新增AirLCD_1000 Air780EPM/EHM/EGH/EHV demo

江访 6 ماه پیش
والد
کامیت
849cb848b6

+ 230 - 0
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1000/AirLCD_1000.lua

@@ -0,0 +1,230 @@
+--[[
+@module  AirLCD_1000
+@summary AirLCD_1000显示驱动模块
+@version 1.0
+@date    2025.09.4
+@author  江访
+@usage
+
+核心业务逻辑为:
+1、初始化AirLCD_1000显示屏
+2、管理屏幕背光亮度及开关状态
+3、管理屏幕休眠和唤醒状态
+4、提供屏幕状态管理功能
+
+本文件的对外接口有5个:
+1、AirLCD_1000.lcd_init()           --LCD初始化函数,
+2、AirLCD_1000.set_backlight(level) -- 设置背光亮度接口,level 亮度级别(0-100)
+3、AirLCD_1000.lcd_on()             -- 开启LCD背光
+4、AirLCD_1000.lcd_off()            -- 关闭LCD背光
+5、AirLCD_1000.set_sleep(sleep)     -- 设置休眠状态接口,sleep:true进入休眠, false唤醒
+]]
+
+-- AirLCD_1000.lua - LCD显示驱动模块
+-- 此文件负责初始化LCD显示屏,管理背光及休眠状态
+local AirLCD_1000 = {}
+
+-- 屏幕状态管理表
+local screen_state = {
+    lcd_pin_pwr = 1,        -- 屏幕背光引脚GPIO号
+    lcd_pwm_id = 0,         -- 屏幕背光引脚PWM端口号
+    is_sleeping = false,    -- 是否休眠中标识
+    last_brightness = 50,   -- 默认亮度50%
+    backlight_on = true     -- 背光默认开启
+}
+
+-- LCD初始化函数
+-- @param LCD_MODEL   显示屏型号型号
+-- @param lcd_vcc     屏幕供电引脚GPIO号
+-- @param lcd_pin_rst 复位引脚GPIO号
+-- @param lcd_pin_pwr 背光引脚GPIO号
+-- @param lcd_pwm_id  背光引脚PWM端口号
+
+function AirLCD_1000.lcd_init(LCD_MODEL, lcd_vcc, lcd_pin_rst, lcd_pin_pwr,lcd_pwm_id)
+    -- 根据接线设置AirLCD_1000初始化参数
+    local LCD_MODEL, lcd_vcc, lcd_pin_rst, lcd_pin_pwr,lcd_pwm_id = "AirLCD_1000" or LCD_MODEL, lcd_vcc or 29, lcd_pin_rst or 36, lcd_pin_pwr or 1, lcd_pwm_id or 0
+
+    -- 设置屏幕尺寸
+    local width, height = 320, 480
+
+    -- LCD参数配置表
+    local lcd_param = {
+        port = lcd.HWID_0,       -- 使用SPI设备模式
+        pin_dc = 0xff,           -- DC引脚,无需设置
+        pin_rst = lcd_pin_rst,   -- 复位引脚,对应GPIO号
+        pin_pwr = lcd_pin_pwr,   -- 背光引脚(可选)
+        direction = 0,           -- 屏幕默认0°方向
+                                 -- 0:0°, 1:90°, 2:180°, 3:270°
+        w = width,               -- 屏幕宽度(像素)
+        h = height,              -- 屏幕高度(像素)
+        xoffset = 0,             -- X方向偏移量
+        yoffset = 0,             -- Y方向偏移量
+        sleepcmd = 0x10,         -- 睡眠命令
+        wakecmd = 0x11           -- 唤醒命令
+    }
+
+    -- 初始化SPI设备
+    spi.deviceSetup(
+        lcd.HWID_0,  -- LCD端口号
+        nil,         -- CS片选脚,可选
+        0,           -- CPHA=0
+        0,           -- CPOL=0
+        8,           -- 8位数据宽度
+        20000000,    -- 20MHz波特率
+        spi.MSB,     -- 高位先传
+        1,           -- 主机模式
+        1            -- 全双工模式
+    )
+
+    -- 设置VCC/RST/背光引脚为输出模式,并启用上拉电阻
+    gpio.setup(lcd_vcc, 1, gpio.PULLUP)
+    gpio.setup(lcd_pin_rst, 0, gpio.PULLUP)
+    gpio.setup(lcd_pin_pwr, 1, gpio.PULLUP)
+    
+    -- 开启屏幕VCC供电
+    gpio.set(lcd_vcc, 1)
+
+    -- 拉低屏幕复位引脚
+    gpio.set(lcd_pin_rst, 0)  -- 拉低复位引脚
+    sys.wait(20)                    -- 等待20ms(ST7796复位拉低大于10ms生效)
+    gpio.set(lcd_pin_rst, 1)  -- 拉高复位引脚
+    sys.wait(150)                   -- 等待150ms(ST7796复位拉高大于120ms重置)
+    gpio.set(lcd_pin_pwr, 1)
+
+    -- 初始化ST7796显示芯片
+    lcd.init("st7796", lcd_param)
+
+    -- 通用显示设置
+    lcd.setupBuff(nil,false)     -- 设置帧缓冲区
+    lcd.autoFlush(false)         -- 禁止自动刷新
+
+    screen_state.lcd_pin_pwr = lcd_pin_pwr
+    screen_state.lcd_pwm_id = lcd_pwm_id
+
+    log.info("AirLCD_1000", "LCD初始化成功,尺寸:", width, "x", height)
+    -- return true
+end
+
+-- 设置背光亮度接口
+-- 使用背光PWM模式控制亮度,休眠和关闭背光使用背光引脚GPIO模式
+-- @param level 亮度级别(0-100)
+-- @return 设置成功状态
+function AirLCD_1000.set_backlight(level)
+
+    -- 检查屏幕状态和PWM配置
+    if screen_state.is_sleeping then
+        log.warn("AirLCD_1000", "屏幕处于休眠状态,无法调节背光")
+        return false
+    end
+    if not screen_state.lcd_pin_pwr then
+        log.error("AirLCD_1000", "PWM配置不存在,无法调节背光")
+        return false
+    end
+
+    -- 确保GPIO已关闭 
+    gpio.close(screen_state.lcd_pin_pwr)
+
+    -- 设置并开启PWM
+    pwm.stop(screen_state.lcd_pwm_id)
+    pwm.close(screen_state.lcd_pwm_id)
+    pwm.setup(screen_state.lcd_pwm_id, 1000, 100)
+    pwm.open(screen_state.lcd_pwm_id, 1000, level)
+
+    -- 修改默认背光亮度为当前设置
+    screen_state.last_brightness = level
+    screen_state.backlight_on = (level > 0)
+    log.info("AirLCD_1000", "背光设置为", level, "%")
+    return true
+end
+
+-- 开启LCD显示屏背光
+-- @return 操作成功状态
+function AirLCD_1000.lcd_on()
+    if screen_state.is_sleeping then
+        log.warn("AirLCD_1000", "屏幕处于休眠状态,无法开启背光")
+        return false
+    end
+
+    pwm.stop(screen_state.lcd_pwm_id)
+    pwm.close(screen_state.lcd_pwm_id)
+
+    -- 设置GPIO控制电源(如果存在)
+    if screen_state.lcd_pin_pwr then
+        gpio.setup(screen_state.lcd_pin_pwr, 1, gpio.PULLUP)
+    end
+
+    lcd.on()
+    log.info("AirLCD_1000", "LCD背光已开启")
+end
+
+-- 关闭LCD显示屏背光
+-- @return 操作成功状态
+function AirLCD_1000.lcd_off()
+    if screen_state.is_sleeping then
+        log.warn("AirLCD_1000", "屏幕处于休眠状态,无法关闭背光")
+        return false
+    end
+    pwm.stop(screen_state.lcd_pwm_id)
+    pwm.close(screen_state.lcd_pwm_id)
+        -- 设置GPIO控制电源(如果存在)
+    if screen_state.lcd_pin_pwr then
+        gpio.setup(screen_state.lcd_pin_pwr, 1, gpio.PULLUP)
+    end
+    lcd.off()
+    log.info("AirLCD_1000", "LCD背光已关闭")
+end
+
+-- 设置休眠状态接口
+-- @param sleep true进入休眠, false唤醒
+-- @return 操作成功状态
+function AirLCD_1000.set_sleep(sleep)
+    if sleep then
+        -- 进入休眠模式
+        if not screen_state.is_sleeping then
+            -- 关闭PWM(如果存在)
+            if screen_state.lcd_pwm_id then
+                pwm.stop(screen_state.lcd_pwm_id)
+                pwm.close(screen_state.lcd_pwm_id)
+            end
+
+            -- 设置GPIO控制电源(如果存在)
+            if screen_state.lcd_pin_pwr then
+                gpio.setup(screen_state.lcd_pin_pwr, 1, gpio.PULLUP)
+                gpio.set(screen_state.lcd_pin_pwr, 0)
+            end
+
+            -- 执行LCD睡眠
+            lcd.sleep()
+            screen_state.is_sleeping = true
+            log.info("AirLCD_1000", "LCD进入休眠状态")
+        end
+    else
+        -- 退出休眠模式
+        if screen_state.is_sleeping then
+            -- 唤醒LCD
+            lcd.wakeup()
+
+            -- 关闭GPIO控制(如果存在)
+            if screen_state.lcd_pin_pwr then
+                gpio.close(screen_state.lcd_pin_pwr)
+            end
+
+            -- 恢复之前的背光设置(如果PWM存在)
+            if screen_state.lcd_pin_pwr then
+                if screen_state.backlight_on then
+                    AirLCD_1000.set_backlight(screen_state.last_brightness)
+                else
+                    -- 如果背光原本是关闭状态,保持关闭
+                    pwm.stop(screen_state.lcd_pwm_id)
+                    pwm.close(screen_state.lcd_pwm_id)
+                end
+            end
+
+            screen_state.is_sleeping = false
+            log.info("AirLCD_1000", "LCD唤醒")
+        end
+    end
+    return true
+end
+
+return AirLCD_1000

BIN
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1000/logo.jpg


+ 82 - 0
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1000/main.lua

@@ -0,0 +1,82 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.09.04
+@author  江访
+@usage
+
+本demo演示的核心功能为:
+1、点亮AirLCD_1000屏幕
+2、通过屏幕显示图片、字符、色块等内容
+3、演示背光亮度5%-100%变化
+4、演示使屏幕进入休眠和唤醒屏幕
+
+更多说明参考本目录下的readme.md文件
+]]
+
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+
+
+
+-- 定义项目名称和版本号
+PROJECT = "AirLCD_1000_demo"     -- 项目名称
+VERSION = "1.0.0"                -- 版本号
+
+-- 打印项目名称和版本号咋看    
+log.info("AirLCD_demo", PROJECT, VERSION)
+
+-- 设置日志输出风格为样式2(建议调试时开启)
+-- log.style(2)
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+
+-- 加载用户界面系统主模块
+require "ui_main"
+
+------------------------------------------用户代码已结束------------------------------------------
+-- 启动系统事件循环,这是程序的最终执行点,确保系统持续运行
+sys.run()
+-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行

+ 207 - 0
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1000/readme.md

@@ -0,0 +1,207 @@
+# AirLCD_1000_Air780EHM 演示 demo
+
+
+## 一、功能模块介绍
+
+1. main.lua:主程序入口;
+
+2. ui_main.lua:UI应用模块,负责UI启动初始和UI主循环
+
+3. AirLCD_1000.lua:显示驱动模块,负责执行AirLCD_1000初始化,背光亮度调节和屏幕休眠和唤醒
+
+## 二、演示功能概述
+
+1. 屏幕接线引脚配置在AirLCD_1000.lua内进行设置
+
+2. 设置好后,启动主循环屏幕初始化程序,点亮屏幕
+
+3. 进入UI主task,循环显示显示图片、字符、色块等内容,并通过接口设置背光亮度和对屏幕进行休眠和唤醒。
+
+## 三、演示硬件环境
+
+### 3.1 硬件准备
+
+1. AirLCD_1000 显示屏*1
+
+2. Air780EHM或EGH或EHV 核心板*1
+
+3. 母对母杜邦线*8
+
+4. TYPE-C 数据线*1
+
+5. 按照硬件接线图正确连接 LCD 显示屏
+
+6. 将核心板正面开关打到 ON 位置
+
+7. 本demo使用的背光引脚,既是GPIO_1也是PWM_0引脚
+
+8. 调节屏幕亮度需要确保背光控制引脚(如 demo 中 GPIO1)支持 PWM 功能
+
+9. 背光引脚通过切换到PWM模式,通过调节占空比实现背光亮度调节
+
+10. 背光引脚通过切换到GPIO模式,再调用休眠/唤醒接口使屏幕进入休眠/唤醒
+
+### 3.2接线说明
+
+<table>
+<tr>
+<td>引脚说明<br/></td><td>核心开发板<br/></td><td>屏幕<br/></td><td>引脚说明<br/></td></tr>
+<tr>
+<td>屏幕供电<br/></td><td>VDD-EXT<br/><br/></td><td>VCC<br/><br/></td><td>显示屏电源供电脚<br/><br/></td></tr>
+<tr>
+<td>电源地<br/></td><td>GND<br/></td><td>GND<br/></td><td>电源地<br/></td></tr>
+<tr>
+<td>LCD SPI 串口的时钟信号<br/></td><td>LCD_CLK<br/></td><td>CLK<br/></td><td>SPI 串口的时钟信号<br/></td></tr>
+<tr>
+<td>LCD SPI 串口的数据脚<br/></td><td>LCD_SDA<br/></td><td>MOS<br/></td><td>SPI 串口的数据输入脚<br/></td></tr>
+<tr>
+<td>LCD 复位脚<br/></td><td>LCD_RST<br/></td><td>RES<br/></td><td>显示屏复位脚<br/></td></tr>
+<tr>
+<td>LCD 数据/寄存器控制脚<br/></td><td>LCD_RS<br/><br/></td><td>DC<br/></td><td>4 线 SPI 串口的显示数据/寄存器指令<br/></td></tr>
+<tr>
+<td>LCD SPI片选,同一个SPI接口上有多个设备才使用<br/></td><td>LCD_CS<br/></td><td>CS<br/></td><td>LCD驱动芯片片选脚<br/></td></tr>
+<tr>
+<td>LCD 背光控制引脚<br/></td><td>GPIO_1/PWM0<br/></td><td>BKL<br/></td><td>背光使能引脚<br/></td></tr>
+</table>
+
+![](https://docs.openLuat.com/cdn/image/Air780EHM_AirLCD_1000.jpg)
+
+注意:模组GPIO供电能力弱,所以使用VDD-EXT供电。
+
+
+## 四、演示软件环境
+
+### 4.1 底层固件准备
+
+固件版本,推荐使用 V2015 及以后最新固件版本:
+
+  [Air780EHM固件下载链接](https://docs.openluat.com/air780epm/luatos/firmware/version/)
+
+  [Air780EHV固件下载链接](https://docs.openluat.com/air780ehv/luatos/firmware/version/)
+
+  [Air780EGH固件下载链接](https://docs.openluat.com/air780egh/luatos/firmware/version/)
+
+
+
+### 4.2Luatools下载调试工具
+[demo下载调试工具:Luatools](https://docs.openluat.com/air780egh/luatos/common/download/?h=luatools#33-luatools)
+
+### 4.2演示emo下载
+下载本 demo中除readme外的所有的代码文件以及图片文件
+
+## 五、演示核心步骤
+
+### 5.1 烧录程序
+
+1. 下载 luatools 烧录工具:[luatools下载链接及使用说明](https://docs.openluat.com/air780epm/common/Luatools/)
+
+2. 按照操作说明,将本 demo 内除 readme.md 外的全部文件通过 luatools 下载到模块内**(按住 BOOT 键开机,选择下载底层和脚本)**
+
+3. 如需显示图片,如 demo 中显示的 logo,确保 `logo.jpg` 图片文件存在,下载时会放在模组 `/luadb/` 目录下
+   ![](https://docs.openluat.com/air8000/luatos/app/AirLCD_1000%E6%BC%94%E7%A4%BAdemo/imges/UdWZbZ0tXoYPK5xG2Kbcx2y7nSc.png)
+
+
+### 5.2、演示 demo 效果
+
+1. 通过 demo 了解屏幕连接、配置、初始化过程,为显示做好准备
+
+2. 通过 demo 将图片、12 号中文、英文、点、线、圆形、矩形、颜色填充、二维码显示在屏幕上
+
+3. 通过 demo 了解如何使用接口对屏幕进行背光亮度调节、屏幕休眠、屏幕唤醒
+
+4. 实现效果图
+
+![](https://docs.openLuat.com/cdn/image/AirLCD_1000.jpg)
+
+![](https://docs.openluat.com/air8000/luatos/app/AirLCD_1000%E6%BC%94%E7%A4%BAdemo/imges/BaH5b9WnKomL4SxNJxvc5rZKnIg.png)
+
+
+
+
+## 六、程序对外接口
+
+### 6.1 AirLCD_1000 模块接口
+
+#### `AirLCD_1000.lcd_init()`
+
+- 功能:初始化 AirLCD_1000LCD 显示屏
+- 参数:
+
+  - LCD_MODEL: LCD 型号字符串(如"AirLCD_1000")
+  - lcd_pin_dc: 数据/命令引脚号
+  - lcd_pin_rst: 复位引脚号
+  - lcd_pin_pwr: 背光控制引脚号
+- 返回值:初始化成功状态(true/false), 屏幕宽度, 屏幕高度
+
+#### `AirLCD_1000.set_backlight(level)`
+
+- 功能:设置背光亮度
+- 参数:level - 亮度级别(0-100)
+- 返回值:设置成功状态(true/false)
+
+#### `AirLCD_1000.set_sleep(sleep)`
+
+- 功能:设置屏幕休眠或唤醒
+- 参数:sleep - true 进入休眠, false 唤醒
+- 返回值:设置成功状态(true/false)
+- **注意事项:目前在屏幕休眠模式下,仅 AIR780EPM 支持模组设置 pm.power(pm.WORK_MODE, 1),其他型号暂时不支持,唤醒模组会导致模组死机**
+
+### 6.2 screen_data_table 配置参数
+
+- `lcd_models`: 支持的 LCD 型号及其参数
+- `default`: 默认配置(滑动阈值、点击时间阈值等)预留后续扩展功能使用
+
+### 6.3 更多显示接口
+
+- 可以参考合宙 docs 上 LCD 库进行扩展使用:[https://docs.openluat.com/osapi/core/lcd/](https://docs.openluat.com/osapi/core/lcd/)
+
+## 七、扩展说明
+
+1. 目前支持 ST7796、ST7789、CO5300 显示芯片,其他 st7735 、st7735v、st7735s、gc9a01、gc9106l、gc9306x、ili9486 也同样支持,
+
+2. 模组字体支持有限,需要使用其他字体可以搭配合宙 AirFONTS_1000 矢量字库使用
+
+3. Air780EPM/EHM/EGH/EHV、Air8000 系列、Air8101,按正确的接口接线并修改 screen_data_table.lua 都可以使用此 demo
+
+4. 其他屏幕可以参考 custom 的方式自定义屏幕初始化配置
+
+```lua
+-- 配置接口参数
+local lcd_param = {
+        port = lcd.HWID_0,        -- 使用的spi id 号
+        pin_dc = 0xff,            -- 命令选择硬件,不设置
+        pin_rst = 2,              -- 屏幕reset 管脚  
+        direction = 0,            -- 屏幕方向
+        w = width,                -- 屏幕宽度
+        h = height,               -- 屏幕高度
+        xoffset = 0,              -- X轴偏移像素
+        yoffset = 0,              -- Y轴偏移像素
+        sleepcmd = 0x10,          -- LCD睡眠命令
+        wakecmd = 0x11,           -- LCD唤醒命令
+    }
+    
+  -- 初始化SPI设备
+        spi.deviceSetup(
+            lcd.HWID_0,  -- LCD端口号
+            nil,         -- CS片选脚,可选
+            0,           -- CPHA=0
+            0,           -- CPOL=0
+            8,           -- 8位数据宽度
+            20000000,    -- 20MHz波特率
+            spi.MSB,     -- 高位先传
+            1,           -- 主机模式
+            1            -- 全双工模式
+        )
+        
+    -- QSPI如有特殊配置,需要在lcd.init前配置好
+    --lcd.qspi(0x02, 0x32, 0x12)
+        
+    -- 初始化屏幕 
+    lcd.init("custom", lcd_param)
+    
+    -- 如有其他参数需要配置,可使用lcd.cmd命令
+    --lcd.cmd(0x53, 0x20)
+        
+    -- 自定义初始化后必须运行该程序
+    lcd.user_done()
+```

+ 187 - 0
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1000/ui_main.lua

@@ -0,0 +1,187 @@
+--[[
+@module  ui_main
+@summary UI子模块的主程序
+@version 1.0
+@date    2025.09.04
+@author  江访
+@usage
+
+本demo演示的核心功能为:
+1、依据显示屏配置参数初始化显示屏,点亮AirLCD_1000屏幕
+2、循环显示显示图片、字符、色块等内容
+3、通过接口设置背光亮度和对屏幕进行休眠和唤醒。
+4、本demo使用的背光引脚,既是GPIO_1也是PWM_0引脚
+5、背光引脚通过切换到PWM模式,通过调节占空比实现背光亮度调节
+6、背光引脚通过切换到GPIO模式,再调用休眠/唤醒接口使屏幕进入休眠/唤醒
+]]
+
+
+-- 加载AirLCD_1000驱动模块
+local AirLCD_1000 = require "AirLCD_1000"           -- 显示初始化执行程序
+
+-- 配置AirLCD_1000接线引脚
+local LCD_MODEL = "AirLCD_1000" -- 显示屏型号
+local lcd_vcc = 29              -- 屏幕供电引脚GPIO号,VDD-EXT供电可填255
+local lcd_pin_rst = 36          -- 复位引脚GPIO号
+local lcd_pin_pwr = 1           -- 背光引脚GPIO号
+local lcd_pwm_id = 0            -- 背光引脚PWM端口号
+
+-- UI主task,所有UI相关的代码都会通过该task进行调度
+local function ui_main()
+
+    AirLCD_1000.lcd_init(LCD_MODEL, lcd_vcc, lcd_pin_rst, lcd_pin_pwr,lcd_pwm_id)
+
+    -- 设置字体为模组自带的opposansm12中文字体
+    lcd.setFont(lcd.font_opposansm12_chinese)
+
+    -- 清除屏幕显示
+    -- lcd.clear()
+
+    -- 主循环
+    while true do
+        -- 获取并打印屏幕尺寸信息,实际是初始化传入的信息
+        -- log.info("屏幕尺寸", lcd.getSize())
+        
+        ------------------------------------------以下为图片/位图/英文显示设置------------------------------------------
+        --设置前景色和背景色(RGB565格式)
+        --需要放在循环内部,因为是一次性设置
+        lcd.setColor(0xFFFF, 0x0000)  -- 白底黑字,背景色:白色(0xFFFF), 前景色:黑色(0x0000),
+
+        -- 在屏幕左上角(0,0)显示一张图片
+        -- 图片路径为/luadb/logo.jpg
+        lcd.showImage(0, 0, "/luadb/logo.jpg")
+
+        -- 在位置(0,82)绘制一个16x16的位图,内容依次为“上”,“海”,“合”,“宙”
+        -- 位图数据使用字符串格式表示
+        lcd.drawXbm(0, 82, 16, 16, string.char(
+        0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x3F,0x80,0x00,
+        0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x7F,0x00,0x00))
+
+        lcd.drawXbm(18, 82, 16, 16, string.char(
+        0x00,0x00,0x80,0x00,0xC4,0x7F,0x28,0x00,0x10,0x00,0xD0,0x3F,0x42,0x20,0x44,0x22,
+        0x40,0x24,0xF0,0xFF,0x24,0x20,0x24,0x22,0x24,0x20,0xE2,0x7F,0x02,0x20,0x02,0x1E))
+
+        lcd.drawXbm(36, 82, 16, 16, string.char(
+        0x00,0x00,0x00,0x01,0x80,0x01,0x40,0x02,0x20,0x04,0x18,0x18,0xF4,0x6F,0x02,0x00,
+        0x00,0x00,0xF8,0x1F,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0xF8,0x1F,0x08,0x10))
+
+        lcd.drawXbm(54, 82, 16, 16, string.char(
+        0x00,0x00,0x80,0x00,0x00,0x01,0xFE,0x7F,0x02,0x40,0x02,0x40,0x00,0x01,0xFC,0x3F,
+        0x04,0x21,0x04,0x21,0xFC,0x3F,0x04,0x21,0x04,0x21,0x04,0x21,0xFC,0x3F,0x04,0x20))
+
+        -- 在位置(120,40)绘制一个蓝色点
+        lcd.drawPoint(120, 40, 0x001F)
+
+        -- 以(120,40)为圆心,40为半径绘制一个蓝色圆
+        lcd.drawCircle(120, 40, 40, 0x001F)
+
+        -- 从(170,40)到(280,40)绘制一条蓝色水平线
+        lcd.drawLine(170, 40, 280, 40, 0x001F)
+
+        -- 从(170,50)到(280,80)绘制一个蓝色矩形框
+        lcd.drawRectangle(170, 50, 280, 80, 0x001F)
+
+
+        -- 在位置(200,170)绘制一个100x100的二维码,内容为指定URL
+        lcd.drawQrcode(200, 170, "https://docs.openluat.com/air8000/", 100)
+
+        lcd.setFont(lcd.font_opposansm12)
+        lcd.drawStr(20,172,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm16)
+        lcd.drawStr(20,189,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm18)
+        lcd.drawStr(20,210,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm20)
+        lcd.drawStr(20,233,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm22)
+        lcd.drawStr(20,258,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm24)
+        lcd.drawStr(20,285,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm32)
+        lcd.drawStr(20,316,"hello hezhou") --显示字符
+
+        lcd.fill(10, 380, 150, 460, 0xF800)  -- 绘制红色矩形区域(0xF800是红色)
+        lcd.fill(170, 380, 310, 460, 0x07E0)  -- 绘制绿色矩形区域(0x07E0是绿色)
+
+        -- 主动刷新数据到屏幕
+        lcd.flush()
+        sys.wait(5000)
+
+        --------------------------------------------以下为显示中文设置--------------------------------------------
+        -- Air780EPM不支持中文显示
+        -- Air780EHM/EGH/EHV/Air8000支持12号中文字体
+        -- 中文以左下角为坐标显示与位图左上角方式不同
+
+        -- 设置字体为opposansm12中文字体,从英文显示切换到中文前一定要设置
+        lcd.setFont(lcd.font_opposansm12_chinese)
+        lcd.setColor(0xFFFF, 0x0000)  -- 白底黑字,背景色:白色(0xFFFF), 前景色:黑色(0x0000),
+
+        -- 显示重拍按钮(左侧)
+        lcd.drawStr(70, 420, "重拍", 0xFFFF)  -- 在按钮上绘制白色文字"重拍"
+
+        -- 显示返回按钮(右侧)
+        lcd.drawStr(230, 420, "返回", 0xFFFF)  -- 在按钮上绘制白色文字"返回"
+
+        -- 在位置(160,155)绘制文本
+        -- 不设置字体颜色,默认会使用lcd.setColor所设置的字体颜色
+        lcd.drawStr(160, 155, "扫码进入Air8000资料站",0x0000)
+
+        -- 主动刷新数据到屏幕
+        lcd.flush()
+        sys.wait(5000)
+        --------------------------------------------以下为背光亮度设置--------------------------------------------
+        -- 背光引脚使用PWM模式控制,pwm_id正确配置后可以实现背光控制
+        -- 参数 level: 亮度级别(0-100)
+        AirLCD_1000.set_backlight(5)  -- 设置背光为5%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(10)  -- 设置背光为10%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(20)  -- 设置背光为20%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(30)  -- 设置背光为30%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(40)  -- 设置背光为40%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(50)  -- 设置背光为50%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(60)  -- 设置背光为60%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(70)  -- 设置背光为70%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(80)  -- 设置背光为80%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(90)  -- 设置背光为90%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(100)  -- 设置背光为100%
+
+        --------------------------------------------以下为屏幕休眠设置--------------------------------------------
+        -- 背光引脚使用GPIO模式控制,pin_pwr正确配置可以实现背光控制
+
+        -- 进入休眠,功耗13ma
+        AirLCD_1000.set_sleep(true)    -- 进入休眠状态,此时屏幕供电需要稳定,若不稳定,唤醒后需要重新初始化屏幕
+        pm.power(pm.WORK_MODE, 1)
+        sys.wait(10000)
+        pm.power(pm.WORK_MODE, 0)
+        AirLCD_1000.set_sleep(false)   -- 唤醒屏幕,自动恢复之前的背光设置
+
+        -- 主动刷新数据到屏幕
+        lcd.flush()
+        sys.wait(5000)
+        ----------------------------------------以下为屏幕关闭/打开背光设置----------------------------------------
+        -- --关闭LCD背光,功耗20ma
+        -- AirLCD_1000.lcd_off()
+        -- pm.power(pm.WORK_MODE, 1)
+        -- sys.wait(15000)
+        -- -- 唤醒
+        -- pm.power(pm.WORK_MODE, 0)
+        -- sys.wait(5000)
+        -- AirLCD_1000.lcd_on()
+
+        -- 主动刷新数据到屏幕
+        -- lcd.flush()
+        -- sys.wait(50)
+    end
+end
+
+-- 创建UI主循环ui_main的task
+sys.taskInit(ui_main)

+ 230 - 0
module/Air780EPM/demo/accessory_board/AirLCD_1000/AirLCD_1000.lua

@@ -0,0 +1,230 @@
+--[[
+@module  AirLCD_1000
+@summary AirLCD_1000显示驱动模块
+@version 1.0
+@date    2025.09.4
+@author  江访
+@usage
+
+核心业务逻辑为:
+1、初始化AirLCD_1000显示屏
+2、管理屏幕背光亮度及开关状态
+3、管理屏幕休眠和唤醒状态
+4、提供屏幕状态管理功能
+
+本文件的对外接口有5个:
+1、AirLCD_1000.lcd_init()           --LCD初始化函数,
+2、AirLCD_1000.set_backlight(level) -- 设置背光亮度接口,level 亮度级别(0-100)
+3、AirLCD_1000.lcd_on()             -- 开启LCD背光
+4、AirLCD_1000.lcd_off()            -- 关闭LCD背光
+5、AirLCD_1000.set_sleep(sleep)     -- 设置休眠状态接口,sleep:true进入休眠, false唤醒
+]]
+
+-- AirLCD_1000.lua - LCD显示驱动模块
+-- 此文件负责初始化LCD显示屏,管理背光及休眠状态
+local AirLCD_1000 = {}
+
+-- 屏幕状态管理表
+local screen_state = {
+    lcd_pin_pwr = 1,        -- 屏幕背光引脚GPIO号
+    lcd_pwm_id = 0,         -- 屏幕背光引脚PWM端口号
+    is_sleeping = false,    -- 是否休眠中标识
+    last_brightness = 50,   -- 默认亮度50%
+    backlight_on = true     -- 背光默认开启
+}
+
+-- LCD初始化函数
+-- @param LCD_MODEL   显示屏型号型号
+-- @param lcd_vcc     屏幕供电引脚GPIO号
+-- @param lcd_pin_rst 复位引脚GPIO号
+-- @param lcd_pin_pwr 背光引脚GPIO号
+-- @param lcd_pwm_id  背光引脚PWM端口号
+
+function AirLCD_1000.lcd_init(LCD_MODEL, lcd_vcc, lcd_pin_rst, lcd_pin_pwr,lcd_pwm_id)
+    -- 根据接线设置AirLCD_1000初始化参数
+    local LCD_MODEL, lcd_vcc, lcd_pin_rst, lcd_pin_pwr,lcd_pwm_id = "AirLCD_1000" or LCD_MODEL, lcd_vcc or 29, lcd_pin_rst or 36, lcd_pin_pwr or 1, lcd_pwm_id or 0
+
+    -- 设置屏幕尺寸
+    local width, height = 320, 480
+
+    -- LCD参数配置表
+    local lcd_param = {
+        port = lcd.HWID_0,       -- 使用SPI设备模式
+        pin_dc = 0xff,           -- DC引脚,无需设置
+        pin_rst = lcd_pin_rst,   -- 复位引脚,对应GPIO号
+        pin_pwr = lcd_pin_pwr,   -- 背光引脚(可选)
+        direction = 0,           -- 屏幕默认0°方向
+                                 -- 0:0°, 1:90°, 2:180°, 3:270°
+        w = width,               -- 屏幕宽度(像素)
+        h = height,              -- 屏幕高度(像素)
+        xoffset = 0,             -- X方向偏移量
+        yoffset = 0,             -- Y方向偏移量
+        sleepcmd = 0x10,         -- 睡眠命令
+        wakecmd = 0x11           -- 唤醒命令
+    }
+
+    -- 初始化SPI设备
+    spi.deviceSetup(
+        lcd.HWID_0,  -- LCD端口号
+        nil,         -- CS片选脚,可选
+        0,           -- CPHA=0
+        0,           -- CPOL=0
+        8,           -- 8位数据宽度
+        20000000,    -- 20MHz波特率
+        spi.MSB,     -- 高位先传
+        1,           -- 主机模式
+        1            -- 全双工模式
+    )
+
+    -- 设置VCC/RST/背光引脚为输出模式,并启用上拉电阻
+    gpio.setup(lcd_vcc, 1, gpio.PULLUP)
+    gpio.setup(lcd_pin_rst, 0, gpio.PULLUP)
+    gpio.setup(lcd_pin_pwr, 1, gpio.PULLUP)
+    
+    -- 开启屏幕VCC供电
+    gpio.set(lcd_vcc, 1)
+
+    -- 拉低屏幕复位引脚
+    gpio.set(lcd_pin_rst, 0)  -- 拉低复位引脚
+    sys.wait(20)                    -- 等待20ms(ST7796复位拉低大于10ms生效)
+    gpio.set(lcd_pin_rst, 1)  -- 拉高复位引脚
+    sys.wait(150)                   -- 等待150ms(ST7796复位拉高大于120ms重置)
+    gpio.set(lcd_pin_pwr, 1)
+
+    -- 初始化ST7796显示芯片
+    lcd.init("st7796", lcd_param)
+
+    -- 通用显示设置
+    lcd.setupBuff(nil,false)     -- 设置帧缓冲区
+    lcd.autoFlush(false)         -- 禁止自动刷新
+
+    screen_state.lcd_pin_pwr = lcd_pin_pwr
+    screen_state.lcd_pwm_id = lcd_pwm_id
+
+    log.info("AirLCD_1000", "LCD初始化成功,尺寸:", width, "x", height)
+    -- return true
+end
+
+-- 设置背光亮度接口
+-- 使用背光PWM模式控制亮度,休眠和关闭背光使用背光引脚GPIO模式
+-- @param level 亮度级别(0-100)
+-- @return 设置成功状态
+function AirLCD_1000.set_backlight(level)
+
+    -- 检查屏幕状态和PWM配置
+    if screen_state.is_sleeping then
+        log.warn("AirLCD_1000", "屏幕处于休眠状态,无法调节背光")
+        return false
+    end
+    if not screen_state.lcd_pin_pwr then
+        log.error("AirLCD_1000", "PWM配置不存在,无法调节背光")
+        return false
+    end
+
+    -- 确保GPIO已关闭 
+    gpio.close(screen_state.lcd_pin_pwr)
+
+    -- 设置并开启PWM
+    pwm.stop(screen_state.lcd_pwm_id)
+    pwm.close(screen_state.lcd_pwm_id)
+    pwm.setup(screen_state.lcd_pwm_id, 1000, 100)
+    pwm.open(screen_state.lcd_pwm_id, 1000, level)
+
+    -- 修改默认背光亮度为当前设置
+    screen_state.last_brightness = level
+    screen_state.backlight_on = (level > 0)
+    log.info("AirLCD_1000", "背光设置为", level, "%")
+    return true
+end
+
+-- 开启LCD显示屏背光
+-- @return 操作成功状态
+function AirLCD_1000.lcd_on()
+    if screen_state.is_sleeping then
+        log.warn("AirLCD_1000", "屏幕处于休眠状态,无法开启背光")
+        return false
+    end
+
+    pwm.stop(screen_state.lcd_pwm_id)
+    pwm.close(screen_state.lcd_pwm_id)
+
+    -- 设置GPIO控制电源(如果存在)
+    if screen_state.lcd_pin_pwr then
+        gpio.setup(screen_state.lcd_pin_pwr, 1, gpio.PULLUP)
+    end
+
+    lcd.on()
+    log.info("AirLCD_1000", "LCD背光已开启")
+end
+
+-- 关闭LCD显示屏背光
+-- @return 操作成功状态
+function AirLCD_1000.lcd_off()
+    if screen_state.is_sleeping then
+        log.warn("AirLCD_1000", "屏幕处于休眠状态,无法关闭背光")
+        return false
+    end
+    pwm.stop(screen_state.lcd_pwm_id)
+    pwm.close(screen_state.lcd_pwm_id)
+        -- 设置GPIO控制电源(如果存在)
+    if screen_state.lcd_pin_pwr then
+        gpio.setup(screen_state.lcd_pin_pwr, 1, gpio.PULLUP)
+    end
+    lcd.off()
+    log.info("AirLCD_1000", "LCD背光已关闭")
+end
+
+-- 设置休眠状态接口
+-- @param sleep true进入休眠, false唤醒
+-- @return 操作成功状态
+function AirLCD_1000.set_sleep(sleep)
+    if sleep then
+        -- 进入休眠模式
+        if not screen_state.is_sleeping then
+            -- 关闭PWM(如果存在)
+            if screen_state.lcd_pwm_id then
+                pwm.stop(screen_state.lcd_pwm_id)
+                pwm.close(screen_state.lcd_pwm_id)
+            end
+
+            -- 设置GPIO控制电源(如果存在)
+            if screen_state.lcd_pin_pwr then
+                gpio.setup(screen_state.lcd_pin_pwr, 1, gpio.PULLUP)
+                gpio.set(screen_state.lcd_pin_pwr, 0)
+            end
+
+            -- 执行LCD睡眠
+            lcd.sleep()
+            screen_state.is_sleeping = true
+            log.info("AirLCD_1000", "LCD进入休眠状态")
+        end
+    else
+        -- 退出休眠模式
+        if screen_state.is_sleeping then
+            -- 唤醒LCD
+            lcd.wakeup()
+
+            -- 关闭GPIO控制(如果存在)
+            if screen_state.lcd_pin_pwr then
+                gpio.close(screen_state.lcd_pin_pwr)
+            end
+
+            -- 恢复之前的背光设置(如果PWM存在)
+            if screen_state.lcd_pin_pwr then
+                if screen_state.backlight_on then
+                    AirLCD_1000.set_backlight(screen_state.last_brightness)
+                else
+                    -- 如果背光原本是关闭状态,保持关闭
+                    pwm.stop(screen_state.lcd_pwm_id)
+                    pwm.close(screen_state.lcd_pwm_id)
+                end
+            end
+
+            screen_state.is_sleeping = false
+            log.info("AirLCD_1000", "LCD唤醒")
+        end
+    end
+    return true
+end
+
+return AirLCD_1000

BIN
module/Air780EPM/demo/accessory_board/AirLCD_1000/logo.jpg


+ 82 - 0
module/Air780EPM/demo/accessory_board/AirLCD_1000/main.lua

@@ -0,0 +1,82 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.09.04
+@author  江访
+@usage
+
+本demo演示的核心功能为:
+1、点亮AirLCD_1000屏幕
+2、通过屏幕显示图片、字符、色块等内容
+3、演示背光亮度5%-100%变化
+4、演示使屏幕进入休眠和唤醒屏幕
+
+更多说明参考本目录下的readme.md文件
+]]
+
+
+--[[
+必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
+PROJECT:项目名,ascii string类型
+        可以随便定义,只要不使用,就行
+VERSION:项目版本号,ascii string类型
+        如果使用合宙iot.openluat.com进行远程升级,必须按照"XXX.YYY.ZZZ"三段格式定义:
+            X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
+            因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
+        如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+
+
+
+-- 定义项目名称和版本号
+PROJECT = "AirLCD_1000_demo"     -- 项目名称
+VERSION = "1.0.0"                -- 版本号
+
+-- 打印项目名称和版本号咋看    
+log.info("AirLCD_demo", PROJECT, VERSION)
+
+-- 设置日志输出风格为样式2(建议调试时开启)
+-- log.style(2)
+
+-- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
+-- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
+if wdt then
+    --配置喂狗超时时间为9秒钟
+    wdt.init(9000)
+    --启动一个循环定时器,每隔3秒钟喂一次狗
+    sys.timerLoopStart(wdt.feed, 3000)
+end
+
+
+-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
+-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
+-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
+-- 启动errDump日志存储并且上传功能,600秒上传一次
+-- if errDump then
+--     errDump.config(true, 600)
+-- end
+
+
+-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
+-- 可以使用合宙的iot.openluat.com平台进行远程升级
+-- 也可以使用客户自己搭建的平台进行远程升级
+-- 远程升级的详细用法,可以参考fota的demo进行使用
+
+
+-- 启动一个循环定时器
+-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
+-- 方便分析内存使用是否有异常
+-- sys.timerLoopStart(function()
+--     log.info("mem.lua", rtos.meminfo())
+--     log.info("mem.sys", rtos.meminfo("sys"))
+-- end, 3000)
+
+
+-- 加载用户界面系统主模块
+require "ui_main"
+
+------------------------------------------用户代码已结束------------------------------------------
+-- 启动系统事件循环,这是程序的最终执行点,确保系统持续运行
+sys.run()
+-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行

+ 204 - 0
module/Air780EPM/demo/accessory_board/AirLCD_1000/readme.md

@@ -0,0 +1,204 @@
+# AirLCD_1000_Air780EPM 演示 demo
+
+
+## 一、功能模块介绍
+
+1. main.lua:主程序入口;
+
+2. ui_main.lua:UI应用模块,负责UI启动初始和UI主循环
+
+3. AirLCD_1000.lua:显示驱动模块,负责执行AirLCD_1000初始化,背光亮度调节和屏幕休眠和唤醒
+
+## 二、演示功能概述
+
+1. 屏幕接线引脚配置在AirLCD_1000.lua内进行设置
+
+2. 设置好后,启动主循环屏幕初始化程序,点亮屏幕
+
+3. 进入UI主task,循环显示显示图片、字符、色块等内容,并通过接口设置背光亮度和对屏幕进行休眠和唤醒。
+
+## 三、演示硬件环境
+
+### 3.1 硬件准备
+
+1. AirLCD_1000 显示屏*1
+
+2. Air780EPM 开发板或核心板*1
+
+3. 母对母杜邦线*8
+
+4. TYPE-C 数据线*1
+
+5. 按照硬件接线图正确连接 LCD 显示屏
+
+6. 将核心板正面开关打到 ON 位置
+
+7. 本demo使用的背光引脚,既是GPIO_1也是PWM_0引脚
+
+8. 调节屏幕亮度需要确保背光控制引脚(如 demo 中 GPIO1)支持 PWM 功能
+
+9. 背光引脚通过切换到PWM模式,通过调节占空比实现背光亮度调节
+
+10. 背光引脚通过切换到GPIO模式,再调用休眠/唤醒接口使屏幕进入休眠/唤醒
+
+### 3.2接线说明
+
+<table>
+<tr>
+<td>引脚说明<br/></td><td>核心开发板<br/></td><td>屏幕<br/></td><td>引脚说明<br/></td></tr>
+<tr>
+<td>屏幕供电<br/></td><td>VDD-EXT<br/><br/></td><td>VCC<br/><br/></td><td>显示屏电源供电脚<br/><br/></td></tr>
+<tr>
+<td>电源地<br/></td><td>GND<br/></td><td>GND<br/></td><td>电源地<br/></td></tr>
+<tr>
+<td>LCD SPI 串口的时钟信号<br/></td><td>LCD_CLK<br/></td><td>CLK<br/></td><td>SPI 串口的时钟信号<br/></td></tr>
+<tr>
+<td>LCD SPI 串口的数据脚<br/></td><td>LCD_SDA<br/></td><td>MOS<br/></td><td>SPI 串口的数据输入脚<br/></td></tr>
+<tr>
+<td>LCD 复位脚<br/></td><td>LCD_RST<br/></td><td>RES<br/></td><td>显示屏复位脚<br/></td></tr>
+<tr>
+<td>LCD 数据/寄存器控制脚<br/></td><td>LCD_RS<br/><br/></td><td>DC<br/></td><td>4 线 SPI 串口的显示数据/寄存器指令<br/></td></tr>
+<tr>
+<td>LCD SPI片选,同一个SPI接口上有多个设备才使用<br/></td><td>LCD_CS<br/></td><td>CS<br/></td><td>LCD驱动芯片片选脚<br/></td></tr>
+<tr>
+<td>LCD 背光控制引脚<br/></td><td>GPIO_1/PWM0<br/></td><td>BKL<br/></td><td>背光使能引脚<br/></td></tr>
+</table>
+
+![](https://docs.openLuat.com/cdn/image/Air780EPM_AirLCD_1000.jpg)
+
+注意:模组GPIO供电能力弱,所以使用VDD-EXT供电。
+
+
+## 四、演示软件环境
+
+### 4.1 底层固件准备
+
+固件版本,推荐使用 V2015 及以后最新固件版本:
+
+  [Air780EPM固件下载链接(Air780EHM固件下载下方)](https://docs.openluat.com/air780epm/luatos/firmware/version/)
+
+
+
+### 4.2Luatools下载调试工具
+[demo下载调试工具:Luatools](https://docs.openluat.com/air780egh/luatos/common/download/?h=luatools#33-luatools)
+
+### 4.2演示emo下载
+下载本 demo中除readme外的所有的代码文件以及图片文件
+
+## 五、演示核心步骤
+
+### 5.1 烧录程序
+
+1. 下载 luatools 烧录工具:[luatools下载链接及使用说明](https://docs.openluat.com/air780epm/common/Luatools/)
+
+2. 按照操作说明,将本 demo 内除 readme.md 外的全部文件通过 luatools 下载到模块内**(按住 BOOT 键开机,选择下载底层和脚本)**
+
+3. 如需显示图片,如 demo 中显示的 logo,确保 `logo.jpg` 图片文件存在,下载时会放在模组 `/luadb/` 目录下
+   ![](https://docs.openluat.com/air8000/luatos/app/AirLCD_1000%E6%BC%94%E7%A4%BAdemo/imges/UdWZbZ0tXoYPK5xG2Kbcx2y7nSc.png)
+
+
+### 5.2、演示 demo 效果
+
+1. 通过 demo 了解屏幕连接、配置、初始化过程,为显示做好准备
+
+2. 通过 demo 将图片、12 号中文、英文、点、线、圆形、矩形、颜色填充、二维码显示在屏幕上
+
+3. 通过 demo 了解如何使用接口对屏幕进行背光亮度调节、屏幕休眠、屏幕唤醒
+
+4. 实现效果图
+
+![](https://docs.openLuat.com/cdn/image/Air780EPM_AirLCD_1000_2.jpg)
+
+![](https://docs.openluat.com/air8000/luatos/app/AirLCD_1000%E6%BC%94%E7%A4%BAdemo/imges/BaH5b9WnKomL4SxNJxvc5rZKnIg.png)
+
+
+
+
+## 六、程序对外接口
+
+### 6.1 AirLCD_1000 模块接口
+
+#### `AirLCD_1000.lcd_init()`
+
+- 功能:初始化 AirLCD_1000LCD 显示屏
+- 参数:
+
+  - LCD_MODEL: LCD 型号字符串(如"AirLCD_1000")
+  - lcd_pin_dc: 数据/命令引脚号
+  - lcd_pin_rst: 复位引脚号
+  - lcd_pin_pwr: 背光控制引脚号
+- 返回值:初始化成功状态(true/false), 屏幕宽度, 屏幕高度
+
+#### `AirLCD_1000.set_backlight(level)`
+
+- 功能:设置背光亮度
+- 参数:level - 亮度级别(0-100)
+- 返回值:设置成功状态(true/false)
+
+#### `AirLCD_1000.set_sleep(sleep)`
+
+- 功能:设置屏幕休眠或唤醒
+- 参数:sleep - true 进入休眠, false 唤醒
+- 返回值:设置成功状态(true/false)
+- **注意事项:目前在屏幕休眠模式下,仅 AIR780EPM 支持模组设置 pm.power(pm.WORK_MODE, 1),其他型号暂时不支持,唤醒模组会导致模组死机**
+
+### 6.2 screen_data_table 配置参数
+
+- `lcd_models`: 支持的 LCD 型号及其参数
+- `default`: 默认配置(滑动阈值、点击时间阈值等)预留后续扩展功能使用
+
+### 6.3 更多显示接口
+
+- 可以参考合宙 docs 上 LCD 库进行扩展使用:[https://docs.openluat.com/osapi/core/lcd/](https://docs.openluat.com/osapi/core/lcd/)
+
+## 七、扩展说明
+
+1. 目前支持 ST7796、ST7789、CO5300 显示芯片,其他 st7735 、st7735v、st7735s、gc9a01、gc9106l、gc9306x、ili9486 也同样支持,
+
+2. 模组字体支持有限,需要使用其他字体可以搭配合宙 AirFONTS_1000 矢量字库使用
+
+3. Air780EPM/EHM/EGH/EHV、Air8000 系列、Air8101,按正确的接口接线并修改 screen_data_table.lua 都可以使用此 demo
+
+4. 其他屏幕可以参考 custom 的方式自定义屏幕初始化配置
+
+```lua
+-- 配置接口参数
+local lcd_param = {
+        port = lcd.HWID_0,        -- 使用的spi id 号
+        pin_rst = 36,             -- 复位引脚
+        pin_dc = 0xff,            -- 命令选择硬件,不设置
+        pin_rst = 2,              -- 屏幕reset 管脚  
+        direction = 0,            -- 屏幕方向
+        w = width,                -- 屏幕宽度
+        h = height,               -- 屏幕高度
+        xoffset = 0,              -- X轴偏移像素
+        yoffset = 0,              -- Y轴偏移像素
+        sleepcmd = 0x10,          -- LCD睡眠命令
+        wakecmd = 0x11,           -- LCD唤醒命令
+    }
+    
+  -- 初始化SPI设备
+        spi.deviceSetup(
+            lcd.HWID_0,  -- LCD端口号
+            nil,         -- CS片选脚,可选
+            0,           -- CPHA=0
+            0,           -- CPOL=0
+            8,           -- 8位数据宽度
+            20000000,    -- 20MHz波特率
+            spi.MSB,     -- 高位先传
+            1,           -- 主机模式
+            1            -- 全双工模式
+        )
+        
+    -- QSPI如有特殊配置,需要在lcd.init前配置好
+    --lcd.qspi(0x02, 0x32, 0x12)
+        
+    -- 初始化屏幕 
+    lcd.init("custom", lcd_param)
+    
+    -- 如有其他参数需要配置,可使用lcd.cmd命令
+    --lcd.cmd(0x53, 0x20)
+        
+    -- 自定义初始化后必须运行该程序
+    lcd.user_done()
+```

+ 187 - 0
module/Air780EPM/demo/accessory_board/AirLCD_1000/ui_main.lua

@@ -0,0 +1,187 @@
+--[[
+@module  ui_main
+@summary UI子模块的主程序
+@version 1.0
+@date    2025.09.04
+@author  江访
+@usage
+
+本demo演示的核心功能为:
+1、依据显示屏配置参数初始化显示屏,点亮AirLCD_1000屏幕
+2、循环显示显示图片、字符、色块等内容
+3、通过接口设置背光亮度和对屏幕进行休眠和唤醒。
+4、本demo使用的背光引脚,既是GPIO_1也是PWM_0引脚
+5、背光引脚通过切换到PWM模式,通过调节占空比实现背光亮度调节
+6、背光引脚通过切换到GPIO模式,再调用休眠/唤醒接口使屏幕进入休眠/唤醒
+]]
+
+
+-- 加载AirLCD_1000驱动模块
+local AirLCD_1000 = require "AirLCD_1000"           -- 显示初始化执行程序
+
+-- 配置AirLCD_1000接线引脚
+local LCD_MODEL = "AirLCD_1000" -- 显示屏型号
+local lcd_vcc = 29              -- 屏幕供电引脚GPIO号,VDD-EXT供电可填255
+local lcd_pin_rst = 36          -- 复位引脚GPIO号
+local lcd_pin_pwr = 1           -- 背光引脚GPIO号
+local lcd_pwm_id = 0            -- 背光引脚PWM端口号
+
+-- UI主task,所有UI相关的代码都会通过该task进行调度
+local function ui_main()
+
+    AirLCD_1000.lcd_init(LCD_MODEL, lcd_vcc, lcd_pin_rst, lcd_pin_pwr,lcd_pwm_id)
+
+    -- 设置字体为模组自带的opposansm12中文字体
+    lcd.setFont(lcd.font_opposansm12_chinese)
+
+    -- 清除屏幕显示
+    -- lcd.clear()
+
+    -- 主循环
+    while true do
+        -- 获取并打印屏幕尺寸信息,实际是初始化传入的信息
+        -- log.info("屏幕尺寸", lcd.getSize())
+        
+        ------------------------------------------以下为图片/位图/英文显示设置------------------------------------------
+        --设置前景色和背景色(RGB565格式)
+        --需要放在循环内部,因为是一次性设置
+        lcd.setColor(0xFFFF, 0x0000)  -- 白底黑字,背景色:白色(0xFFFF), 前景色:黑色(0x0000),
+
+        -- 在屏幕左上角(0,0)显示一张图片
+        -- 图片路径为/luadb/logo.jpg
+        lcd.showImage(0, 0, "/luadb/logo.jpg")
+
+        -- 在位置(0,82)绘制一个16x16的位图,内容依次为“上”,“海”,“合”,“宙”
+        -- 位图数据使用字符串格式表示
+        lcd.drawXbm(0, 82, 16, 16, string.char(
+        0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x3F,0x80,0x00,
+        0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x7F,0x00,0x00))
+
+        lcd.drawXbm(18, 82, 16, 16, string.char(
+        0x00,0x00,0x80,0x00,0xC4,0x7F,0x28,0x00,0x10,0x00,0xD0,0x3F,0x42,0x20,0x44,0x22,
+        0x40,0x24,0xF0,0xFF,0x24,0x20,0x24,0x22,0x24,0x20,0xE2,0x7F,0x02,0x20,0x02,0x1E))
+
+        lcd.drawXbm(36, 82, 16, 16, string.char(
+        0x00,0x00,0x00,0x01,0x80,0x01,0x40,0x02,0x20,0x04,0x18,0x18,0xF4,0x6F,0x02,0x00,
+        0x00,0x00,0xF8,0x1F,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0xF8,0x1F,0x08,0x10))
+
+        lcd.drawXbm(54, 82, 16, 16, string.char(
+        0x00,0x00,0x80,0x00,0x00,0x01,0xFE,0x7F,0x02,0x40,0x02,0x40,0x00,0x01,0xFC,0x3F,
+        0x04,0x21,0x04,0x21,0xFC,0x3F,0x04,0x21,0x04,0x21,0x04,0x21,0xFC,0x3F,0x04,0x20))
+
+        -- 在位置(120,40)绘制一个蓝色点
+        lcd.drawPoint(120, 40, 0x001F)
+
+        -- 以(120,40)为圆心,40为半径绘制一个蓝色圆
+        lcd.drawCircle(120, 40, 40, 0x001F)
+
+        -- 从(170,40)到(280,40)绘制一条蓝色水平线
+        lcd.drawLine(170, 40, 280, 40, 0x001F)
+
+        -- 从(170,50)到(280,80)绘制一个蓝色矩形框
+        lcd.drawRectangle(170, 50, 280, 80, 0x001F)
+
+
+        -- 在位置(200,170)绘制一个100x100的二维码,内容为指定URL
+        lcd.drawQrcode(200, 170, "https://docs.openluat.com/air8000/", 100)
+
+        lcd.setFont(lcd.font_opposansm12)
+        lcd.drawStr(20,172,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm16)
+        lcd.drawStr(20,189,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm18)
+        lcd.drawStr(20,210,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm20)
+        lcd.drawStr(20,233,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm22)
+        lcd.drawStr(20,258,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm24)
+        lcd.drawStr(20,285,"hello hezhou") --显示字符
+        lcd.setFont(lcd.font_opposansm32)
+        lcd.drawStr(20,316,"hello hezhou") --显示字符
+
+        lcd.fill(10, 380, 150, 460, 0xF800)  -- 绘制红色矩形区域(0xF800是红色)
+        lcd.fill(170, 380, 310, 460, 0x07E0)  -- 绘制绿色矩形区域(0x07E0是绿色)
+
+        -- 主动刷新数据到屏幕
+        lcd.flush()
+        sys.wait(5000)
+
+        --------------------------------------------以下为显示中文设置--------------------------------------------
+        -- Air780EPM不支持中文显示
+        -- Air780EHM/EGH/EHV/Air8000支持12号中文字体
+        -- 中文以左下角为坐标显示与位图左上角方式不同
+
+        -- 设置字体为opposansm12中文字体,从英文显示切换到中文前一定要设置
+        lcd.setFont(lcd.font_opposansm12_chinese)
+        lcd.setColor(0xFFFF, 0x0000)  -- 白底黑字,背景色:白色(0xFFFF), 前景色:黑色(0x0000),
+
+        -- 显示重拍按钮(左侧)
+        lcd.drawStr(70, 420, "重拍", 0xFFFF)  -- 在按钮上绘制白色文字"重拍"
+
+        -- 显示返回按钮(右侧)
+        lcd.drawStr(230, 420, "返回", 0xFFFF)  -- 在按钮上绘制白色文字"返回"
+
+        -- 在位置(160,155)绘制文本
+        -- 不设置字体颜色,默认会使用lcd.setColor所设置的字体颜色
+        lcd.drawStr(160, 155, "扫码进入Air8000资料站",0x0000)
+
+        -- 主动刷新数据到屏幕
+        lcd.flush()
+        sys.wait(5000)
+        --------------------------------------------以下为背光亮度设置--------------------------------------------
+        -- 背光引脚使用PWM模式控制,pwm_id正确配置后可以实现背光控制
+        -- 参数 level: 亮度级别(0-100)
+        AirLCD_1000.set_backlight(5)  -- 设置背光为5%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(10)  -- 设置背光为10%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(20)  -- 设置背光为20%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(30)  -- 设置背光为30%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(40)  -- 设置背光为40%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(50)  -- 设置背光为50%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(60)  -- 设置背光为60%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(70)  -- 设置背光为70%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(80)  -- 设置背光为80%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(90)  -- 设置背光为90%
+        sys.wait(5000)
+        AirLCD_1000.set_backlight(100)  -- 设置背光为100%
+
+        --------------------------------------------以下为屏幕休眠设置--------------------------------------------
+        -- 背光引脚使用GPIO模式控制,pin_pwr正确配置可以实现背光控制
+
+        -- 进入休眠,功耗13ma
+        AirLCD_1000.set_sleep(true)    -- 进入休眠状态,此时屏幕供电需要稳定,若不稳定,唤醒后需要重新初始化屏幕
+        pm.power(pm.WORK_MODE, 1)
+        sys.wait(10000)
+        pm.power(pm.WORK_MODE, 0)
+        AirLCD_1000.set_sleep(false)   -- 唤醒屏幕,自动恢复之前的背光设置
+
+        -- 主动刷新数据到屏幕
+        lcd.flush()
+        sys.wait(5000)
+        ----------------------------------------以下为屏幕关闭/打开背光设置----------------------------------------
+        -- --关闭LCD背光,功耗20ma
+        -- AirLCD_1000.lcd_off()
+        -- pm.power(pm.WORK_MODE, 1)
+        -- sys.wait(15000)
+        -- -- 唤醒
+        -- pm.power(pm.WORK_MODE, 0)
+        -- sys.wait(5000)
+        -- AirLCD_1000.lcd_on()
+
+        -- 主动刷新数据到屏幕
+        -- lcd.flush()
+        -- sys.wait(50)
+    end
+end
+
+-- 创建UI主循环ui_main的task
+sys.taskInit(ui_main)