lcd_test.lua 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. --[[
  2. @module lcd_test
  3. @summary lcd_test测试功能模块
  4. @version 1.0
  5. @date 2025.07.01
  6. @author yc
  7. @usage
  8. 使用Air780EHV核心板 配合 ST7796 LCD 显示屏幕演示基本的显示功能.
  9. ]]
  10. -- 根据不同的BSP返回不同的值
  11. -- spi_id,pin_reset,pin_dc,pin_cs,bl
  12. local function lcd_pin()
  13. local rtos_bsp = rtos.bsp()
  14. if string.find(rtos_bsp, "780EHV") then
  15. return lcd.HWID_0, 36, 0xff, 0xff, 25
  16. else
  17. log.info("main", "没找到合适的cat.1芯片", rtos_bsp)
  18. return
  19. end
  20. end
  21. function lcd_test_func()
  22. local spi_id, pin_reset, pin_dc, pin_cs, bl = lcd_pin()
  23. if spi_id ~= lcd.HWID_0 then
  24. spi_lcd = spi.deviceSetup(spi_id, pin_cs, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 0)
  25. port = "device"
  26. else
  27. port = spi_id
  28. end
  29. lcd.init("st7796", {
  30. port = port,
  31. pin_dc = pin_dc,
  32. pin_pwr = bl,
  33. pin_rst = pin_reset,
  34. direction = 0,
  35. w = 320,
  36. h = 480,
  37. xoffset = 0,
  38. yoffset = 0,
  39. sleepcmd = 0x10,
  40. wakecmd = 0x11,
  41. })
  42. -- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存
  43. -- lcd.setupBuff() -- 使用lua内存
  44. lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种
  45. lcd.autoFlush(false)
  46. while 1 do
  47. lcd.clear()
  48. log.info("图片显示")
  49. -- API 文档 https://wiki.luatos.com/api/lcd.html
  50. if lcd.showImage then
  51. -- 注意, jpg需要是常规格式, 不能是渐进式JPG
  52. -- 如果无法解码, 可以用画图工具另存为,新文件就能解码了
  53. lcd.showImage(0, 0, "/luadb/picture.jpg")
  54. sys.wait(100)
  55. end
  56. lcd.flush()
  57. sys.wait(3000)
  58. --lcd清屏
  59. lcd.clear()
  60. -- 画线
  61. log.info("lcd.drawLine", lcd.drawLine(100, 240, 240, 240, 0x001F))
  62. lcd.flush()
  63. sys.wait(3000)
  64. --lcd清屏
  65. lcd.clear()
  66. -- 画框
  67. log.info("lcd.drawRectangle", lcd.drawRectangle(100, 240, 240, 70, 0xF800))
  68. lcd.flush()
  69. sys.wait(3000)
  70. --lcd清屏
  71. lcd.clear()
  72. -- 画圆
  73. log.info("lcd.drawCircle", lcd.drawCircle(150, 240, 100, 0x0CE0))
  74. lcd.flush()
  75. sys.wait(3000)
  76. --lcd清屏
  77. lcd.clear()
  78. lcd.setFont(lcd.font_opposansm32)
  79. lcd.drawStr(60,240,"hello hezhou") --显示字符
  80. lcd.flush()
  81. sys.wait(3000)
  82. --lcd清屏
  83. lcd.clear()
  84. end
  85. end
  86. --创建并且启动一个task
  87. --运行这个task的主函数lcd_test_func
  88. sys.taskInit(lcd_test_func)