前言
由于工作需要接触了大彩串口屏,过程中发现大彩论坛里没看到有设置密码的教程以及帖子,所以在解决此需求后记录一下学习过程。
目录
简介
设置密码部分主要是采用LUA脚本语言在屏内部进行编写,通过VisualTFT可视化软件编写工程后,里面会集成有LUA编程器可供编写脚本。
步骤
一、创建工程后新建三个画面
1、主页面
2、锁屏界面
3、修改密码界面
二、在工具中点击LUA脚本编程
在该项目中用到的LUA脚本代码库是基于大彩官方提供的LUA API库。
1、初始化变量以及初始化函数和flash读写。
local byte_addr = 0x00000000 --flash存储起始地址
local old_password = 123456 -- 假设的初始密码
local read_byte_data
--初始化函数
function on_init()
set_visiable(1,8,0) --初始化隐藏错误提示
set_visiable(2,7,0)
--判断是否为第一次烧录,如果是就写入固定密码,如需恢复出厂设置,
--此处需要配合单片机擦除flash
if read_flash_string(byte_addr) ==nil then
flush_flash()
write_flash_string(byte_addr,old_password)
end
read_byte_data = read_flash_string(byte_addr)
end
注意:此处由于可用的flash比较多,我便用写字符串的方式方便点,因为要储存六位字符串用作密码,至于写字节的方式本人试了一下没成功,可以浏览官方网站看看说明。https://doc.gz-dc.com/LUA/08_flash_api.html
2、点击锁屏界面中的输入密码文本框和修改密码界面中的确定按键会触发此回调函数。
--用户通过触摸修改控件后,执行此回调函数。
--点击按钮控件,修改文本控件、修改滑动条都会触发此事件。
function on_control_notify(screen,control,value)
--触发锁屏界面
if screen == 1 then
if control == 1 then
read_byte_data = read_flash_string(byte_addr)
old_password=read_byte_data
if get_text(1,1) == old_password then
change_screen(0)
set_text(1,1,"")
else
set_visiable(1,8,1)
end
set_text(1,1,"")
end
else
set_visiable(1,8,0)
end
--触发修改密码界面
if screen == 2 then
if control == 5 and value == 1 then
old_password=read_byte_data
if get_text(2,3) == old_password then
local new_password=get_text(2,4)
old_password=new_password
flush_flash()
write_flash_string(byte_addr,old_password)
change_screen(0)
else
set_visiable(2,7,1)
end
end
else
set_visiable(2,7,0)
end
end
3、画面通知函数,在该项目主要用于在修改密码后将旧密码和新密码文本清除,以便下次进来时直接显示空白文本。
--当画面切换时,执行此回调函数,screen为目标画面。
function on_screen_change(screen)
if screen == 0 or screen == 3 then
set_text(2,3,"") --进入这两个页面就置密码文本为空
set_text(2,4,"")
end
end
三、验证
本工程已经验证成功,假设的初始密码是123456,在修改为其它数字密码时会保存在flash里面,如需要清除flash需要手动清除,在lua脚本里面清nil,或者在单片机里面写NULL。
附加
开发过程中遇到的bug
1、需要把打印信息屏蔽掉,不然会导致,频繁快速点击按键后会让文本名称彻底消失。
2、VisualTFT软件在配置触摸屏时需要把坐标上传关掉,在系统设置里也一样要关掉,不然在单片机中设置蜂鸣器等系统设置按钮时会让其它一些命令接收不到,因为它先接收了坐标指令,没有接收到后面真正的命令。
3、若需要在单片机中设置蜂鸣器,需注意蜂鸣器位数写的数据出错,须对照指令表,官方给到的SDK有误,以下是正确写法。
4、字体编码格式默认是GBK的格式,但是上位机下发下来的场景名称是UTF-8格式,需要手动转到GBK,但是不能直接转,需要先把UTF-8转为Unicode格式,再把Unicode通过一个字表转为GBK,字表大小约为170K,加入到单片机flash中会导致升级功能失效,所以不能直接转为GBK,要从屏幕方面入手,将字号改为UTF-8输入,不要把所有的字号都改,如下所示。