Răsfoiți Sursa

update:更新Air8101搭配AirLCD_1020使用lcd核心库开发demo

江访 1 lună în urmă
părinte
comite
656ac0a0b6

+ 64 - 15
module/Air8101/demo/accessory_board/AirLCD_1020/lcd/main.lua

@@ -1,3 +1,20 @@
+--[[
+@module  main
+@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
+@version 1.0
+@date    2025.12.1
+@author  江访
+@usage
+本demo演示的核心功能为:
+1、LCD显示屏驱动初始化,支持多种LCD驱动模式;
+2、触摸面板驱动初始化,支持多种触摸驱动模式;
+3、字库驱动管理,支持外部矢量字库、内部软件矢量字库和外部自定义点阵字库;
+4、用户界面主循环,实现多页面切换和触摸事件处理;
+5、系统看门狗配置,确保系统稳定运行;
+
+更多说明参考本目录下的readme.md文件
+]]
+
 --[[
 必须定义PROJECT和VERSION变量,Luatools工具会用到这两个变量,远程升级功能也会用到这两个变量
 PROJECT:项目名,ascii string类型
@@ -7,18 +24,19 @@ VERSION:项目版本号,ascii string类型
             X、Y、Z各表示1位数字,三个X表示的数字可以相同,也可以不同,同理三个Y和三个Z表示的数字也是可以相同,可以不同
             因为历史原因,YYY这三位数字必须存在,但是没有任何用处,可以一直写为000
         如果不使用合宙iot.openluat.com进行远程升级,根据自己项目的需求,自定义格式即可
-
-AirLCD_1020是合宙设计生产的一款5寸RGB888接口800*480分辨率的电容触摸显示屏配件板
-本demo演示的核心功能为:
-Air8101核心板+AirLCD_1020配件板,使用lcd图形库函数演示UI显示和触摸功能;
-更多说明参考本目录下的readme.md文件
 ]]
-PROJECT = "AirLCD_1020_LCD"
-VERSION = "001.000.000"
 
+-- main.lua - 程序入口文件
+
+-- 定义项目名称和版本号
+PROJECT = "ui_demo" -- 项目名称
+VERSION = "001.000.000"    -- 版本号
 
 -- 在日志中打印项目名和项目版本号
-log.info("main", PROJECT, VERSION)
+log.info("ui_demo", PROJECT, VERSION)
+
+-- 设置日志输出风格为样式2(建议调试时开启)
+-- log.style(2)
 
 -- 如果内核固件支持wdt看门狗功能,此处对看门狗进行初始化和定时喂狗处理
 -- 如果脚本程序死循环卡死,就会无法及时喂狗,最终会自动重启
@@ -51,15 +69,46 @@ end
 -- sys.timerLoopStart(function()
 --     log.info("mem.lua", rtos.meminfo())
 --     log.info("mem.sys", rtos.meminfo("sys"))
---  end, 3000)
+-- end, 3000)
+
+
+-- 加载显示屏驱动管理功能模块,有以下两种:
+-- 1、使用lcd核心库驱动的lcd_drv.lua
+-- 2、使用exlcd扩展库驱动的exlcd_drv.lua
+-- 根据自己的需求,启用两者中的任何一种都可以
+-- 也可以不启用任何一种,不使用显示屏功能
+lcd_drv = require "lcd_drv"
+-- lcd_drv = require "exlcd_drv"
+
+
+-- 加载触摸面板驱动管理功能模块,有以下两种:
+-- 1、使用tp核心库驱动的tp_drv.lua
+-- 2、使用extp扩展库驱动的extp_drv.lua
+-- 根据自己的需求,启用两者中的任何一种都可以
+-- 也可以不启用任何一种,不使用触摸面板功能
+tp_drv = require "tp_drv"
+-- tp_drv = require "extp_drv"
+
+
+-- 加载字库驱动管理功能模块,有以下三种:
+-- 1、使用gtfont核心库驱动AirFONTS_1000矢量字库配件板的gtfont_drv.lua
+-- 2、使用hzfont核心库驱动内核固件中支持的软件矢量字库的hzfont_drv.lua(正在开发中,后续补充)
+-- 3、使用自定义字体(正在开发中,后续补充)
+-- 根据自己的需求,启用三者中的任何几种都可以
+-- 也可以不启用任何一种,只使用内核固件中自带的点阵字库
+require "gtfont_drv"
+
+
+-- 加载输入法驱动管理功能模块(正在开发中,后续补充)
+
 
