Преглед изворни кода

add:新增Air8101搭配AirLCD_1020使用exeasyui开发demo

江访 пре 1 месец
родитељ
комит
986caa0c62
19 измењених фајлова са 1519 додато и 0 уклоњено
  1. 1 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_customer_font_drv.lua
  2. 55 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_default_font_drv.lua
  3. 58 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_gtfont_drv.lua
  4. 1 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_hzfont_drv.lua
  5. BIN
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/1.jpg
  6. BIN
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/2.jpg
  7. BIN
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/3.jpg
  8. BIN
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/4.jpg
  9. BIN
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/5.jpg
  10. BIN
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/logo.jpg
  11. 101 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/main.lua
  12. 264 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/readme.md
  13. 1 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/tp_key_drv/key_drv.lua
  14. 328 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/component_page.lua
  15. 280 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/default_font_page.lua
  16. 207 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/gtfont_page.lua
  17. 142 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/home_page.lua
  18. 45 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/hzfont_page.lua
  19. 36 0
      module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/ui_main.lua

+ 1 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_customer_font_drv.lua

@@ -0,0 +1 @@
+-- hw_customer_font_drv是用户外部自定义外部点阵字体、lcd显示驱动配置和tp触摸驱动配置的驱动配置文件,目前exeasyui自定义字体功能正在开发中。

+ 55 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_default_font_drv.lua

@@ -0,0 +1,55 @@
+--[[
+@module  hw_default_font_drv
+@summary 默认字体、lcd和tp驱动模块,使用内置12号点阵字体
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本文件为默认字体、lcd和tp驱动模块,核心业务逻辑为:
+1、使用lcd内核固件中自带的12号中文字体;
+2、根据配置的字体、lcd和tp参数,初始化exEasyUI默认使用的字体、硬件显示和触摸;
+3、提供无需外部硬件的字体显示能力;
+
+本文件的对外接口有0个:
+1、require加载后自动执行初始化;
+
+@api ui.hw_init(config)
+@summary 初始化exEasyUI硬件系统
+@table config 硬件配置参数表,包含LCD配置和触摸配置
+@field lcd_config table LCD显示配置参数
+@field tp_config table 触摸屏配置参数
+@return nil
+
+@usage
+
+]]
+
+-- 使用默认12号中文字体初始化exEasyUI硬件
+ui.hw_init({
+    -- lcd_config参数填写可以参考合宙exlcd显示扩展库exlcd.init(param)接口说明:https://docs.openluat.com/osapi/ext/exlcd/#31-exlcdinitparam
+    lcd_config = {
+        lcd_model = "AirLCD_1020", -- LCD型号
+    },
+
+    -- tp_config参数填写可以参考合宙extp触摸扩展库以下三个接口说明:https://docs.openluat.com/osapi/ext/extp/#41-extpinitparam
+    -- 按extp.init(param)接口说明填写tp_model、i2c_id、pin_rst、pin_int参数
+    -- 按extp.set_publish_enabled(msg_type, enabled)接口说明和实际需求填写message_enabled{}列表内参数
+    -- 按extp.set_swipe_threshold(threshold)接口说明填写swipe_threshold和long_press_threshold参数
+    tp_config = {
+        tp_model = "AirLCD_1020", -- 触摸芯片/设备型号
+        -- @param message_enabled 消息类型 ("ALL", "RAW_DATA", "TOUCH_DOWN", "MOVE_X", "MOVE_Y", "SWIPE_LEFT", "SWIPE_RIGHT", "SWIPE_UP", "SWIPE_DOWN", "SINGLE_TAP", "LONG_PRESS")
+        message_enabled = {
+            TOUCH_DOWN = true,      -- 启用按下检测
+            MOVE_X = true,          -- 启用横向滑动
+            MOVE_Y = true,          -- 启用纵向滑动
+            SWIPE_LEFT = true,      -- 启用左滑手势
+            SWIPE_RIGHT = true,     -- 启用右滑手势
+            SWIPE_UP = true,        -- 启用上滑手势
+            SWIPE_DOWN = true,      -- 启用下滑手势
+            SINGLE_TAP = true,      -- 启用点击手势
+            LONG_PRESS = false      -- 禁用长按手势
+        },
+        swipe_threshold = 10,       -- 设置滑动阈值
+        long_press_threshold = 2000 -- 设置长按阈值(毫秒)
+    }
+})

+ 58 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_gtfont_drv.lua

@@ -0,0 +1,58 @@
+--[[
+@module  hw_gtfont_drv
+@summary GTFont矢量字体驱动模块,使用AirFONTS_1000配件板
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本文件为GTFont矢量字体、lcd和tp驱动模块,核心业务逻辑为:
+1、使用gtfont核心库驱动AirFONTS_1000矢量字库配件板;
+2、根据配置的字体、lcd和tp参数,初始化exEasyUI默认使用的字体、硬件显示和触摸;
+3、提供高质量矢量字体显示能力;
+
+本文件的对外接口有0个:
+1、require加载后自动执行初始化;
+
+@api ui.hw_init(config)
+@summary 初始化exEasyUI硬件系统
+@table config 硬件配置参数表,包含字体配置、LCD配置和触摸配置
+@field font_config table 字体配置参数
+@field lcd_config table LCD显示配置参数
+@field tp_config table 触摸屏配置参数
+@return nil
+
+@usage
+
+]]
+
+-- 使用gtfont矢量字库初始化exEasyUI硬件
+ui.hw_init({
+    font_config = { type = "gtfont", spi = { id = 1, cs = 3 }, size = 32 },
+
+    -- lcd_config参数填写可以参考合宙exlcd显示扩展库exlcd.init(param)接口说明:https://docs.openluat.com/osapi/ext/exlcd/#31-exlcdinitparam
+    lcd_config = {
+        lcd_model = "AirLCD_1020", -- LCD型号
+    },
+
+    -- tp_config参数填写可以参考合宙extp触摸扩展库以下三个接口说明:https://docs.openluat.com/osapi/ext/extp/#41-extpinitparam
+    -- 按extp.init(param)接口说明填写tp_model、i2c_id、pin_rst、pin_int参数
+    -- 按extp.set_publish_enabled(msg_type, enabled)接口说明和实际需求填写message_enabled{}列表内参数
+    -- 按extp.set_swipe_threshold(threshold)接口说明填写swipe_threshold和long_press_threshold参数
+    tp_config = {
+        tp_model = "AirLCD_1020", -- 触摸芯片/设备型号
+        -- @param message_enabled 消息类型 ("ALL", "RAW_DATA", "TOUCH_DOWN", "MOVE_X", "MOVE_Y", "SWIPE_LEFT", "SWIPE_RIGHT", "SWIPE_UP", "SWIPE_DOWN", "SINGLE_TAP", "LONG_PRESS")
+        message_enabled = {
+            TOUCH_DOWN = true,      -- 启用按下检测
+            MOVE_X = true,          -- 启用横向滑动
+            MOVE_Y = true,          -- 启用纵向滑动
+            SWIPE_LEFT = true,      -- 启用左滑手势
+            SWIPE_RIGHT = true,     -- 启用右滑手势
+            SWIPE_UP = true,        -- 启用上滑手势
+            SWIPE_DOWN = true,      -- 启用下滑手势
+            SINGLE_TAP = true,      -- 启用点击手势
+            LONG_PRESS = false      -- 禁用长按手势
+        },
+        swipe_threshold = 10,       -- 设置滑动阈值
+        long_press_threshold = 2000 -- 设置长按阈值(毫秒)
+    }
+})

