Procházet zdrojové kódy

update:更新Air780EHX系列适配AirLCD_1010 demo

江访 před 3 měsíci
rodič
revize
eb3a4a5076

+ 6 - 2
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1010/lcd/readme.md

@@ -51,7 +51,8 @@
 1. **基本图形绘制** - 展示点、线、矩形、圆形等基本图形绘制功能
 2. **图片显示** - 支持外部图片文件显示
 3. **二维码生成** - 动态生成并显示二维码
-4. **颜色示例** - 展示多种颜色显示效果
+4. **xbm格式位图示例** - 显示16*16 xbm点阵
+5. **中文、英文字体示例** - 显示12号中文字体和英文字体
 
 ### 4.2 GTFont矢量字体演示
 1. **矢量字体显示** - 使用AirFONTS_1000矢量字库小板显示平滑字体
@@ -98,6 +99,9 @@
 <tr> <td>Air780EHM/Air780EHV/Air780EGH 核心板</td><td>AirFONT_1000配件板</td></tr> <tr> <td>83/SPI0_CS</td><td>CS</td></tr> <tr> <td>84/SPI0_MISO</td><td>MISO</td></tr> <tr> <td>85/SPI0_MOSI</td><td>MOSI</td></tr> <tr> <td>86/SPI0_CLK</td><td>CLK</td></tr> <tr> <td>24/VDD_EXT</td><td>VCC</td></tr> 
 </table>
 
+#### 5.2.3 接线图
+![](https://docs.openLuat.com/cdn/image/Air780EHV_AirLCD_10010_AirFONTS_1000接线图.jpg)
+
 ## 六、演示软件环境
 
 ### 6.1 开发工具
@@ -185,7 +189,7 @@ require "ui_main"
 1. 查看基本图形绘制示例(点、线、矩形、圆形)
 2. 查看图片显示区域(显示logo图片)
 3. 查看二维码区域(合宙文档二维码)
-4. 查看颜色填充示例展示
+4. 查看位图和字体示例
 5. 点击"返回"按钮回到主页
 
 #### 7.4.3 GTFont演示页面

+ 12 - 6
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1010/lcd/ui/home_page.lua

@@ -17,6 +17,11 @@
 
 local home_page = {}
 
+-- 屏幕尺寸
+local width, height = lcd.getSize()
+
+local center_x = width / 2
+
 -- 按钮区域定义
 local buttons = {
     lcd_page = { x1 = 10, y1 = 350, x2 = 100, y2 = 420 },
@@ -39,19 +44,20 @@ function home_page.draw()
     lcd.clear()
     lcd.setColor(0xFFFF, 0x0000)
     lcd.setFont(lcd.font_opposansm12_chinese)
-    
+
     -- 显示标题
-    -- 后续会新增lcd.getStrWidth(title)接口获取文本宽度,对齐,居中,换行可使用
+    -- 后续V2020版本以上支持lcd核心库的固件会新增lcd.getStrWidth(title)接口获取文本宽度,对齐、居中、换行可使用
+    -- lcd.drawStr(center_x - lcd.getStrWidth(title) / 2, 50, title, 0x0000) -- 自动居中
     lcd.drawStr(106, 50, title, 0x0000)
 
     -- 显示说明文字
     lcd.drawStr(46, 68, content1, 0x0000)
-    
+
     -- 绘制LCD演示按钮
     lcd.fill(buttons.lcd_page.x1, buttons.lcd_page.y1,
         buttons.lcd_page.x2, buttons.lcd_page.y2, 0x001F)
     lcd.drawStr(15, 390, "lcd核心库演示", 0xFFFF)
-    
+
     -- 绘制GTFont演示按钮
     lcd.fill(buttons.gtfont_page.x1, buttons.gtfont_page.y1,
         buttons.gtfont_page.x2, buttons.gtfont_page.y2, 0xF800)
@@ -69,7 +75,7 @@ end
 
 @api home_page.handle_touch(x, y, switch_page)
 @number x 触摸点X坐标,范围0-319
-@number y 触摸点Y坐标,范围0-479  
+@number y 触摸点Y坐标,范围0-479
 @function switch_page 页面切换回调函数
 @return boolean 事件处理成功返回true,否则返回false
 ]]
