main.lua 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "lcddemo"
  3. VERSION = "1.0.0"
  4. log.info("main", PROJECT, VERSION)
  5. -- sys库是标配
  6. _G.sys = require("sys")
  7. --[[
  8. -- LCD接法示例
  9. LCD管脚 Air780E管脚
  10. GND GND
  11. VCC 3.3V
  12. SCL (GPIO11)
  13. SDA (GPIO09)
  14. RES (GPIO01)
  15. DC (GPIO10)
  16. CS (GPIO08)
  17. BL(可以不接) (GPIO22)
  18. 提示:
  19. 1. 只使用SPI的时钟线(SCK)和数据输出线(MOSI), 其他均为GPIO脚
  20. 2. 数据输入(MISO)和片选(CS), 虽然是SPI, 但已复用为GPIO, 并非固定,是可以自由修改成其他脚
  21. 3. 若使用多个SPI设备, 那么RES/CS请选用非SPI功能脚
  22. 4. BL可以不接的
  23. ]]
  24. --添加硬狗防止程序卡死
  25. if wdt then
  26. wdt.init(9000)--初始化watchdog设置为9s
  27. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  28. end
  29. local spi_id = 0
  30. local pin_reset = 1
  31. local pin_dc = 10
  32. local pin_cs = 8
  33. local bl = 22
  34. --[[设置并启用SPI
  35. @param1 SPI号
  36. @param2 cs片选引脚
  37. @param3 CPHA 默认0,可选0/1
  38. @param4 CPOL 默认0,可选0/1
  39. @param5 数据宽度,默认8bit
  40. @param6 波特率,默认20M=20000000
  41. @param7 大小端, 默认spi.MSB, 可选spi.LSB
  42. @return spi_device
  43. ]]
  44. spi_lcd = spi.deviceSetup(spi_id,pin_cs,0,0,8,20*1000*1000,spi.MSB,1,0)
  45. port = "device"
  46. --[[ 此为合宙售卖的1.8寸TFT LCD LCD 分辨率:128X160 屏幕ic:st7735 购买地址:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-24045920841.19.6c2275a1Pa8F9o&id=560176729178]]
  47. --[[lcd显示屏初始化
  48. @param1 lcd类型
  49. @param2 附加参数,table
  50. @param3 spi设备,当port = “device”时有效
  51. @param4 允许初始化在lcd service里运行,默认是false
  52. ]]
  53. lcd.init("st7735",{port = port,pin_dc = pin_dc, pin_pwr = bl, pin_rst = pin_reset,direction = 0,w = 128,h = 160,xoffset = 0,yoffset = 0},spi_lcd)
  54. --[[ 此为合宙售卖的0.96寸TFT LCD LCD 分辨率:160X80 屏幕ic:st7735s 购买地址:https://item.taobao.com/item.htm?id=661054472686]]
  55. --lcd.init("st7735v",{port = port,pin_dc = pin_dc, pin_pwr = bl, pin_rst = pin_reset,direction = 1,w = 160,h = 80,xoffset = 0,yoffset = 24},spi_lcd)
  56. --如果显示颜色相反,请解开下面一行的注释,关闭反色
  57. --lcd.invoff()
  58. --0.96寸TFT如果显示依旧不正常,可以尝试老版本的板子的驱动
  59. -- lcd.init("st7735s",{port = port,pin_dc = pin_dc, pin_pwr = bl, pin_rst = pin_reset,direction = 2,w = 160,h = 80,xoffset = 0,yoffset = 0},spi_lcd)
  60. -- 不在内置驱动的, 看上一级目录的demo/lcd_custom
  61. sys.taskInit(function()
  62. -- 开启缓冲区, 刷屏速度会加快, 但也消耗2倍屏幕分辨率的内存
  63. -- lcd.setupBuff() -- 使用lua内存
  64. -- lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种
  65. -- lcd.autoFlush(false)
  66. while 1 do
  67. -- 清屏,默认背景色
  68. lcd.clear()
  69. --log.info("wiki", "https://wiki.luatos.com/api/lcd.html")
  70. -- API 文档 https://wiki.luatos.com/api/lcd.html
  71. if lcd.showImage then
  72. -- 注意, jpg需要是常规格式, 不能是渐进式JPG
  73. -- 如果无法解码, 可以用画图工具另存为,新文件就能解码了
  74. -- 判断要显示的图片是否存在
  75. log.info("文件/luadb/logo.jpg是否存在",io.exists("/luadb/logo.jpg"))
  76. --[[显示图片,当前只支持jpg,jpeg
  77. @param1 x坐标
  78. @param2 y坐标
  79. @param3 文件路径
  80. ]]
  81. lcd.showImage(40,0,"/luadb/logo.jpg")
  82. sys.wait(1000)
  83. end
  84. --[[在两点之间画一条线
  85. @param1 第一个点的X位置
  86. @param2 第一个点的y位置
  87. @param3 第二个点的x位置
  88. @param4 第二个点的y位置
  89. @param5 绘画颜色,默认前景色[可选]
  90. ]]
  91. log.info("lcd.drawLine", lcd.drawLine(10,90,80,90,0x001F))
  92. --[[从x / y位置(左上边缘)开始绘制一个框
  93. @param1 左上边缘的X位置
  94. @param2 左上边缘的Y位置
  95. @param3 右下边缘的X位置
  96. @param4 右下边缘的Y位置
  97. @param5 绘画颜色,默认前景色[可选]
  98. ]]
  99. log.info("lcd.drawRectangle", lcd.drawRectangle(10,110,50,140,0xF800))
  100. --[[从x / y位置(圆心)开始绘制一个圆
  101. @param1 圆心的X位置
  102. @param2 圆心的Y位置
  103. @param3 半径
  104. @param4 绘画颜色,默认前景色[可选]
  105. ]]
  106. log.info("lcd.drawCircle", lcd.drawCircle(100,120,20,0x0CE0))
  107. sys.wait(1000)
  108. end
  109. end)
  110. -- 用户代码已结束---------------------------------------------
  111. -- 结尾总是这一句
  112. sys.run()
  113. -- sys.run()之后后面不要加任何语句!!!!!