平头哥W801 LUATOS刷固件lua点灯
Air101和Air103是基于平头哥XT804
内核设计的soc,使用相同内核的W800和W806同样可以使用.海凌科的HLK-W801-KIT-V1.1
开发板可以刷Air103
固件来开发
点灯:
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "gpiodemo"
VERSION = "1.0.0"
log.info("main", PROJECT, VERSION)
-- sys库是标配
_G.sys = require("sys")
--下面的GPIO引脚编号,请根据实际需要进行更改!pins={27,32,33,34,42,41,21} --PB11,16,17,18,26,25,5
clk=gpio.setup(27, 0,gpio.PULLUP)
sda=gpio.setup(32, 0,gpio.PULLUP)
--S9模式传递数据
local function wirtedata(rs,dat)
clk(0)
if (rs==1)
then
sda(1)
else
sda(0)
end
clk(1)
for i=1,8 do
clk(0)
if ((dat&0x80)>0 )
then
sda(1)
else
sda(0)
end
clk(1)
dat=dat<<1
--log.info(dat)
end
end
local function initlcm()
clk(0)
wirtedata(0,0xe2)
sys.wait(10)
wirtedata(0,0xa2)
sys.wait(1)
wirtedata(0,0x2f)
sys.wait(1)
wirtedata(0,0x23)
sys.wait(1)
wirtedata(0,0x81)
wirtedata(0,0x64)--修改这个值可以改变对比度
sys.wait(1)
wirtedata(0,0xa0)
wirtedata(0,0xc4)
wirtedata(0,0x40)
wirtedata(0,0xe0)
wirtedata(0,0xaf)
end
local function lCD_SetPos(page, column)
column = column - 1
page = page - 1
wirtedata(0,0xb0 + page)
wirtedata(0,column & 0x0f)
column=column>>4
column=column|0x10
wirtedata(0,column)
end
local function lcdclear()
for i=0,7 do
wirtedata(0,0xb0+i) --页地址
wirtedata(0,0x10) --列地址
wirtedata(0,0x00)
for j=0,131 do
wirtedata(1,0x00)
end
end
end
local function lcdtest()
for i=0,7 do
wirtedata(0,0xb0+i)
wirtedata(0,0x10)
wirtedata(0,0x00)
for j=1,132 do
wirtedata(1,0xff)
end
end
end
sys.taskInit(function()
initlcm()
log.info("初始化完成")
while 1 do
lcdclear()
log.info("清屏")
sys.wait(1000)
lcdtest()
sys.wait(1000)
end
end)
-- 用户代码已结束-----------------------
🔰开发环境搭建
基于VSCode平台搭建教程:https://wiki.luatos.com/boardGuide/vscode.html
🌻烧录工具以及固件烧录教程
W801烧录工具和教程可参考:https://wiki.luatos.com/boardGuide/flash.html
https://wiki.luatos.com/pages/tools.html#
📍Lua 源码中gpio相关源文件:https://gitee.com/openLuat/LuatOS/tree/master/luat/modules
GPIO相关函数介绍:https://wiki.luatos.com/api/gpio.html
GPIO配置
在源码中:LuatOS-master\luat\modules\luat_lib_gpio.c
获取管脚对应的GPIO号, 可简写为 pin.PA01 , 推荐使用简写
@api pin.get(name)
@name 管脚的名称, 例如PA01, PB12
@return int 对应的GPIO号,如果不存在则返回-1,并打印警告信息
@usage
-- 以下三个语句等价, 若提示pin这个库不存在,则代表固件版本低,请升级底层固件.
-- PA12, GPIO12, 设置为输出, 而且低电平.
gpio.setup(12, 0)
gpio.setup(pin.PA12, 0) -- 推荐使用
gpio.setup(pin.get("PA12"), 0) -- 不推荐, 太长^_^
static int luat_pin_index(lua_State *L){
size_t len;
int pin = 0;
const char* pin_name = luaL_checklstring(L, 1, &len);
if (len < 3) {
LLOGW("invaild pin id %s", pin_name);
return 0;
}
pin = luat_pin_to_gpio(pin_name);
if (pin >= 0) {
lua_pushinteger(L, pin);
return 1;
}
else {
LLOGW("invaild pin id %s", pin_name);
return 0;
}
}
烧录方式
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。