@@ -98,4 +104,4 @@ function home_page.handle_touch(x, y, switch_page)
     return false
 end
 
-return home_page
+return home_page

+ 98 - 43
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1010/lcd/ui/lcd_page.lua

@@ -18,7 +18,7 @@
 local lcd_page = {}
 
 -- 按钮区域定义
-local back_button = {x1 = 10, y1 = 10, x2 = 80, y2 = 50}
+local back_button = { x1 = 10, y1 = 10, x2 = 80, y2 = 50 }
 
 --[[
 绘制LCD演示页面;
@@ -30,56 +30,111 @@ local back_button = {x1 = 10, y1 = 10, x2 = 80, y2 = 50}
 function lcd_page.draw()
     lcd.clear()
     lcd.setFont(lcd.font_opposansm12_chinese)
-    
+
     -- 绘制返回按钮
     lcd.fill(back_button.x1, back_button.y1, back_button.x2, back_button.y2, 0xC618)
     lcd.setColor(0x07E0, 0x0000)
     lcd.drawStr(35, 35, "返回", 0x0000)
-    
     -- 设置默认颜色
     lcd.setColor(0xFFFF, 0x0000)
-    
+
     -- 显示标题
-    lcd.drawStr(124, 20 + 12, "lcd核心库演示", 0x0000)
-    
-    -- 绘制各种图形
-    lcd.drawStr(20, 60 + 12, "基本图形绘制:", 0x0000)
-    
+    lcd.drawStr(120, 33, "LCD核心库演示", 0x0000)
+    lcd.drawLine(20, 55, 300, 55, 0x8410)
+
+    -- === 第一区域:基本图形 ===
+    lcd.drawStr(20, 75, "基本图形绘制:", 0x0000)
+
     -- 绘制点
-    lcd.drawPoint(30, 100, 0xFCC0)
-    lcd.drawPoint(40, 100, 0x07E0)
-    lcd.drawPoint(50, 100, 0x001F)
-    
+    lcd.drawStr(30, 98, "点:", 0x0000)
+    lcd.drawPoint(55, 98, 0xFCC0)
+    lcd.drawPoint(65, 98, 0x07E0)
+    lcd.drawPoint(75, 98, 0x001F)
+
     -- 绘制线
-    lcd.drawLine(70, 90, 150, 90, 0xFCC0)
-    lcd.drawLine(70, 100, 150, 110, 0x07E0)
-    lcd.drawLine(70, 110, 150, 90, 0x001F)
-    
-    -- 绘制矩形
-    lcd.drawRectangle(170, 90, 220, 120, 0x7296)
-    lcd.fill(230, 90, 280, 120, 0x07E0)
-    
-    -- 绘制圆
-    lcd.drawCircle(100, 180, 25, 0x001F)
-    lcd.drawCircle(180, 180, 25, 0xFCC0)
-    
-    -- 显示图片示例文字
-    lcd.drawStr(20, 220 + 12, "图片显示区域", 0x0000)
-    lcd.drawRectangle(20, 240, 150, 370, 0x0000)
-    lcd.showImage(45, 265, "/luadb/logo.jpg")
-    
-    -- 显示二维码示例文字
-    lcd.drawStr(170, 220 + 12, "二维码区域", 0x0000)
-    lcd.drawRectangle(170, 240, 300, 370, 0x0000)
-    lcd.drawQrcode(185, 255, "https://docs.openluat.com/air8000/", 100)
-    
-    -- 显示颜色示例
-    lcd.drawStr(20, 390 + 12, "颜色示例:", 0x0000)
-    lcd.fill(100, 390, 120, 410, 0xF800)
-    lcd.fill(130, 390, 150, 410, 0x07E0)
-    lcd.fill(160, 390, 180, 410, 0x001F)
-    lcd.fill(190, 390, 210, 410, 0xFCC0)
-    lcd.fill(220, 390, 240, 410, 0x0000)
+    lcd.drawStr(30, 125, "线:", 0x0000)
+    lcd.drawLine(55, 113, 115, 113, 0xFCC0)
+    lcd.drawLine(55, 118, 115, 123, 0x07E0)
+    lcd.drawLine(55, 123, 115, 118, 0x001F)
+
+    -- 绘制矩形(预留右侧空间)
+    lcd.drawStr(30, 160, "矩形:", 0x0000)
+    lcd.drawRectangle(65, 138, 105, 163, 0x7296)
+    lcd.fill(120, 138, 160, 163, 0x07E0)
+
+    -- 绘制圆(预留右侧空间)
+    lcd.drawStr(30, 200, "圆形:", 0x0000)
+    lcd.drawCircle(90, 193, 15, 0x001F)
+    lcd.drawCircle(130, 193, 15, 0xFCC0)
+
+    lcd.drawLine(170, 70, 170, 300, 0x8410) -- 垂直分隔线
+
+    -- === 第二区域:图片和二维码 ===
+    lcd.drawStr(180, 75, "图片/二维码:", 0x0000)
+
+    -- 图片显示区域 (80x80)
+    lcd.drawStr(180, 100, "LOGO:", 0x0000)
+    lcd.drawRectangle(180, 110, 270, 200, 0x0000) 
+    lcd.showImage(185, 115, "/luadb/logo.jpg")  
+
+    -- 二维码区域 (80x80)
+    lcd.drawStr(180, 215, "二维码:", 0x0000)
+    lcd.drawRectangle(180, 225, 270, 308, 0x0000)
+    lcd.drawQrcode(185, 226, "https://docs.openluat.com/air8000/", 80)
+
+    lcd.drawLine(20, 325, 300, 325, 0x8410)
+
+    -- === 第三区域:位图 ===
+    lcd.drawLine(20, 235, 160, 235, 0x8410)
+
+    -- 位图区域
+    lcd.setFont(lcd.font_opposansm12_chinese)
+    lcd.drawStr(20, 255, "位图示例:", 0x0000)
+
+    -- 绘制位图
+    local x_start = 30
+    local y_start = 265
+    lcd.drawXbm(x_start, y_start, 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(x_start + 20, y_start, 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(x_start, y_start + 20, 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(x_start + 20, y_start + 20, 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))
+
+    -- === 第四区域:字体 ===
+    lcd.drawStr(20, 345, "中英文字体示例:", 0x0000)
+
+    -- 中文字体
+    lcd.setFont(lcd.font_opposansm12_chinese)
+    lcd.drawStr(20, 368, "中文字体ABC123", 0x0000)
+
+    -- 英文字体
+    local font_y = 388
+    lcd.setFont(lcd.font_opposansm12)
+    lcd.drawStr(20, font_y, "12px: ABCabc123", 0x0000)
+    font_y = font_y + 18
+
+    lcd.setFont(lcd.font_opposansm16)
+    lcd.drawStr(20, font_y, "16px: ABCabc123", 0x0000)
+    font_y = font_y + 22
+
+    lcd.setFont(lcd.font_opposansm20)
+    lcd.drawStr(20, font_y, "20px: ABCabc123", 0x0000)
+    font_y = font_y + 26
+
+    lcd.setFont(lcd.font_opposansm24)
+    lcd.drawStr(20, font_y, "24px: ABCabc123", 0x0000)
+
+    lcd.drawLine(20, 470, 300, 470, 0x8410)
 end
 
 --[[
@@ -94,7 +149,7 @@ end
 function lcd_page.handle_touch(x, y, switch_page)
     -- 检查返回按钮
     if x >= back_button.x1 and x <= back_button.x2 and
-       y >= back_button.y1 and y <= back_button.y2 then
+        y >= back_button.y1 and y <= back_button.y2 then
         switch_page("home")
         return true
     end

+ 1 - 1
module/Air780EHM_Air780EHV_Air780EGH/demo/accessory_board/AirLCD_1010/lcd/ui/ui_main.lua

@@ -92,7 +92,7 @@ local function handle_touch_event(event, x, y)
         elseif current_page == "gtfont" then
             return gtfont_page.handle_touch(x, y, switch_page)
         elseif current_page == "customer_font_page" then
-            return gtfont_page.handle_touch(x, y, switch_page)
+            return customer_font_page.handle_touch(x, y, switch_page)
         end
     end
     return false