--- 加载lcd显示应用模块
-require "lcd_app"
--- 加载lcd全屏刷新jpg图片速率测试应用模块(和require "lcd_app"有冲突,不能同时打开)
--- require "lcd_jpg_fps"
+-- 加载lcd核心库实现的用户界面功能模块
+-- 实现多页面切换、触摸事件分发和界面渲染功能
+-- 包含主页、lcd核心库功能演示页、GTFont演示页和自定义字体演示页
+require "ui_main"
 
 
--- 用户代码已结束---------------------------------------------
+-- 用户代码已结束
 -- 结尾总是这一句
 sys.run()
--- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行
+-- sys.run()之后不要加任何语句!!!!!因为添加的任何语句都不会被执行

+ 279 - 100
module/Air8101/demo/accessory_board/AirLCD_1020/lcd/readme.md

@@ -1,105 +1,284 @@
+# LCD、触摸与字体演示系统
+
+## 一、功能模块介绍
+
+### 1.1 核心主程序模块
+1. **main.lua** - 主程序入口,负责系统初始化和任务调度
+2. **ui_main.lua** - 用户界面主控模块,管理页面切换和事件分发
+
+### 1.2 显示页面模块
+3. **home_page.lua** - 主页模块,提供应用入口和导航功能
+4. **lcd_page.lua** - LCD图形绘制演示模块
+5. **gtfont_page.lua** - GTFont矢量字体演示模块
+6. **customer_font_page.lua** - 自定义字体演示模块(目前仅预留相关页面,未有实际功能演示)
+
+### 1.3 驱动模块
+7. **lcd_drv.lua** - LCD显示驱动模块,基于lcd核心库,lcd_drv和exlcd_drv二选一使用
+8. **exlcd_drv.lua** - LCD显示驱动模块,基于exlcd扩展库,lcd_drv和exlcd_drv二选一使用
+9. **tp_drv.lua** - 触摸驱动模块,基于tp核心库,tp_drv和extp_drv二选一使用
+10. **extp_drv.lua** - 触摸驱动模块,基于extp扩展库,tp_drv和extp_drv二选一使用
+11. **gtfont_drv.lua** - GTFont矢量字库驱动模块
+12. **customer_font_drv.lua** - 自定义外部字体驱动功能模块(开发中)
+13. **hzfont_drv.lua** - 合宙软件矢量字库(开发中)
+    - gtfongt_drv、customer_font_drv、hzfont_drv
+    - 可以都不启用
+    - 可以仅启用一种
+    - 可以启用任意两种
+    - 可以全部启用
+
+## 二、触摸消息介绍
+
+1. **"BASE_TOUCH_EVENT"** - 基础触摸事件消息,包含触摸坐标和事件类型
+   - tp触摸库事件类型:`tp.EVENT_DOWN`(按下)、`tp.EVENT_MOVE`(移动)、`tp.EVENT_UP`(抬起)
+   - extp触摸库事件类型:`SINGLE_TAP`(单击)、`LONG_PRESS`(长按)可根据UI需求打开滑动事件
+   - 坐标范围:X: 0-799,Y: 0-479
+
+## 三、显示效果
+
+<table>
+<tr>
+<td>主页<br/></td><td>lcd核心库页面<br/></td><td>gtfont页面<br/></td></tr>
+<tr>
+<td rowspan="2"><img src="https://docs.openluat.com/cdn/image/Air8101_AirLCD_1020_AirFONTS_1000演示主页.png" width="80" /><br/></td><td rowspan="2"><img src="https://docs.openluat.com/cdn/image/Air8101_AirLCD_1020_AirFONTS_1000演示lcd页.png" width="80" /><br/></td></tr><td rowspan="2"><img src="https://docs.openluat.com/cdn/image/Air8101_AirLCD_1020_AirFONTS_1000演示GTFont页.png" width="80" /><br/></td></tr>
+</table>
+
+
+## 四、演示功能概述
+
+### 4.1 LCD图形绘制演示
+1. **基本图形绘制** - 展示点、线、矩形、圆形等基本图形绘制功能
+2. **图片显示** - 支持外部图片文件显示
+3. **二维码生成** - 动态生成并显示二维码
+4. **颜色示例** - 展示多种颜色显示效果
+
+### 4.2 GTFont矢量字体演示
+1. **矢量字体显示** - 使用AirFONTS_1000矢量字库小板显示平滑字体
+2. **字体大小切换** - 支持10-192号字体大小动态变化
+3. **灰度模式** - 支持灰度显示模式,字体边缘更平滑
+4. **多颜色显示** - 支持多种颜色字体显示
+
+### 4.3 触摸交互功能
+1. **页面导航** - 支持多页面之间的切换
+2. **按钮响应** - 触摸按钮的点击响应功能
+3. **模式切换** - 支持gtfont切换灰度/常规显示
+
+## 五、演示硬件环境
+
+### 5.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 一端),此种供电方式下,vbat 引脚为 3.3V,可以直接给 AirLCD_1020配件板和AirFONTS_1000 配件板供电;
+  - 为了演示方便,所以 Air8101 核心板上电后直接通过 vbat 引脚给 AirLCD_1020配件板和AirFONTS_1000 配件板提供了 3.3V 的供电;
+  - 客户在设计实际项目时,一般来说,需要通过一个GPIO来控制LDO给LCD和TP供电,这样可以灵活地控制供电,可以使项目的整体功耗降到最低;
+  - 核心板和配件板之间配备了双排40PIN的双头线,可以参考下表很方便地连接双方各自的40个管脚,插入或者拔出双头线时,要慢慢的操作,防止将排针折弯;
+  
+### 5.2 接线配置
+
+#### 5.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>
+
+#### 5.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>
+
+#### 5.2.3 接线图
+![](https://docs.openLuat.com/cdn/image/Air8101_AirLCD_1020_AirFONTS_1000接线图.jpg)
+
+## 六、演示软件环境
+
+### 6.1 开发工具
+
+- [Luatools下载调试工具](https://docs.openluat.com/air8101/luatos/common/download/) - 固件烧录和代码调试
+
+### 6.2 内核固件
+
+- [点击下载Air8101最新版本内核固件](https://docs.openluat.com/air8101/luatos/firmware/),demo所使用的是LuatOS-SoC_V1006_Air8101 1号固件
+
+
+## 七、演示核心步骤
+
+### 7.1 硬件准备
+1. 按照硬件接线表连接所有设备
+2. 确保电源连接正确,通过TYPE-C USB口供电
+3. 检查所有接线无误,避免短路
+
+### 7.2 软件配置
+在`main.lua`中选择加载对应的驱动模块:
+
+```lua
+-- 加载显示屏驱动管理功能模块,有以下两种:
+-- 1、使用lcd核心库驱动的lcd_drv.lua
+-- 2、使用exlcd扩展库驱动的exlcd_drv.lua
+-- 根据自己的需求,启用两者中的任何一种都可以
+-- 也可以不启用任何一种,不使用显示屏功能
+lcd_drv = require "lcd_drv"
+-- lcd_drv = require "exlcd_drv"
+
+
+-- 加载触摸面板驱动管理功能模块,有以下两种:
+-- 1、使用tp核心库驱动的tp_drv.lua
+-- 2、使用extp扩展库驱动的extp_drv.lua
+-- 根据自己的需求,启用两者中的任何一种都可以
+-- 也可以不启用任何一种,不使用触摸面板功能
+tp_drv = require "tp_drv"
+-- tp_drv = require "extp_drv"
+
+
+-- 加载字库驱动管理功能模块,有以下三种:
+-- 1、使用gtfont核心库驱动AirFONTS_1000矢量字库配件板的gtfont_drv.lua
+-- 2、使用hzfont核心库驱动内核固件中支持的软件矢量字库的hzfont_drv.lua(正在开发中,后续补充)
+-- 3、使用自定义字体(正在开发中,后续补充)
+-- 根据自己的需求,启用三者中的任何几种都可以
+-- 也可以不启用任何一种,只使用内核固件中自带的点阵字库
+require "gtfont_drv"
+
+
+-- 加载输入法驱动管理功能模块(正在开发中,后续补充)
+
+
+-- 加载lcd核心库实现的用户界面功能模块
+-- 实现多页面切换、触摸事件分发和界面渲染功能
+-- 包含主页、lcd核心库功能演示页、GTFont演示页和自定义字体演示页
+require "ui_main"
+```
+
+### 7.3 软件烧录
+1. 使用Luatools烧录最新内核固件
+2. 下载本项目所有脚本文件和图片文件
+3. 将图片文件和脚本文件一起烧录到脚本分区
+4. 烧录完成后,设备自动重启后开始运行
+
+### 7.4 功能测试
+
+#### 7.4.1 主页面操作
+1. 设备启动后显示主页面,包含三个功能按钮
+2. 查看系统功能概览信息
+3. 点击各功能按钮进入对应演示页面
+
+#### 7.4.2 LCD演示页面
+1. 查看基本图形绘制示例(点、线、矩形、圆形)
+2. 查看图片显示区域(显示logo图片)
+3. 查看二维码区域(合宙文档二维码)
+4. 查看颜色填充示例展示
+5. 查看位图和英文字体演示
+6. 点击"返回"按钮回到主页
 
-## 演示功能概述
+#### 7.4.3 GTFont演示页面
+1. 计时阶段,gtfont说明显示
+2. 字体大小变化阶段,查看10-192号字体动态变化
+3. 点击"灰度/常规"切换按钮,体验不同显示模式
+4. 查看多颜色字体显示效果
+5. 点击"返回"按钮回到主页
 
-AirLCD_1020是合宙设计生产的一款5寸RGB888接口800*480分辨率的电容触摸显示屏配件板
+### 7.5 预期效果
 
-本demo演示的核心功能为:
+- **主页面**:正常显示,三个功能按钮响应灵敏
+- **LCD演示页面**:图形绘制清晰,图片和二维码显示正常,颜色示例完整
+- **GTFont演示页面**:字体显示平滑,字号切换流畅,灰度模式切换正常
+- **触摸交互**:所有触摸操作响应及时准确,页面切换流畅
 
-Air8101核心板+AirLCD_1020配件板,使用lcd图形库函数演示UI显示和触摸功能;
-
-
-## 核心板+配件板资料
-
-[Air8101核心板+配件板相关资料](https://docs.openluat.com/air8101/product/shouce/#air8101_1)
-
-
-## 演示硬件环境
-
-![](https://docs.openluat.com/air8101/product/file/AirLCD_1020/hw_connection.jpg)
-
-1、Air8101核心板
-
-2、AirLCD_1020配件板
-
-3、双排40PIN的双头线
-
-4、Air8101核心板和AirGPIO_1000配件板的硬件接线方式为
-
-- Air8101核心板通过TYPE-C USB口供电(核心板背面的功耗测试开关拨到OFF一端);如果测试发现软件重启,并且日志中出现  poweron reason 0,表示供电不足,此时再通过直流稳压电源对核心板的VIN管脚进行5V供电;
-
-- 为了演示方便,所以Air8101核心板上电后直接通过vbat引脚给AirLCD_1020配件板提供了3.3V的供电;
-
-- 客户在设计实际项目时,一般来说,需要通过一个GPIO来控制LDO给LCD和TP供电,这样可以灵活地控制供电,可以使项目的整体功耗降到最低;
-
-- 核心板和配件板之间配备了双排40PIN的双头线,可以参考下表很方便地连接双方各自的40个管脚,插入或者拔出双头线时,要慢慢的操作,防止将排针折弯;
-
-| Air8101核心板 | AirLCD_1020配件板 |
-| ------------ | ------------------ |
-|     gnd      |         GND        |
-|     vbat     |         VCC        |
-|    42/R0     |        RGB_R0      |
-|    40/R1     |        RGB_R1      |
-|    43/R2     |        RGB_R2      |
-|    39/R3     |        RGB_R3      |
-|    44/R4     |        RGB_R4      |
-|    38/R5     |        RGB_R5      |
-|    45/R6     |        RGB_R6      |
-|    37/R7     |        RGB_R7      |
-|    46/G0     |        RGB_G0      |
-|    36/G1     |        RGB_G1      |
-|    47/G2     |        RGB_G2      |
-|    35/G3     |        RGB_G3      |
-|    48/G4     |        RGB_G4      |
-|    34/G5     |        RGB_G5      |
-|    49/G6     |        RGB_G6      |
-|    33/G7     |        RGB_G7      |
-|    50/B0     |        RGB_B0      |
-|    32/B1     |        RGB_B1      |
-|    51/B2     |        RGB_B2      |
-|    31/B3     |        RGB_B3      |
-|    52/B4     |        RGB_B4      |
-|    30/B5     |        RGB_B5      |
-|    53/B6     |        RGB_B6      |
-|    29/B7     |        RGB_B7      |
-|   28/DCLK    |       RGB_DCLK     |
-|   54/DISP    |       RGB_DISP     |
-|   55/HSYN    |       RGB_HSYNC    |
-|   56/VSYN    |       RGB_VSYNC    |
-|    57/DE     |        RGB_DE      |
-|   14/GPIO8   |        LCD_BL      |
-|   13/GPIO9   |        LCD_RST     |
-|    8/GPIO5   |        LCD_SDI     |
-|    9/GPIO6   |        LCD_SCL     |
-|  68/GPIO12   |        LCD_CS      |
-|  75/GPIO28   |        TP_RST      |
-|   10/GPIO7   |        TP_INT      |
-|   12/U1TX    |        TP_SCL      |
-|   11/U1RX    |        TP_SDA      |
-
-
-
-## 演示软件环境
-
-1、Luatools下载调试工具
-
-2、[LuatOS-SoC_V1004_Air8101_20250527_085719.soc以及之后的固件都可以,如果打开这个网页,还没有合适的固件,联系合宙销售同事获取](https://docs.openluat.com/air8101/luatos/firmware/)
-
-
-## 演示操作步骤
-
-1、搭建好演示硬件环境
-
-2、不需要修改demo脚本代码
-
-3、Luatools烧录内核固件和demo脚本代码
-
-4、烧录成功后,自动开机运行
-
-   (1) lcd上可以全屏显示一张图片,表示lcd显示功能正常;
-
-   (2) 在触摸面板(注意:将触摸面板上的塑料膜撕掉)上,使用手指按下后,所按的位置会出现一个不太规则并且也没有全部填充的红色实心圆,表示触摸功能正常; 
-
-   (3) 每隔10秒钟,会自动刷屏,清空红色实心圆;  
-
-5、[点击此处观看演示视频](https://docs.openluat.com/air8101/product/file/AirLCD_1020/lcd.mp4)
+### 7.6 故障排除
 
+1. **显示异常**:检查LCD接线是否正确,确认电源供电稳定
+2. **触摸无响应**:检查I2C接线,确认触摸芯片初始化成功
+3. **字体显示异常**:检查SPI接线(如使用GTFont)
+4. **图片无法显示**:确认图片文件已正确烧录到指定路径
+5. **系统卡顿**:检查内存使用情况,适当调整刷新频率