+ 1 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/hw_drv/hw_hzfont_drv.lua

@@ -0,0 +1 @@
+-- Air8101 内置HZFont矢量字体功能正在开发中。。。

BIN
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/1.jpg


BIN
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/2.jpg


BIN
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/3.jpg


BIN
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/4.jpg


BIN
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/5.jpg


BIN
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/images/logo.jpg


+ 101 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/main.lua

@@ -0,0 +1,101 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本demo演示的核心功能为:
+1、加载exeasyui扩展库;
+2、根据选择的字体类型驱动,进行显示、触摸硬件以及字体的初始化,
+   支持默认字体、外部矢量字库、内部软件矢量字库和外部自定义点阵字库四选一;
+3、用户界面主循环,实现多页面切换和触摸事件处理;
+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进行远程升级,根据自己项目的需求,自定义格式即可
+]]
+
+-- main.lua - 程序入口文件
+
+-- 定义项目名称和版本号
+PROJECT = "ui_demo" -- 项目名称
+VERSION = "001.000.000"   -- 版本号
+
+-- 在日志中打印项目名和项目版本号
+log.info("ui_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)
+
+
+-- 必须加载才能启用exeasyui的功能
+ui = require("exeasyui")
+
+
+-- 加载lcd、tp和字库驱动管理功能模块,有以下四种:
+-- 1、使用lcd内核固件中自带的12号中文字体的hw_default_font_drv,并按lcd显示驱动配置和tp触摸驱动配置进行初始化
+-- 2、使用hzfont核心库驱动内核固件中支持的软件矢量字库的hw_hzfont_drv.lua(目前开发中)
+-- 3、使用gtfont核心库驱动AirFONTS_1000矢量字库配件板的hw_gtfont_drv.lua,并按lcd显示驱动配置和tp触摸驱动配置进行初始化
+-- 4、使用自定义字体的hw_customer_font_drv(目前开发中)
+-- 最新情况可查看模组选型手册中对应型号的固件列表内,支持的核心库是否包含lcd、tp、12号中文、gtfont、hzfont,链接https://docs.openluat.com/air780epm/common/product/
+-- 目前exeasyui V1.7.0版本支持使用已经实现的四种功能中的一种进行初始化,同时支持多种字体初始化功能正在开发中
+require("hw_default_font_drv")
+-- require("hw_hzfont_drv")(目前开发中)
+-- require("hw_gtfont_drv")
+-- require("hw_customer_font_drv")(目前开发中)
+
+
+-- 加载exeassyui扩展库实现的用户界面功能模块
+-- 实现多页面切换、触摸事件分发和界面渲染功能
+-- 包含主页、组件演示页、默认字体演示页、HZfont演示页、GTFont演示页和自定义字体演示页
+require("ui_main")
+
+
+-- 用户代码已结束
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行

+ 264 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/readme.md

@@ -0,0 +1,264 @@
+# exEasyUI 演示
+
+## 一、功能模块介绍
+
+### 1.1 核心主程序模块
+
+1. **main.lua** - 主程序入口,负责系统初始化和任务调度
+2. **ui_main.lua** - exeasyui 主程序,负责执行exeasyui的任务调度
+
+### 1.2 显示页面模块
+
+1. **home_page.lua** - 主页模块,提供应用入口和导航功能
+2. **component_page.lua** - UI 组件演示模块
+3. **default_font_page.lua** - 默认字体演示模块
+4. **gtfont_page.lua** - GTFont 矢量字体演示模块
+5. **hzfont_page.lua** - HZFont 矢量字体演示模块
+
+### 1.3 硬件驱动模块
+
+1. **hw_default_font_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和默认字体驱动模块,使用内置 12 号点阵字体
+2. **hw_gtfont_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和GTFont 矢量字库驱动模块
+3. **hw_hzfont_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和HZFont 矢量字体驱动模块(开发中)
+4. **hw_customer_font_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和自定义外部字体驱动模块(开发中)
+
+当前演示的exeasyui V1.7.0版本还不支持同时启用多种字体,仅支持选择一种字体初始化,同时启用多种字体功能正在开发中
+
+## 二、演示效果
+
+<table>
+<tr>
+<td>主页<br/></td><td>组件演示页<br/></td><td>默认字体页<br/></td><td>GTFont页<br/></td></tr>
+<tr>
+<td><img src="https://docs.openluat.com/cdn/image/exeasyui_AirLCD_1020_home_gage.png.png" width="80" /><br/></td><td>
+<img src="https://docs.openluat.com/cdn/image/exeasyui_AirLCD_1020_component_page.png" width="80" /><br/></td><td>
+<img src="https://docs.openluat.com/cdn/image/exeasyui_AirLCD_1020_default_font_page.png" width="80" /><br/></td><td>
+<img src="https://docs.openluat.com/cdn/image/exeasyui_AirLCD_1020_default_font_page.jpg" width="80" /><br/></td></tr>
+</table>
+
+## 三、演示硬件环境
+
+### 3.1 硬件清单
+
+- Air8101 核心板 × 1
+- AirLCD_1020 触摸配件板 × 1
+- GTFont 矢量字库,使用的是 AirFONTS_1000 配件板 × 1
+- 双排40PIN的双头线 x 1
+- 母对母杜邦线 × 6,杜邦线太长的话,会出现 spi 通信不稳定的现象;
+- TYPE-C 数据线 × 1
+- Air8101 核心板和 AirLCD_1020配件板以及AirFONTS_1000 配件板的硬件接线方式为
+
+  - Air8101 核心板通过 TYPE-C USB 口供电(核心板背面的功耗测试开关拨到 OFF 一端,正面开关打到 3.3V 一端),此种供电方式下,vbat 引脚为 3.3V,可以直接给 AirLCD_1020配件板和AirFONTS_1000 配件板供电;
+  - 为了演示方便,所以 Air8101 核心板上电后直接通过 vbat 引脚给 AirLCD_1020配件板和AirFONTS_1000 配件板提供了 3.3V 的供电;
+  - 客户在设计实际项目时,一般来说,需要通过一个GPIO来控制LDO给LCD和TP供电,这样可以灵活地控制供电,可以使项目的整体功耗降到最低;
+  - 核心板和配件板之间配备了双排40PIN的双头线,可以参考下表很方便地连接双方各自的40个管脚,插入或者拔出双头线时,要慢慢的操作,防止将排针折弯;
+  
+### 3.2 接线配置
+
+#### 3.2.1 LCD 显示屏接线
+
+<table>
+<tr>
+<td>Air8101核心板<br/></td><td>AirLCD_1020配件板<br/></td></tr>
+<tr>
+<td>gnd<br/></td><td>GND<br/></td></tr>
+<tr>
+<td>vbat<br/></td><td>VCC<br/></td></tr>
+<tr>
+<td>42/R0<br/></td><td>RGB_R0<br/></td></tr>
+<tr>
+<td>40/R1<br/></td><td>RGB_R1<br/></td></tr>
+<tr>
+<td>43/R2<br/></td><td>RGB_R2<br/></td></tr>
+<tr>
+<td>39/R3<br/></td><td>RGB_R3<br/></td></tr>
+<tr>
+<td>44/R4<br/></td><td>RGB_R4<br/></td></tr>
+<tr>
+<td>38/R5<br/></td><td>RGB_R5<br/></td></tr>
+<tr>
+<td>45/R6<br/></td><td>RGB_R6<br/></td></tr>
+<tr>
+<td>37/R7<br/></td><td>RGB_R7<br/></td></tr>
+<tr>
+<td>46/G0<br/></td><td>RGB_G0<br/></td></tr>
+<tr>
+<td>36/G1<br/></td><td>RGB_G1<br/></td></tr>
+<tr>
+<td>47/G2<br/></td><td>RGB_G2<br/></td></tr>
+<tr>
+<td>35/G3<br/></td><td>RGB_G3<br/></td></tr>
+<tr>
+<td>48/G4<br/></td><td>RGB_G4<br/></td></tr>
+<tr>
+<td>34/G5<br/></td><td>RGB_G5<br/></td></tr>
+<tr>
+<td>49/G6<br/></td><td>RGB_G6<br/></td></tr>
+<tr>
+<td>33/G7<br/></td><td>RGB_G7<br/></td></tr>
+<tr>
+<td>50/B0<br/></td><td>RGB_B0<br/></td></tr>
+<tr>
+<td>32/B1<br/></td><td>RGB_B1<br/></td></tr>
+<tr>
+<td>51/B2<br/></td><td>RGB_B2<br/></td></tr>
+<tr>
+<td>31/B3<br/></td><td>RGB_B3<br/></td></tr>
+<tr>
+<td>52/B4<br/></td><td>RGB_B4<br/></td></tr>
+<tr>
+<td>30/B5<br/></td><td>RGB_B5<br/></td></tr>
+<tr>
+<td>53/B6<br/></td><td>RGB_B6<br/></td></tr>
+<tr>
+<td>29/B7<br/></td><td>RGB_B7<br/></td></tr>
+<tr>
+<td>28/DCLK<br/></td><td>RGB_DCLK<br/></td></tr>
+<tr>
+<td>54/DISP<br/></td><td>RGB_DISP<br/></td></tr>
+<tr>
+<td>55/HSYN<br/></td><td>RGB_HSYNC<br/></td></tr>
+<tr>
+<td>56/VSYN<br/></td><td>RGB_VSYNC<br/></td></tr>
+<tr>
+<td>57/DE<br/></td><td>RGB_DE<br/></td></tr>
+<tr>
+<td>14/GPIO8<br/></td><td>LCD_BL<br/></td></tr>
+<tr>
+<td>13/GPIO9<br/></td><td>LCD_RST<br/></td></tr>
+<tr>
+<td>8/GPIO5<br/></td><td>LCD_SDI<br/></td></tr>
+<tr>
+<td>9/GPIO6<br/></td><td>LCD_SCL<br/></td></tr>
+<tr>
+<td>68/GPIO12<br/></td><td>LCD_CS<br/></td></tr>
+<tr>
+<td>75/GPIO28<br/></td><td>TP_RST<br/></td></tr>
+<tr>
+<td>10/GPIO7<br/></td><td>TP_INT<br/></td></tr>
+<tr>
+<td>12/U1TX<br/></td><td>TP_SCL<br/></td></tr>
+<tr>
+<td>11/U1RX<br/></td><td>TP_SDA<br/></td></tr>
+</table>
+
+#### 3.2.2 GTFont 字库接线
+
+<table> 
+<tr> <td>Air8101 核心板</td><td>AirFONTS_1000配件板</td></tr>
+ <tr> <td>66/GPIO3</td><td>CS</td></tr> 
+ <tr> <td>67/GPIO4</td><td>MISO</td></tr> 
+ <tr> <td>8/GPIO5</td><td>MOSI</td></tr> 
+ <tr> <td>65/GPIO2</td><td>CLK</td></tr> 
+ <tr> <td>vbat</td><td>VCC</td></tr> 
+</table>
+
+#### 3.2.3 接线图
+![](https://docs.openLuat.com/cdn/image/Air8101_AirLCD_1020_AirFONTS_1000接线图.jpg)
+
+## 四、演示软件环境
+
+### 4.1 开发工具
+
+- [Luatools下载调试工具](https://docs.openluat.com/air8101/luatos/common/download/) - 固件烧录和代码调试
+
+### 4.2 内核固件
+
+- [点击下载Air8101最新版本内核固件](https://docs.openluat.com/air8101/luatos/firmware/),demo所使用的是LuatOS-SoC_V1006_Air8101 1号固件
+
+## 五、演示核心步骤
+
+### 5.1 硬件准备
+
+1. 按照硬件接线表连接所有设备
+2. 如使用 GTFont,需要连接 AirFONTS_1000 配件板
+3. 通过 TYPE-C USB 口供电
+4. 检查所有接线无误
+
+### 5.2 软件配置
+
+在 `main.lua` 中配置系统参数:
+
+```lua
+-- 必须加载才能启用exeasyui的功能
+ui = require("exeasyui")
+
+-- 加载lcd、tp和字库驱动管理功能模块,有以下四种:
+-- 1、使用lcd内核固件中自带的12号中文字体的hw_default_font_drv,并按lcd显示驱动配置和tp触摸驱动配置进行初始化
+-- 2、使用hzfont核心库驱动内核固件中支持的软件矢量字库的hw_hzfont_drv.lua,并按lcd显示驱动配置和tp触摸驱动配置进行初始化
+-- 3、使用gtfont核心库驱动AirFONTS_1000矢量字库配件板的hw_gtfont_drv.lua,并按lcd显示驱动配置和tp触摸驱动配置进行初始化
+-- 4、使用自定义字体的hw_customer_font_drv(目前开发中)
+-- 最新情况可查看模组选型手册中对应型号的固件列表内,支持的核心库是否包含lcd、tp、12号中文、gtfont、hzfont,链接https://docs.openluat.com/air780epm/common/product/
+-- 目前exeasyui V1.7.0版本支持使用已经实现的四种功能中的一种进行初始化,同时支持多种字体初始化功能正在开发中
+require("hw_default_font_drv")
+-- require("hw_hzfont_drv")开发中
+-- require("hw_gtfont_drv")
+-- require("hw_customer_font_drv")开发中
+
+-- 加载exeassyui扩展库实现的用户界面功能模块
+-- 实现多页面切换、触摸事件分发和界面渲染功能
+-- 包含主页、组件演示页、默认字体演示页、HZfont演示页、GTFont演示页和自定义字体演示页
+
+require("ui_main")
+```
+
+### 5.3 屏幕参数配置
+
+在对应的驱动文件中根据实际硬件调整硬件参数:
+
+- **hw_default_font_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和默认字体驱动模块,使用内置 12 号点阵字体
+- **hw_gtfont_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和GTFont 矢量字库驱动模块
+- **hw_hzfont_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和HZFont 矢量字体驱动模块(开发中)
+- **hw_customer_font_drv.lua** - lcd显示驱动配置、tp触摸驱动配置和自定义外部字体驱动模块(开发中)
+
+### 5.4 软件烧录
+
+1. 使用 Luatools 烧录对应型号的最新内核固件
+2. 下载并烧录本项目所有脚本文件
+3. 将图片文件随脚本文件一起烧录到脚本分区
+4. 设备自动重启后开始运行
+5. [点击查看Luatools 下载和详细使用](https://docs.openluat.com/air8101/common/Luatools/)
+
+### 5.5 功能测试
+
+#### 5.5.1 主页面操作
+
+1. 设备启动后显示主页面,包含四个功能按钮
+2. 查看系统标题和版本信息
+3. 点击各功能按钮进入对应演示页面
+
+#### 5.5.2 组件演示页面
+
+1. 测试进度条组件的动态更新
+2. 在输入框中输入文本测试
+3. 点击按钮查看打印日志
+4. 操作复选框查看状态变化
+5. 体验消息框的弹出和按钮响应
+6. 使用下拉框选择选项
+7. 查看图片轮播效果(如有图片文件)
+
+#### 5.5.3 字体演示页面
+
+1. **默认字体页**:查看固定 12 号字体的颜色和中英文显示
+2. **GTFont 页**:体验多尺寸矢量字体显示效果
+3. 在各页面使用返回按钮回到主页
+
+### 5.6 预期效果
+
+- **系统启动**:正常初始化,显示主页面
+- **页面切换**:流畅的页面过渡效果
+- **组件交互**:所有 UI 组件响应灵敏
+- **字体显示**:各字体页面正常显示,动态调整功能正常
+- **触摸操作**:准确的触摸定位和事件响应
+
+### 5.7 故障排除
+
+1. **显示异常**:检查 LCD 接线,确认对应驱动文件中的硬件参数正确
+2. **触摸无响应**:检查 I2C 接线,确认触摸芯片型号配置正确
+3. **字体显示异常**:确认选择的字体驱动与硬件匹配
+4. **图片无法显示**:确认图片文件已正确烧录到指定路径
+5. **系统卡顿**:调整 `ui_main.lua` 中的sys.wait(time)刷新率参数
+
+## 六、扩展开发
+
+本演示 demo 所有接口都在 [exeasyUI UI 扩展库](https://docs.openluat.com/osapi/ext/exeasyui/)内有详细说明,如需实现更丰富的自定义功能可按接口说明实现。

+ 1 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/tp_key_drv/key_drv.lua

@@ -0,0 +1 @@
+-- 无触摸仅显示,通过按键方式进行UI交互的初始化方式正在开发中

+ 328 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/component_page.lua

@@ -0,0 +1,328 @@
+--[[
+@module  component_page
+@summary exEasyUI组件演示页面模块,展示各种UI组件的使用方法
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本文件为组件演示页面功能模块,核心业务逻辑为:
+1、创建带上下滚动功能的演示窗口;
+2、展示进度条、消息框、按钮、复选框、输入框、下拉框、图片轮播等UI组件;
+3、演示组件的交互功能和事件处理;
+4、提供返回主页的导航功能;
+
+本文件的对外接口有1个:
+1、component_page.create(ui):创建组件演示页面;
+]]
+
+local component_page = {}
+
+--[[
+创建组件演示页面;
+
+@api component_page.create(ui)
+@summary 创建组件演示页面界面
+@table ui UI库对象
+@return table 组件演示窗口对象
+
+@usage
+-- 在子页面工厂中调用创建组件演示页面
+local component_page = require("component_page").create(ui)
+]]
+function component_page.create(ui)
+    local win = ui.window({
+        background_color = ui.COLOR_WHITE,
+        x = 0,
+        y = 0,
+        w = 800,
+        h = 480 -- 全屏窗口
+    })
+
+    -- 启用滚动
+    win:enable_scroll({
+        direction = "vertical",
+        content_height = 600,
+        threshold = 10
+    })
+
+    -- 标题 - 居中
+    local title = ui.label({
+        x = 300,
+        y = 25,
+        text = "组件演示页面",
+        color = ui.COLOR_BLACK,
+        size = 20
+    })
+
+    -- 返回按钮
+    local btn_back = ui.button({
+        x = 20,
+        y = 20,
+        w = 80,
+        h = 40,
+        text = "返回",
+        font_size = 14,
+        on_click = function()
+            win:back()
+        end
+    })
+
+    -- ==================== 布局参数 ====================
+    local column1_x = 40  -- 第一列起始位置
+    local column2_x = 420 -- 第二列起始位置(800宽度分两列)
+    local start_y = 80
+    local spacing_y = 50
+
+    -- ==================== 1. 进度条组件演示 ====================
+    local progress_label = ui.label({
+        x = column1_x,
+        y = start_y,
+        text = "1. 进度条组件:",
+        color = ui.COLOR_BLACK,
+        size = 16
+    })
+
+    local progress_value = 0
+    local progress_bar = ui.progress_bar({
+        x = column1_x,
+        y = start_y + 30,
+        w = 240,
+        h = 30,
+        progress = progress_value
+    })
+
+    local btn_progress = ui.button({
+        x = column1_x + 250,
+        y = start_y + 30,
+        w = 100,
+        h = 30,
+        text = "+10%",
+        on_click = function()
+            progress_value = progress_value + 10
+            if progress_value > 100 then
+                progress_value = 0
+            end
+            progress_bar:set_progress(progress_value)
+            progress_bar:set_text("进度: " .. progress_value .. "%")
+        end
+    })
+
+    -- ==================== 2. 输入框组件演示 ====================
+    local input_label = ui.label({
+        x = column1_x,
+        y = start_y + spacing_y + 40,
+        text = "2. 输入框组件:",
+        color = ui.COLOR_BLACK,
+        size = 16
+    })
+
+    -- 普通文本输入框
+    local text_input = ui.input({
+        x = column1_x,
+        y = start_y + spacing_y + 70,
+        w = 350,
+        h = 40,
+        placeholder = "请输入文本...",
+        max_length = 20
+    })
+
+    -- 密码输入框
+    local password_input = ui.input({
+        x = column1_x,
+        y = start_y + spacing_y + 120,
+        w = 350,
+        h = 40,
+        placeholder = "请输入密码...",
+        input_type = "password",
+        max_length = 16
+    })
+
+    -- 数字输入框
+    local number_input = ui.input({
+        x = column1_x,
+        y = start_y + spacing_y + 170,
+        w = 350,
+        h = 40,
+        placeholder = "请输入数字...",
+        input_type = "number",
+        max_length = 16
+    })
+
+    -- ==================== 3. 按钮组件演示 ====================
+    local button_label = ui.label({
+        x = column1_x,
+        y = start_y + spacing_y * 2 + 200,
+        text = "3. 按钮组件:",
+        color = ui.COLOR_BLACK,
+        size = 16
+    })
+
+    -- 普通按钮
+    local normal_btn = ui.button({
+        x = column1_x,
+        y = start_y + spacing_y * 2 + 230,
+        w = 100,
+        h = 40,
+        text = "普通按钮",
+        on_click = function()
+            log.info("component_page", "普通按钮被点击")
+        end
+    })
+
+    -- 带颜色的按钮
+    local colored_btn = ui.button({
+        x = column1_x + 110,
+        y = start_y + spacing_y * 2 + 230,
+        w = 100,
+        h = 40,
+        text = "蓝色按钮",
+        bg_color = ui.COLOR_BLUE,
+        text_color = ui.COLOR_WHITE,
+        on_click = function()
+            log.info("component_page", "蓝色按钮被点击")
+        end
+    })
+
+    -- 图片按钮
+    local image_btn = ui.button({
+        x = column1_x + 220,
+        y = start_y + spacing_y * 2 + 220,
+        w = 64,
+        h = 64,
+        src = "/luadb/4.jpg",
+        src_toggled = "/luadb/5.jpg",
+        toggle = true,
+        on_click = function()
+            log.info("component_page", "图片按钮被点击")
+        end
+    })
+    -- ==================== 4. 复选框组件演示 ====================
+    local checkbox_label = ui.label({
+        x = column2_x,
+        y = start_y,
+        text = "4. 复选框组件:",
+        color = ui.COLOR_BLACK,
+        size = 16
+    })
+
+    local checkbox1 = ui.check_box({
+        x = column2_x,
+        y = start_y + 35,
+        text = "选项A",
+        checked = false,
+        on_change = function(checked)
+            log.info("component_page", "选项A:", checked)
+        end
+    })
+
+    local checkbox2 = ui.check_box({
+        x = column2_x + 100,
+        y = start_y + 35,
+        text = "选项B",
+        checked = true,
+        on_change = function(checked)
+            log.info("component_page", "选项B:", checked)
+        end
+    })
+
+    -- ==================== 5. 下拉框组件演示 ====================
+    local combo_label = ui.label({
+        x = column2_x,
+        y = start_y + spacing_y + 30,
+        text = "5. 下拉框组件:",
+        color = ui.COLOR_BLACK,
+        size = 16
+    })
+
+    local combo_box = ui.combo_box({
+        x = column2_x,
+        y = start_y + spacing_y + 60,
+        w = 350,
+        h = 40,
+        options = { "选项1", "选项2", "选项3", "选项4", "选项5" },
+        placeholder = "请选择",
+        selected = 1,
+        on_select = function(value, index, text)
+            log.info("component_page", "选择了:", text, "索引:", index)
+        end
+    })
+
+    -- ==================== 6. 消息框组件演示 ====================
+    local msgbox_label = ui.label({
+        x = column2_x,
+        y = start_y + spacing_y * 2 + 60,
+        text = "6. 消息框组件:",
+        color = ui.COLOR_BLACK,
+        size = 16
+    })
+
+    local btn_msgbox = ui.button({
+        x = column2_x,
+        y = start_y + spacing_y * 2 + 90,
+        w = 150,
+        h = 40,
+        text = "弹出消息框",
+        on_click = function()
+            local message_box = ui.message_box({
+                x = 200,
+                y = 150, -- 居中显示
+                w = 400,
+                h = 200,
+                title = "提示",
+                message = "这是一个exEasyUI消息框演示",
+                buttons = { "确定", "取消" },
+                on_result = function(button_index)
+                    log.info("component_page", "点击了按钮:", button_index)
+                end
+            })
+            ui.add(message_box)
+        end
+    })
+
+    -- ==================== 7. 图片轮播组件演示 ====================
+    local picture_label = ui.label({
+        x = column2_x,
+        y = start_y + spacing_y * 3 + 90,
+        text = "7. 图片轮播组件:",
+        color = ui.COLOR_BLACK,
+        size = 16
+    })
+
+    local picture = ui.picture({
+        x = column2_x,
+        y = start_y + spacing_y * 3 + 120,
+        w = 460,
+        h = 150, -- 增大尺寸
+        sources = { "/luadb/1.jpg", "/luadb/2.jpg", "/luadb/3.jpg" },
+        autoplay = true,
+        interval = 2000
+    })
+
+    -- 添加所有组件到窗口
+    win:add(title)
+    win:add(btn_back)
+    win:add(progress_label)
+    win:add(progress_bar)
+    win:add(btn_progress)
+    win:add(checkbox_label)
+    win:add(checkbox1)
+    win:add(checkbox2)
+    win:add(input_label)
+    win:add(text_input)
+    win:add(password_input)
+    win:add(number_input)
+    win:add(combo_label)
+    win:add(combo_box)
+    win:add(button_label)
+    win:add(normal_btn)
+    win:add(colored_btn)
+    win:add(image_btn)
+    win:add(msgbox_label)
+    win:add(btn_msgbox)
+    win:add(picture_label)
+    win:add(picture)
+
+    return win
+end
+
+return component_page

+ 280 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/default_font_page.lua

@@ -0,0 +1,280 @@
+--[[
+@module  default_font_page
+@summary 默认字体演示页面模块,使用内置12号点阵字体功能
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本文件为默认字体演示页面功能模块,核心业务逻辑为:
+1、创建演示窗口,展示内置12号点阵字体的固定大小特性;
+2、演示数字、符号、中英文混排的显示效果;
+3、展示默认字体的特性和限制说明;
+4、提供返回主页的导航功能;
+
+本文件的对外接口有1个:
+1、default_font_page.create(ui):创建默认字体演示页面;
+]]
+local default_font_page = {}
+
+function default_font_page.create(ui)
+    local win = ui.window({ 
+        background_color = ui.COLOR_WHITE,
+        x = 0, y = 0, w = 800, h = 480
+    })
+    
+    -- 标题
+    local title = ui.label({
+        x = 280, y = 25,
+        text = "默认字体演示 - 12号点阵字体",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    -- 返回按钮
+    local btn_back = ui.button({
+        x = 20, y = 20,
+        w = 80, h = 35,
+        text = "返回",
+        on_click = function()
+            win:back()
+        end
+    })
+    
+    -- -- ==================== 左栏:字体基础演示 ====================
+    local left_column_x = 40
+    
+    local demo_title = ui.label({
+        x = left_column_x, y = 80,
+        text = "字体基础演示:",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    -- 数字演示
+    local number_demo = ui.label({
+        x = left_column_x, y = 110,
+        text = "数字演示:",
+        color = ui.COLOR_BLUE,
+        size = 12
+    })
+    
+    local number_content = ui.label({
+        x = left_column_x + 70, y = 110,
+        text = "0123456789",
+        color = ui.COLOR_BLUE,
+        size = 12
+    })
+    
+    -- 符号演示
+    local symbol_demo = ui.label({
+        x = left_column_x, y = 140,
+        text = "符号演示:",
+        color = ui.COLOR_RED,
+        size = 12
+    })
+    
+    local symbol_content = ui.label({
+        x = left_column_x + 70, y = 140,
+        text = "!@#$%^&*()_+-=[]{}|;:,.<>?/",
+        color = ui.COLOR_ORANGE,
+        size = 12
+    })
+    
+    -- 英文字母演示
+    local letter_demo = ui.label({
+        x = left_column_x, y = 170,
+        text = "英文字母:",
+        color = ui.COLOR_GREEN,
+        size = 12
+    })
+    
+    local letter_content = ui.label({
+        x = left_column_x + 70, y = 170,
+        text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+        color = ui.COLOR_RED,
+        size = 12
+    })
+    
+    -- 中文演示
+    local chinese_demo = ui.label({
+        x = left_column_x, y = 200,
+        text = "中文演示:",
+        color = ui.COLOR_MAGENTA,
+        size = 12
+    })
+    
+    local chinese_content = ui.label({
+        x = left_column_x + 70, y = 200,
+        text = "天地玄黄宇宙洪荒日月盈昃辰宿列张",
+        color = ui.COLOR_MAGENTA,
+        size = 12
+    })
+    
+    -- 中英文混排演示
+    local mix_demo = ui.label({
+        x = left_column_x, y = 230,
+        text = "中英文混排:",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    local mix_content = ui.label({
+        x = left_column_x + 70, y = 230,
+        text = "Hello 世界! ABC 123 测试 Test 演示 Demo",
+        color = ui.COLOR_BLUE,
+        size = 12
+    })
+    
+    -- 完整句子演示
+    local sentence_title = ui.label({
+        x = left_column_x, y = 270,
+        text = "完整句子演示:",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    local sentence1 = ui.label({
+        x = left_column_x, y = 290,
+        text = "LuatOS是合宙通信推出的开源嵌入式物联网操作系统",
+        color = ui.COLOR_GRAY,
+        size = 12
+    })
+    
+    local sentence2 = ui.label({
+        x = left_column_x, y = 310,
+        text = "默认字体为12号点阵字体,启动快速,资源占用小",
+        color = ui.COLOR_GRAY,
+        size = 12
+    })
+    
+    local sentence3 = ui.label({
+        x = left_column_x, y = 330,
+        text = "支持中英文、数字和常用符号的显示",
+        color = ui.COLOR_GRAY,
+        size = 12
+    })
+    
+    -- -- ==================== 右栏:字体特性说明 ====================
+    local right_column_x = 420
+    
+    local feature_title = ui.label({
+        x = right_column_x, y = 80,
+        text = "默认字体特性说明:",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    local feature1_title = ui.label({
+        x = right_column_x + 20, y = 120,
+        text = "-固定大小特性:",
+        color = ui.COLOR_BLUE,
+        size = 12
+    })
+    
+    local feature1_desc = ui.label({
+        x = right_column_x + 40, y = 140,
+        w = 300,
+        text = "内置12号点阵字体,字体大小固定为12号,不支持动态调整。",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    local feature2_title = ui.label({
+        x = right_column_x + 20, y = 170,
+        text = "-硬件要求:",
+        color = ui.COLOR_GREEN,
+        size = 12
+    })
+    
+    local feature2_desc = ui.label({
+        x = right_column_x + 40, y = 190,
+        w = 300,
+        text = "无需外部硬件支持,完全内置于系统中,启动即用。",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    local feature3_title = ui.label({
+        x = right_column_x + 20, y = 220,
+        text = "-性能优势:",
+        color = ui.COLOR_RED,
+        size = 12
+    })
+    
+    local feature3_desc = ui.label({
+        x = right_column_x + 40, y = 240,
+        w = 300,
+        text = "启动速度快,资源占用小,适合内存受限的嵌入式设备。",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    local feature4_title = ui.label({
+        x = right_column_x + 20, y = 270,
+        text = "-字符集支持:",
+        color = ui.COLOR_MAGENTA,
+        size = 12
+    })
+    
+    local feature4_desc = ui.label({
+        x = right_column_x + 40, y = 290,
+        w = 300,
+        text = "支持常用中文字符、英文字母、数字和符号的显示。",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })
+    
+    local feature5_title = ui.label({
+        x = right_column_x + 20, y = 320,
+        text = "-适用场景:",
+        color = ui.COLOR_ORANGE,
+        size = 12
+    })
+    
+    local feature5_desc = ui.label({
+        x = right_column_x + 40, y = 340,
+        w = 300,
+        text = "适用于需要快速启动、简单文本显示的应用场景。",
+        color = ui.COLOR_BLACK,
+        size = 12
+    })  
+   
+    -- 添加所有组件到窗口
+    win:add(title)
+    win:add(btn_back)
+    
+    -- -- 左栏组件
+    win:add(demo_title)
+    win:add(number_demo)
+    win:add(number_content)
+    win:add(symbol_demo)
+    win:add(symbol_content)
+    win:add(letter_demo)
+    win:add(letter_content)
+    win:add(chinese_demo)
+    win:add(chinese_content)
+    win:add(mix_demo)
+    win:add(mix_content)
+    win:add(sentence_title)
+    win:add(sentence1)
+    win:add(sentence2)
+    win:add(sentence3)
+    
+    -- 右栏组件
+    win:add(feature_title)
+    win:add(feature1_title)
+    win:add(feature1_desc)
+    win:add(feature2_title)
+    win:add(feature2_desc)
+    win:add(feature3_title)
+    win:add(feature3_desc)
+    win:add(feature4_title)
+    win:add(feature4_desc)
+    win:add(feature5_title)
+    win:add(feature5_desc)
+
+    
+    return win
+end
+
+return default_font_page

+ 207 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/gtfont_page.lua

@@ -0,0 +1,207 @@
+--[[
+@module  gtfont_page
+@summary GTFont矢量字体演示页面模块,展示AirFONTS_1000配件板字体功能
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本文件为GTFont矢量字体演示页面功能模块,核心业务逻辑为:
+1、创建带上下滚动功能的演示窗口,展示GTFont矢量字体特性;
+2、演示动态字体大小调整功能,展示的是16-48号字体切换,
+   GTFont支持10-192号字体,demo以展示GTFont特性为主;
+3、展示不同大小和颜色的数字、符号、中英文显示效果;
+4、提供GTFont特性说明和返回主页的导航功能;
+
+本文件的对外接口有1个:
+1、gtfont_page.create(ui):创建GTFont演示页面;
+]]
+
+local gtfont_page = {}
+local demo_state = {
+    current_size = 24
+}
+
+--[[
+创建GTFont矢量字体演示页面;
+
+@api gtfont_page.create(ui)
+@summary 创建GTFont矢量字体演示页面界面
+@table ui UI库对象
+@return table GTFont演示窗口对象
+
+@usage
+-- 在子页面工厂中调用创建GTFont演示页面
+local gtfont_page = require("gtfont_page").create(ui)
+]]
+function gtfont_page.create(ui)
+    local win = ui.window({ 
+        background_color = ui.COLOR_WHITE,
+        x = 0, y = 0, w = 800, h = 480
+    })
+    
+    -- 启用滚动以容纳更多内容
+    win:enable_scroll({
+        direction = "vertical",
+        content_height = 900,
+        threshold = 10
+    })
+    
+    -- 标题 - 增大字体并居中显示
+    local title = ui.label({
+        x = 200, y = 30,  -- 调整位置
+        text = "GTFont矢量字体演示",
+        color = ui.COLOR_BLACK,
+        size = 32
+    })
+    
+    -- 返回按钮 - 增大按钮尺寸
+    local btn_back = ui.button({
+        x = 30, y = 30,
+        w = 100, h = 50,
+        text = "返回主页",
+        size = 20,
+        on_click = function()
+            win:back()
+        end
+    })
+    
+    -- 动态字体大小演示区域
+    local dynamic_title = ui.label({
+        x = 50, y = 100,
+        text = "GTFont动态字体大小调整演示:",
+        color = ui.COLOR_BLACK,
+        size = 24
+    })
+    
+    -- 当前字体显示
+    local size_display = ui.label({
+        x = 50, y = 150,
+        text = "当前字体: 24号 蓝色矢量字体",
+        color = ui.COLOR_BLUE,
+        size = 24
+    })
+    
+    -- 字体大小控制按钮
+    local btn_increase = ui.button({
+        x = 50, y = 200,
+        w = 200, h = 50,
+        text = "点击切换字体大小 (16-48)",
+        size = 20,  
+        on_click = function()
+            demo_state.current_size = demo_state.current_size + 8 
+            if demo_state.current_size > 48 then
+                demo_state.current_size = 16  
+            end
+            -- 同时更新文本和大小
+            size_display:set_text("当前字体: " .. demo_state.current_size .. "号 蓝色矢量字体")
+            size_display:set_size(demo_state.current_size)
+        end
+    })
+    
+    -- 字体演示标题
+    local demo_title = ui.label({
+        x = 50, y = 280,
+        text = "字体效果演示:",
+        color = ui.COLOR_BLACK,
+        size = 28
+    })
+    
+    -- 数字演示 - 蓝色
+    local number_demo = ui.label({
+        x = 50, y = 330,
+        text = "1、数字演示: 0123456789",
+        color = ui.COLOR_BLUE,
+        size = 22  
+    })
+    
+    -- 符号演示 - 橙色
+    local symbol_demo = ui.label({
+        x = 50, y = 380,
+        text = "2、符号演示: !@#$%^&*()_+-=[]{}|;:,.<>?/~`",
+        color = ui.COLOR_ORANGE,
+        size = 26
+    })
+    
+    -- 中英文演示 - 红色,增大字体
+    local text_demo = ui.label({
+        x = 50, y = 440,
+        text = "3、中英文演示: LuatOS 嵌入式系统",
+        color = ui.COLOR_RED,
+        size = 36
+    })
+    
+    -- 中文演示 - 绿色
+    local chinese_demo = ui.label({
+        x = 50, y = 500,
+        text = "4、中文演示: 矢量字体显示效果测试",
+        color = ui.COLOR_GREEN,
+        size = 32
+    })
+    
+    -- GTFont特性说明
+    local feature_title = ui.label({
+        x = 50, y = 580,
+        text = "GTFont矢量字体特性:",
+        color = ui.COLOR_BLACK,
+        size = 28
+    })
+    
+    -- 特性说明使用增大字体
+    local feature1 = ui.label({
+        x = 70, y = 630,
+        text = "-使用AirFONTS_1000配件板",
+        color = ui.COLOR_DARK_GRAY,
+        size = 20  
+    })
+    
+    local feature2 = ui.label({
+        x = 70, y = 670,
+        text = "-支持10到192号的黑体矢量字体",
+        color = ui.COLOR_DARK_GRAY,
+        size = 20
+    })
+    
+    local feature3 = ui.label({
+        x = 70, y = 710,
+        text = "-支持GBK中文和ASCII码字符集",
+        color = ui.COLOR_DARK_GRAY,
+        size = 20
+    })
+    
+    local feature4 = ui.label({
+        x = 70, y = 750,
+        text = "-支持灰度显示,字体边缘更平滑",
+        color = ui.COLOR_DARK_GRAY,
+        size = 20
+    })
+    
+    local feature5 = ui.label({
+        x = 70, y = 790,
+        text = "-无级缩放,任意大小都清晰",
+        color = ui.COLOR_DARK_GRAY,
+        size = 20
+    })
+    
+    
+    -- 添加所有组件到窗口
+    win:add(title)
+    win:add(btn_back)
+    win:add(dynamic_title)
+    win:add(size_display)
+    win:add(btn_increase)
+    win:add(demo_title)
+    win:add(number_demo)
+    win:add(symbol_demo)
+    win:add(text_demo)
+    win:add(chinese_demo)
+    win:add(feature_title)
+    win:add(feature1)
+    win:add(feature2)
+    win:add(feature3)
+    win:add(feature4)
+    win:add(feature5)
+    
+    return win
+end
+
+return gtfont_page

+ 142 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/home_page.lua

@@ -0,0 +1,142 @@
+--[[
+@module  home_page
+@summary 主页模块,提供应用主界面和页面导航功能
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本文件为主页功能模块,核心业务逻辑为:
+1、创建应用主窗口并配置背景颜色;
+2、配置子页面工厂函数,管理各演示页面的创建;
+3、创建标题和功能按钮,提供页面导航功能;
+4、处理按钮点击事件,实现页面切换;
+
+本文件的对外接口有1个:
+1、home_page.create():创建主页界面;
+]]
+
+local home_page = {}
+
+--[[
+创建主页界面;
+
+@api home_page.create()
+@summary 创建并配置应用主页面
+@return nil
+
+@usage
+-- 在UI主程序中调用创建主页
+home_page.create()
+]]
+
+function home_page.create()
+    -- 创建主页 - 使用全屏
+    local home = ui.window({ 
+        background_color = ui.COLOR_WHITE,
+        x = 0, y = 0, w = 800, h = 480  -- 全屏窗口
+    })
+    home.visible = true
+
+    -- 配置子页面工厂
+    home:configure_subpages({
+        component = function() return require("component_page").create(ui) end,
+        default_font = function() return require("default_font_page").create(ui) end,
+        gtfont = function() return require("gtfont_page").create(ui) end,
+        hzfont = function() return require("hzfont_page").create(ui) end
+    })
+
+    -- 标题 - 居中显示
+    local title = ui.label({
+        x = 325,           -- 居中计算: (800 - 文字宽度)/2,近似值
+        y = 50,
+        text = "exEasyUI演示系统",
+        color = ui.COLOR_BLACK,
+        size = 20          -- 增大字号
+    })
+
+    local subtitle = ui.label({
+        x = 280,           -- 居中显示
+        y = 80,
+        text = "基于exEasyUI v1.7.0开发 - 800*480分辨率",
+        color = ui.COLOR_GRAY,
+        size = 14
+    })
+
+    -- 按钮布局 - 使用800宽度的新布局
+    local btn_width = 340  -- 按钮宽度增大
+    local btn_height = 60  -- 按钮高度增大
+    local btn_x = 40       -- 左侧起始位置
+    local btn_spacing = 70 -- 按钮间距
+
+    -- 组件演示按钮
+    local btn_component = ui.button({
+        x = btn_x,
+        y = 150,
+        w = btn_width,
+        h = btn_height,
+        text = "组件演示",
+        bg_color = ui.COLOR_BLUE,
+        text_color = ui.COLOR_WHITE,
+        font_size = 16,    -- 增大按钮文字
+        on_click = function()
+            home:show_subpage("component")
+        end
+    })
+
+    -- 默认字体演示按钮
+    local btn_default_font = ui.button({
+        x = btn_x + btn_width + 40,  -- 右侧按钮
+        y = 150,
+        w = btn_width,
+        h = btn_height,
+        text = "默认字体演示",
+        bg_color = ui.COLOR_RED,
+        text_color = ui.COLOR_WHITE,
+        font_size = 16,
+        on_click = function()
+            home:show_subpage("default_font")
+        end
+    })
+
+    -- GTFont演示按钮
+    local btn_gtfont = ui.button({
+        x = btn_x,
+        y = 150 + btn_height + btn_spacing,
+        w = btn_width,
+        h = btn_height,
+        text = "GTFont演示",
+        bg_color = ui.COLOR_GREEN,
+        text_color = ui.COLOR_WHITE,
+        font_size = 16,
+        on_click = function()
+            home:show_subpage("gtfont")
+        end
+    })
+
+    -- HZFont演示按钮
+    local btn_hzfont = ui.button({
+        x = btn_x + btn_width + 40,
+        y = 150 + btn_height + btn_spacing,
+        w = btn_width,
+        h = btn_height,
+        text = "HZFont演示",
+        bg_color = ui.COLOR_ORANGE,
+        text_color = ui.COLOR_WHITE,
+        font_size = 16,
+        on_click = function()
+            home:show_subpage("hzfont")
+        end
+    })
+
+    -- 添加所有组件到窗口
+    home:add(title)
+    home:add(subtitle)
+    home:add(btn_component)
+    home:add(btn_default_font)
+    home:add(btn_gtfont)
+    home:add(btn_hzfont)
+
+    ui.add(home)
+end
+
+return home_page

+ 45 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/hzfont_page.lua

@@ -0,0 +1,45 @@
+--[[
+@module  hzfont_page
+@summary HZFont矢量字体演示页面模块,Air8101  HZFont矢量字体正在开发中
+@version 1.0
+@date    2025.12.2
+@author  适配修改
+@usage
+本文件为HZFont矢量字体演示页面预留模块
+]]
+
+local hzfont_page = {}
+
+function hzfont_page.create(ui)
+    local win = ui.window({ 
+        background_color = ui.COLOR_WHITE,
+        x = 0, y = 0, w = 800, h = 480
+    })
+    
+   
+    -- 标题
+    local title = ui.label({
+        x = 300, y = 25,
+        text = "HZFont矢量字体目前正在开发中。。。",
+        color = ui.COLOR_BLACK,
+        size = 20
+    })
+ -- 返回按钮
+    local btn_back = ui.button({
+        x = 20, y = 20,
+        w = 80, h = 40,
+        text = "返回",
+        font_size = 14,
+        on_click = function()
+            win:back()
+        end
+    })
+    
+    -- 添加所有组件到窗口
+    win:add(title)
+    win:add(btn_back)
+    
+    return win
+end
+
+return hzfont_page

+ 36 - 0
module/Air8101/demo/accessory_board/AirLCD_1020/exeasyui/ui/ui_main.lua

@@ -0,0 +1,36 @@
+--[[
+@module  home_page
+@summary 主页模块,基于exEasyUI实现
+@version 1.0
+@date    2025.12.2
+@author  江访
+@usage
+本文件为exeasyui主程序模块,核心业务逻辑为:
+1、设置主题为浅色;
+2、进入演示主页面;
+3、启用主循环;
+
+本文件没有对外接口;
+
+]]
+
+
+
+local home_page = require("home_page")
+
+-- 启动UI主任务
+local function ui_main()
+
+    -- 初始化UI主题
+    ui.sw_init({ theme = "light" })
+    
+    home_page.create()
+
+    -- 主渲染循环
+    while true do
+        ui.refresh()
+        sys.wait(30)
+    end
+end
+
+sys.taskInit(ui_main)