airlcd.lua 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. local airLCD = {}
  2. function airLCD.lcd_init(sn)
  3. if sn == "AirLCD_1000" then
  4. width = 320
  5. height = 480
  6. lcd_ic = "st7796"
  7. elseif sn == "AirLCD_1001" then
  8. width = 320
  9. height = 480
  10. lcd_ic = "st7796"
  11. elseif sn == "AirLCD_1002" then
  12. width = 480
  13. height = 480
  14. lcd_ic = "R395435T01"
  15. else
  16. log.info("lcd", "没有找到合适的LCD")
  17. end
  18. lcd_param = {
  19. port = lcd.HWID_0, -- 使用的spi id 号
  20. pin_dc = 0xff, -- 命令选择硬件,不设置
  21. pin_rst = 2, -- 屏幕reset 管脚
  22. direction = 0, -- 屏幕方向
  23. -- direction0 = 0x00,
  24. w = width, -- 屏幕宽度
  25. h = height, -- 屏幕高度
  26. xoffset = 0, -- X轴偏移像素
  27. yoffset = 0, -- Y轴偏移像素
  28. sleepcmd = 0x10, -- LCD睡眠命令
  29. wakecmd = 0x11, -- LCD唤醒命令
  30. }
  31. spi.deviceSetup(
  32. lcd.HWID_0, -- LCD端口号
  33. nil, -- CS片选脚,可选
  34. 0, -- CPHA=0
  35. 0, -- CPOL=0
  36. 8, -- 8位数据宽度
  37. 20000000, -- 20MHz波特率
  38. spi.MSB, -- 高位先传
  39. 1, -- 主机模式
  40. 1 -- 全双工模式
  41. )
  42. gpio.setup(164, 1, gpio.PULLUP)
  43. gpio.setup(141, 1, gpio.PULLUP)
  44. -- 设置DC和RST引脚为输出模式,并启用上拉电阻
  45. gpio.setup(lcd_param.pin_dc, 1, gpio.PULLUP)
  46. gpio.setup(lcd_param.pin_rst, 1, gpio.PULLUP)
  47. -- 设置DC引脚为高电平(数据模式)
  48. gpio.set(lcd_param.pin_dc, 1)
  49. -- 执行复位序列
  50. gpio.set(lcd_param.pin_rst, 0) -- 拉低复位引脚
  51. sys.wait(20) -- 等待20ms(ST7796复位拉低大于10ms生效)
  52. gpio.set(lcd_param.pin_rst, 1) -- 拉高复位引脚
  53. sys.wait(150) -- 等待150ms(ST7796复位拉高大于120ms重置)
  54. -- 初始化ST7796显示芯片
  55. lcd.init(lcd_ic, lcd_param)
  56. lcd.setupBuff(nil, true) -- 设置缓冲区大小,使用系统内存
  57. lcd.autoFlush(false) -- 自动刷新LCD
  58. if sn == "AirLCD_1001" then
  59. log.info("tp", "tp init")
  60. local function tp_callBack(tp_device,tp_data)
  61. sys.publish("TP",tp_device,tp_data)
  62. end
  63. local i2c_id = 0
  64. i2c.setup(i2c_id, i2c.SLOW)
  65. tp_device = tp.init("gt911",{port=i2c_id, pin_rst = 20,pin_int = gpio.WAKEUP0,},tp_callBack)
  66. end
  67. end
  68. return airLCD