doudou 1 год назад
Родитель
Сommit
caf9fd2c6c
1 измененных файлов с 134 добавлено и 0 удалено
  1. 134 0
      demo/lvgl/Air780EP/main.lua

+ 134 - 0
demo/lvgl/Air780EP/main.lua

@@ -0,0 +1,134 @@
+--- 模块功能:lcddemo
+-- @module lcd
+-- @author Dozingfiretruck
+-- @release 2021.01.25
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "lcddemo"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- sys库是标配
+_G.sys = require("sys")
+
+-- 添加硬狗防止程序卡死
+if wdt then
+    wdt.init(9000) -- 初始化watchdog设置为9s
+    sys.timerLoopStart(wdt.feed, 3000) -- 3s喂一次狗
+end
+
+local rtos_bsp = rtos.bsp()
+
+-- 根据不同的BSP返回不同的值
+-- spi_id,pin_reset,pin_dc,pin_cs,bl
+function lcd_pin()
+    if rtos_bsp == "EC718P" then
+        return lcd.HWID_0, 36, 0xff, 0xff, 25 -- 注意:EC718P有硬件lcd驱动接口, 无需使用spi,当然spi驱动也支持
+    else
+        log.info("main", "bsp not support")
+        return
+    end
+end
+
+local spi_id, pin_reset, pin_dc, pin_cs, bl = lcd_pin()
+
+if spi_id ~= lcd.HWID_0 then
+    spi_lcd = spi.deviceSetup(spi_id, pin_cs, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 0)
+    port = "device"
+else
+    port = spi_id
+end
+
+--[[ 此为合宙售卖的ec718系列专用硬件双data驱动TFT LCD LCD 分辨率:320x480 屏幕ic:nv3037 购买地址:https://item.taobao.com/item.htm?id=764253232987&skuId=5258482696347&spm=a1z10.1-c-s.w4004-24087038454.8.64961170w5EdoA]]
+lcd.init("nv3037", {
+    port = port,
+    pin_dc = pin_dc,
+    pin_pwr = bl,
+    pin_rst = pin_reset,
+    direction = 0,
+    w = 320,
+    h = 480,
+    xoffset = 0,
+    yoffset = 0,
+    interface_mode = lcd.DATA_2_LANE
+}, spi_lcd)
+
+
+
+
+log.info("lvgl", lvgl.init())
+
+local scr = lvgl.obj_create(nil, nil)
+local btn = lvgl.btn_create(scr)
+lvgl.obj_align(btn, lvgl.scr_act(), lvgl.ALIGN_CENTER, 0, 0)
+
+local label = lvgl.label_create(btn)
+local flag = true
+
+lvgl.label_set_text(label, "LuatOS!")
+lvgl.scr_load(scr)
+lvgl.indev_drv_register("pointer", "emulator")
+
+local function btn_cb(obj, event)
+    if event == lvgl.EVENT_SHORT_CLICKED then
+        log.info("short click")
+        if flag then
+            lvgl.label_set_text(label, "LuatOS!")
+            flag = false
+        else
+            lvgl.label_set_text(label, "hello world!")
+            flag = true
+        end
+    end
+end
+lvgl.obj_set_event_cb(btn, btn_cb)
+
+local x, y = 0, 0
+local i2cid = 1
+local ft6336SlaveAddr, ft6336GetFingerNum, ft6336GetLoc0 = 0x38, 0x02, 0x03
+local tpRstPin = 24
+local tpIntPin = 22
+local function ft6336Read(addr, len)
+    i2c.send(i2cid, ft6336SlaveAddr, string.char(addr))
+    return i2c.recv(1, ft6336SlaveAddr, len)
+end
+
+local function ft6336Scan()
+    local data = ft6336Read(ft6336GetFingerNum, 1)
+    if not data or data:byte() == 0 then
+        return 0
+    end
+    local data = ft6336Read(ft6336GetLoc0, 4)
+    if not data or data:len() ~= 4 then
+        return 0
+    end
+    x = ((data:byte(1) & 0x0F) << 8) + data:byte(2)
+    y = ((data:byte(3) & 0x0F) << 8) + data:byte(4)
+    return 1, x, y, true
+end
+
+sys.taskInit(function()
+    local rstPin = gpio.setup(tpRstPin, 1)
+    local intPin = gpio.setup(tpIntPin, function(val)
+        sys.publish("INT_TRIGGER")
+    end, gpio.PULLUP, gpio.FALLING)
+    rstPin(0)
+    sys.wait(10)
+    rstPin(1)
+    mcu.altfun(mcu.I2C, i2cid, 23, 2, 0)
+    mcu.altfun(mcu.I2C, i2cid, 24, 2, 0)
+    i2c.setup(i2cid, 1);
+    while true do
+        sys.waitUntil("INT_TRIGGER")
+        if ft6336Scan() > 0 then
+            lvgl.indev_point_emulator_update(x, y, 1)
+        else
+            lvgl.indev_point_emulator_update(x, y, 0)
+        end
+    end
+end)
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!