ui_main.lua 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. --[[
  2. @module ui_main
  3. @summary UI子模块的主程序
  4. @version 1.0
  5. @date 2025.09.04
  6. @author 江访
  7. @usage
  8. 本demo演示的核心功能为:
  9. 1、依据显示屏配置参数初始化显示屏,点亮AirLCD_1000屏幕
  10. 2、循环显示显示图片、字符、色块等内容
  11. 3、通过接口设置背光亮度和对屏幕进行休眠和唤醒。
  12. 4、本demo使用的背光引脚,既是GPIO_1也是PWM_0引脚
  13. 5、背光引脚通过切换到PWM模式,通过调节占空比实现背光亮度调节
  14. 6、背光引脚通过切换到GPIO模式,再调用休眠/唤醒接口使屏幕进入休眠/唤醒
  15. ]]
  16. -- 加载AirLCD_1000驱动模块
  17. local AirLCD_1000 = require "AirLCD_1000" -- 显示初始化执行程序
  18. -- 配置AirLCD_1000接线引脚
  19. local LCD_MODEL = "AirLCD_1000" -- 显示屏型号
  20. local lcd_vcc = 29 -- 屏幕供电引脚GPIO号,VDD-EXT供电可填255
  21. local lcd_pin_rst = 36 -- 复位引脚GPIO号
  22. local lcd_pin_pwr = 1 -- 背光引脚GPIO号
  23. local lcd_pwm_id = 0 -- 背光引脚PWM端口号
  24. -- UI主task,所有UI相关的代码都会通过该task进行调度
  25. local function ui_main()
  26. AirLCD_1000.lcd_init(LCD_MODEL, lcd_vcc, lcd_pin_rst, lcd_pin_pwr,lcd_pwm_id)
  27. -- 设置字体为模组自带的opposansm12中文字体
  28. lcd.setFont(lcd.font_opposansm12_chinese)
  29. -- 清除屏幕显示
  30. -- lcd.clear()
  31. -- 主循环
  32. while true do
  33. -- 获取并打印屏幕尺寸信息,实际是初始化传入的信息
  34. -- log.info("屏幕尺寸", lcd.getSize())
  35. ------------------------------------------以下为图片/位图/英文显示设置------------------------------------------
  36. --设置前景色和背景色(RGB565格式)
  37. --需要放在循环内部,因为是一次性设置
  38. lcd.setColor(0xFFFF, 0x0000) -- 白底黑字,背景色:白色(0xFFFF), 前景色:黑色(0x0000),
  39. -- 在屏幕左上角(0,0)显示一张图片
  40. -- 图片路径为/luadb/logo.jpg
  41. lcd.showImage(0, 0, "/luadb/logo.jpg")
  42. -- 在位置(0,82)绘制一个16x16的位图,内容依次为“上”,“海”,“合”,“宙”
  43. -- 位图数据使用字符串格式表示
  44. lcd.drawXbm(0, 82, 16, 16, string.char(
  45. 0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x3F,0x80,0x00,
  46. 0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xFE,0x7F,0x00,0x00))
  47. lcd.drawXbm(18, 82, 16, 16, string.char(
  48. 0x00,0x00,0x80,0x00,0xC4,0x7F,0x28,0x00,0x10,0x00,0xD0,0x3F,0x42,0x20,0x44,0x22,
  49. 0x40,0x24,0xF0,0xFF,0x24,0x20,0x24,0x22,0x24,0x20,0xE2,0x7F,0x02,0x20,0x02,0x1E))
  50. lcd.drawXbm(36, 82, 16, 16, string.char(
  51. 0x00,0x00,0x00,0x01,0x80,0x01,0x40,0x02,0x20,0x04,0x18,0x18,0xF4,0x6F,0x02,0x00,
  52. 0x00,0x00,0xF8,0x1F,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0xF8,0x1F,0x08,0x10))
  53. lcd.drawXbm(54, 82, 16, 16, string.char(
  54. 0x00,0x00,0x80,0x00,0x00,0x01,0xFE,0x7F,0x02,0x40,0x02,0x40,0x00,0x01,0xFC,0x3F,
  55. 0x04,0x21,0x04,0x21,0xFC,0x3F,0x04,0x21,0x04,0x21,0x04,0x21,0xFC,0x3F,0x04,0x20))
  56. -- 在位置(120,40)绘制一个蓝色点
  57. lcd.drawPoint(120, 40, 0x001F)
  58. -- 以(120,40)为圆心,40为半径绘制一个蓝色圆
  59. lcd.drawCircle(120, 40, 40, 0x001F)
  60. -- 从(170,40)到(280,40)绘制一条蓝色水平线
  61. lcd.drawLine(170, 40, 280, 40, 0x001F)
  62. -- 从(170,50)到(280,80)绘制一个蓝色矩形框
  63. lcd.drawRectangle(170, 50, 280, 80, 0x001F)
  64. -- 在位置(200,170)绘制一个100x100的二维码,内容为指定URL
  65. lcd.drawQrcode(200, 170, "https://docs.openluat.com/air8000/", 100)
  66. lcd.setFont(lcd.font_opposansm12)
  67. lcd.drawStr(20,172,"hello hezhou") --显示字符
  68. lcd.setFont(lcd.font_opposansm16)
  69. lcd.drawStr(20,189,"hello hezhou") --显示字符
  70. lcd.setFont(lcd.font_opposansm18)
  71. lcd.drawStr(20,210,"hello hezhou") --显示字符
  72. lcd.setFont(lcd.font_opposansm20)
  73. lcd.drawStr(20,233,"hello hezhou") --显示字符
  74. lcd.setFont(lcd.font_opposansm22)
  75. lcd.drawStr(20,258,"hello hezhou") --显示字符
  76. lcd.setFont(lcd.font_opposansm24)
  77. lcd.drawStr(20,285,"hello hezhou") --显示字符
  78. lcd.setFont(lcd.font_opposansm32)
  79. lcd.drawStr(20,316,"hello hezhou") --显示字符
  80. lcd.fill(10, 380, 150, 460, 0xF800) -- 绘制红色矩形区域(0xF800是红色)
  81. lcd.fill(170, 380, 310, 460, 0x07E0) -- 绘制绿色矩形区域(0x07E0是绿色)
  82. -- 主动刷新数据到屏幕
  83. lcd.flush()
  84. sys.wait(5000)
  85. --------------------------------------------以下为显示中文设置--------------------------------------------
  86. -- Air780EPM不支持中文显示
  87. -- Air780EHM/EGH/EHV/Air8000支持12号中文字体
  88. -- 中文以左下角为坐标显示与位图左上角方式不同
  89. -- 设置字体为opposansm12中文字体,从英文显示切换到中文前一定要设置
  90. lcd.setFont(lcd.font_opposansm12_chinese)
  91. lcd.setColor(0xFFFF, 0x0000) -- 白底黑字,背景色:白色(0xFFFF), 前景色:黑色(0x0000),
  92. -- 显示重拍按钮(左侧)
  93. lcd.drawStr(70, 420, "重拍", 0xFFFF) -- 在按钮上绘制白色文字"重拍"
  94. -- 显示返回按钮(右侧)
  95. lcd.drawStr(230, 420, "返回", 0xFFFF) -- 在按钮上绘制白色文字"返回"
  96. -- 在位置(160,155)绘制文本
  97. -- 不设置字体颜色,默认会使用lcd.setColor所设置的字体颜色
  98. lcd.drawStr(160, 155, "扫码进入Air8000资料站",0x0000)
  99. -- 主动刷新数据到屏幕
  100. lcd.flush()
  101. sys.wait(5000)
  102. --------------------------------------------以下为背光亮度设置--------------------------------------------
  103. -- 背光引脚使用PWM模式控制,pwm_id正确配置后可以实现背光控制
  104. -- 参数 level: 亮度级别(0-100)
  105. AirLCD_1000.set_backlight(5) -- 设置背光为5%
  106. sys.wait(5000)
  107. AirLCD_1000.set_backlight(10) -- 设置背光为10%
  108. sys.wait(5000)
  109. AirLCD_1000.set_backlight(20) -- 设置背光为20%
  110. sys.wait(5000)
  111. AirLCD_1000.set_backlight(30) -- 设置背光为30%
  112. sys.wait(5000)
  113. AirLCD_1000.set_backlight(40) -- 设置背光为40%
  114. sys.wait(5000)
  115. AirLCD_1000.set_backlight(50) -- 设置背光为50%
  116. sys.wait(5000)
  117. AirLCD_1000.set_backlight(60) -- 设置背光为60%
  118. sys.wait(5000)
  119. AirLCD_1000.set_backlight(70) -- 设置背光为70%
  120. sys.wait(5000)
  121. AirLCD_1000.set_backlight(80) -- 设置背光为80%
  122. sys.wait(5000)
  123. AirLCD_1000.set_backlight(90) -- 设置背光为90%
  124. sys.wait(5000)
  125. AirLCD_1000.set_backlight(100) -- 设置背光为100%
  126. --------------------------------------------以下为屏幕休眠设置--------------------------------------------
  127. -- 背光引脚使用GPIO模式控制,pin_pwr正确配置可以实现背光控制
  128. -- 进入休眠,功耗13ma
  129. AirLCD_1000.set_sleep(true) -- 进入休眠状态,此时屏幕供电需要稳定,若不稳定,唤醒后需要重新初始化屏幕
  130. pm.power(pm.WORK_MODE, 1)
  131. sys.wait(10000)
  132. pm.power(pm.WORK_MODE, 0)
  133. AirLCD_1000.set_sleep(false) -- 唤醒屏幕,自动恢复之前的背光设置
  134. -- 主动刷新数据到屏幕
  135. lcd.flush()
  136. sys.wait(5000)
  137. ----------------------------------------以下为屏幕关闭/打开背光设置----------------------------------------
  138. -- --关闭LCD背光,功耗20ma
  139. -- AirLCD_1000.lcd_off()
  140. -- pm.power(pm.WORK_MODE, 1)
  141. -- sys.wait(15000)
  142. -- -- 唤醒
  143. -- pm.power(pm.WORK_MODE, 0)
  144. -- sys.wait(5000)
  145. -- AirLCD_1000.lcd_on()
  146. -- 主动刷新数据到屏幕
  147. -- lcd.flush()
  148. -- sys.wait(50)
  149. end
  150. end
  151. -- 创建UI主循环ui_main的task
  152. sys.taskInit(ui_main)