lcd7796.lua 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. -- sys库是标配
  2. _G.sys = require("sys")
  3. -- 添加硬狗防止程序卡死
  4. if wdt then
  5. wdt.init(9000) -- 初始化watchdog设置为9s
  6. sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
  7. end
  8. gpio.setup(29, 1) -- 1.3硬件版本 GPIO29打开给lcd电源供电
  9. local blk = gpio.setup(30, 1) -- 1.3改版 增加的LCD背光脚,高电平关闭背光,电平开启背光
  10. local rtos_bsp = rtos.bsp()
  11. -- local chip_type = hmeta.chip()
  12. -- 根据不同的BSP返回不同的值
  13. -- 根据不同的BSP返回不同的值
  14. -- spi_id,pin_reset,pin_dc,pin_cs,bl
  15. local function lcd_pin()
  16. local rtos_bsp = rtos.bsp()
  17. if string.find(rtos_bsp, "780EPM") then
  18. return lcd.HWID_0, 36, 0xff, 0xff, 25 -- 注意:EC718P有硬件lcd驱动接口, 无需使用spi,当然spi驱动也支持
  19. else
  20. log.info("main", "你用的不是780EPM,请更换demo测试", rtos_bsp)
  21. return
  22. end
  23. end
  24. local spi_id, pin_reset, pin_dc, pin_cs, bl = lcd_pin()
  25. if spi_id ~= lcd.HWID_0 then
  26. spi_lcd = spi.deviceSetup(spi_id, pin_cs, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 0)
  27. port = "device"
  28. else
  29. port = spi_id
  30. end
  31. lcd.init("st7796", {
  32. port = port,
  33. pin_dc = pin_dc,
  34. pin_pwr = bl,
  35. pin_rst = pin_reset,
  36. direction = 0,
  37. -- direction0 = 0x00,
  38. w = 320,
  39. h = 480,
  40. xoffset = 0,
  41. yoffset = 0,
  42. sleepcmd = 0x10,
  43. wakecmd = 0x11
  44. })
  45. -- 不在内置驱动的, 看demo/lcd_custom
  46. sys.taskInit(function()
  47. -- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存
  48. -- lcd.setupBuff() -- 使用lua内存
  49. -- lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种
  50. -- lcd.autoFlush(false)
  51. log.info("打开背光", blk(0))
  52. while 1 do
  53. lcd.clear() --全局刷屏
  54. if lcd.showImage then
  55. -- 注意, jpg需要是常规格式, 不能是渐进式JPG
  56. -- 如果无法解码, 可以用画图工具另存为,新文件就能解码了
  57. --以左上角第一个像素点为原点向右为X轴向下为Y轴,以(40,0)坐标点为图片的第一个像素点,显示该图片
  58. lcd.showImage(40, 0, "/luadb/logo.jpg")
  59. sys.wait(100)
  60. end
  61. --以左上角第一个像素点为原点,向右为X轴向下为Y轴,在(20,20)和(150,20)两个坐标点之间画一条线
  62. -- log.info("lcd.drawLine", lcd.drawLine(20, 20, 150, 20, 0x001F))
  63. --以左上角第一个像素点为原点,向右为X轴向下为Y轴,在(20,40)和(120,70)两个坐标点之间绘制一个框
  64. -- log.info("lcd.drawRectangle", lcd.drawRectangle(20, 40, 120, 70, 0xF800))
  65. --以左上角第一个像素点为原点,向右为X轴向下为Y轴,(50,60)坐标点为圆心,画一个半径为20个像素点的圆
  66. -- log.info("lcd.drawCircle", lcd.drawCircle(50, 60, 20, 0x0CE0))
  67. lcd.flush() --清除屏幕缓冲区,不填默认全局清除
  68. sys.wait(1000)
  69. end
  70. end)