main.lua 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. --- 模块功能:lcddemo
  2. -- @module lcd
  3. -- @author Dozingfiretruck
  4. -- @release 2021.01.25
  5. -- LuaTools需要PROJECT和VERSION这两个信息
  6. PROJECT = "lcddemo"
  7. VERSION = "1.0.0"
  8. log.info("main", PROJECT, VERSION)
  9. -- sys库是标配
  10. _G.sys = require("sys")
  11. --添加硬狗防止程序卡死
  12. if wdt then
  13. wdt.init(9000)--初始化watchdog设置为9s
  14. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  15. end
  16. --[[
  17. ===============================================
  18. ===============================================
  19. ===============================================
  20. 这个demo必须修改才能运行, 把注释看完 特别主要:2023.11.29之后要自定义方向命令,即 direction0 direction90 direction180 direction270,使用哪个方向给哪个就好
  21. ===============================================
  22. ===============================================
  23. ===============================================
  24. ]]
  25. local rtos_bsp = rtos.bsp()
  26. -- 根据不同的BSP返回不同的值
  27. -- spi_id,pin_reset,pin_dc,pin_cs,bl
  28. local function lcd_pin()
  29. if rtos_bsp == "AIR101" then
  30. return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
  31. elseif rtos_bsp == "AIR103" then
  32. return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
  33. elseif rtos_bsp == "AIR105" then
  34. return 5,pin.PC12,pin.PE08,pin.PC14,pin.PE09
  35. elseif rtos_bsp == "ESP32C3" then
  36. return 2,10,6,7,11
  37. elseif rtos_bsp == "ESP32S3" then
  38. return 2,16,15,14,13
  39. elseif rtos_bsp == "EC618" then
  40. return 0,1,10,8,22
  41. elseif string.find(rtos_bsp,"EC718") then
  42. return lcd.HWID_0,36,0xff,0xff,0xff -- 注意:EC718P有硬件lcd驱动接口, 无需使用spi,当然spi驱动也支持
  43. else
  44. log.info("main", "bsp not support")
  45. return
  46. end
  47. end
  48. local spi_id,pin_reset,pin_dc,pin_cs,bl = lcd_pin()
  49. if spi_id ~= lcd.HWID_0 then
  50. spi_lcd = spi.deviceSetup(spi_id,pin_cs,0,0,8,20*1000*1000,spi.MSB,1,0)
  51. port = "device"
  52. else
  53. port = spi_id
  54. end
  55. --[[ 下面为custom方式示例,自己传入lcd指令来实现驱动,示例以st7735s做展示 ]]
  56. --[[ 注意修改下面的pin_xx对应的gpio信息, 数值与pin.XXX 均可]]
  57. --[[
  58. initcmd的含义, 分3种指令, 每个指令都是int32, 前2个字节是命令, 后2个字节是值
  59. 0001 delay 延时, 例如 0x00010002 , 延时2ms
  60. 0000/0002 cmd 发命令, 例如 0x0002004
  61. 0003 data 发数据, 例如 0x0003004
  62. ]]
  63. -- lcd.init("custom",{
  64. -- port = port,
  65. -- pin_dc = pin_dc,
  66. -- pin_pwr = bl,
  67. -- pin_rst = pin_reset,
  68. -- direction = 0,
  69. -- direction0 = 0x08,
  70. -- w = 128,
  71. -- h = 160,
  72. -- xoffset = 2,
  73. -- yoffset = 1,
  74. -- sleepcmd = 0x10,
  75. -- wakecmd = 0x11,
  76. -- initcmd = {
  77. -- 0x00020011,0x00010078,0x00020021, -- 反显
  78. -- 0x000200B1,0x00030002,0x00030035,
  79. -- 0x00030036,0x000200B2,0x00030002,
  80. -- 0x00030035,0x00030036,0x000200B3,
  81. -- 0x00030002,0x00030035,0x00030036,
  82. -- 0x00030002,0x00030035,0x00030036,
  83. -- 0x000200B4,0x00030007,0x000200C0,
  84. -- 0x000300A2,0x00030002,0x00030084,
  85. -- 0x000200C1,0x000300C5,0x000200C2,
  86. -- 0x0003000A,0x00030000,0x000200C3,
  87. -- 0x0003008A,0x0003002A,0x000200C4,
  88. -- 0x0003008A,0x000300EE,0x000200C5,
  89. -- 0x0003000E,0x00020036,0x000300C0,
  90. -- 0x000200E0,0x00030012,0x0003001C,
  91. -- 0x00030010,0x00030018,0x00030033,
  92. -- 0x0003002C,0x00030025,0x00030028,
  93. -- 0x00030028,0x00030027,0x0003002F,
  94. -- 0x0003003C,0x00030000,0x00030003,
  95. -- 0x00030003,0x00030010,0x000200E1,
  96. -- 0x00030012,0x0003001C,0x00030010,
  97. -- 0x00030018,0x0003002D,0x00030028,
  98. -- 0x00030023,0x00030028,0x00030028,
  99. -- 0x00030026,0x0003002F,0x0003003B,
  100. -- 0x00030000,0x00030003,0x00030003,
  101. -- 0x00030010,0x0002003A,0x00030005,
  102. -- 0x00020029,
  103. -- },
  104. -- },
  105. -- spi_lcd)
  106. --[[ 下面为custom方式示例,自己传入lcd指令来实现驱动,示例以st7789做展示 ]]
  107. -- lcd.init("custom",{
  108. -- port = port,
  109. -- pin_dc = pin_dc,
  110. -- pin_pwr = bl,
  111. -- pin_rst = pin_reset,
  112. -- direction = 0,
  113. -- direction0 = 0x00,
  114. -- w = 240,
  115. -- h = 320,
  116. -- xoffset = 0,
  117. -- yoffset = 0,
  118. -- sleepcmd = 0x10,
  119. -- wakecmd = 0x11,
  120. -- initcmd = {--0001 delay 0002 cmd 0003 data
  121. -- 0x02003A,0x030005,
  122. -- 0x0200B2,0x03000C,0x03000C,0x030000,0x030033,0x030033,
  123. -- 0x0200B7,0x030035,
  124. -- 0x0200BB,0x030032,
  125. -- 0x0200C2,0x030001,
  126. -- 0x0200C3,0x030015,
  127. -- 0x0200C4,0x030020,
  128. -- 0x0200C6,0x03000F,
  129. -- 0x0200D0,0x0300A4,0x0300A1,
  130. -- 0x0200E0,0x0300D0,0x030008,0x03000E,0x030009,0x030009,0x030005,0x030031,0x030033,0x030048,0x030017,0x030014,0x030015,0x030031,0x030034,
  131. -- 0x0200E1,0x0300D0,0x030008,0x03000E,0x030009,0x030009,0x030015,0x030031,0x030033,0x030048,0x030017,0x030014,0x030015,0x030031,0x030034,
  132. -- 0x00020021, -- 如果发现屏幕反色,注释掉此行
  133. -- },
  134. -- },
  135. -- spi_lcd)
  136. sys.taskInit(function()
  137. sys.wait(500)
  138. log.info("lcd.drawLine", lcd.drawLine(20, 20, 150, 20, 0x001F))
  139. log.info("lcd.drawRectangle", lcd.drawRectangle(20, 40, 120, 70, 0xF800))
  140. log.info("lcd.drawCircle", lcd.drawCircle(50, 50, 20, 0x0CE0))
  141. end)
  142. -- 用户代码已结束---------------------------------------------
  143. -- 结尾总是这一句
  144. sys.run()
  145. -- sys.run()之后后面不要加任何语句!!!!!