X-MagicBox-820的luatOS之路连载系列2
这块MagicBox小巧但外设丰富,盖板上的小液晶屏竟有240*240的分辨率。点亮后若是用最小字体,真有看瞎老王的不瞎之眼之势。
这种屏在某宝也是比较多的,大概就是长这样子:

我们这个820的盖板上的液晶用的就是常见的ST7789控制器,而且驱动程序也已经在资料中了,那么亮屏就是小菜一碟了。模块本身就内置了专用于LCD的SPI外设,只需要配置额外的复位引脚和命令控制选择引脚。
完整的初始化程序如下代码:
function init()
local para =
{
width = 240, --分辨率宽度,128像素;用户根据屏的参数自行修改
height = 240, --分辨率高度,160像素;用户根据屏的参数自行修改
bpp = 16, --位深度,彩屏仅支持16位
bus = disp.BUS_SPI4LINE, --LCD专用SPI引脚接口,不可修改
xoffset = 0, --X轴偏移
yoffset = 0, --Y轴偏移
freq = 50000000, --spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000)
pinrst = pio.P0_6, --reset,复位引脚
pinrs = pio.P0_1, --rs,命令/数据选择引脚/268开发板为15
--初始化命令
--前两个字节表示类型:0001表示延时,0000或者0002表示命令,0003表示数据
--延时类型:后两个字节表示延时时间(单位毫秒)
--命令类型:后两个字节命令的值
--数据类型:后两个字节数据的值
initcmd =
{
0x00010000 + 60,
0x00020011,
0x00020036,
0x00030000 + 0,--横屏控制 用盖板要用60 直接接屏用00
0x0002003A,
0x00030005,
0x000200B2,
0x0003000C,
0x0003000C,
0x00030000,
0x00030033,
0x00030033,
0x000200B7,
0x00030035,
0x000200BB,
0x00030032,
0x000200C2,
0x00030001,
0x000200C3,
0x00030015,
0x000200C4,
0x00030020,
0x000200C6,
0x0003000F,
0x000200D0,
0x000300A4,
0x000300A1,
0x000200E0,
0x000300D0,
0x00030008,
0x0003000E,
0x00030009,
0x00030009,
0x00030005,
0x00030031,
0x00030033,
0x00030048,
0x00030017,
0x00030014,
0x00030015,
0x00030031,
0x00030034,
0x000200E1,
0x000300D0,
0x00030008,
0x0003000E,
0x00030009,
0x00030009,
0x00030015,
0x00030031,
0x00030033,
0x00030048,
0x00030017,
0x00030014,
0x00030015,
0x00030031,
0x00030034,
0x00020021,
0x00020029,
},
--休眠命令
sleepcmd = {
0x00020010,
},
--唤醒命令
wakecmd = {
0x00020011,
}
}
disp.init(para)
disp.setbkcolor(0)
disp.clear()
disp.update()
end
此外,要注意设置一下SPI引脚的电压域。要留意低功耗的话,还可以使用PM控制外设的休眠。不过要在准备显示内容的时候记得退出休眠。
--控制SPI引脚的电压域
pmd.ldoset(15,pmd.LDO_VLCD)--2g为7
pm.wake("lcd_init")
init()
pm.sleep("lcd_init")
以上代码作为一个模块,可以在其他文件使用Lua的"require"加载模块,这样就可以使用模块中的全局内容,比如调用全局函数。可以类比C的"#include"来理解。
完成了以上部分,就可以测试屏幕显示了。LCD的几个API如下:

从字面就可以把功能看的差不多了,接下来直接添加几行内容到屏幕上测试一下驱动模块。为了便于老王计划的轨迹记录这个小制作的进行,这里直接把观测GPS要显示的内容展示到屏幕上来。
大致的内容如下,分行显示字符串:
disp.puttext(common.utf8ToGb2312("定位功能-"),0,1)
disp.puttext(common.utf8ToGb2312("定位状态-"),0,26)
disp.puttext(common.utf8ToGb2312("经度信息-"),0,52)
disp.puttext(common.utf8ToGb2312("纬度信息-"),0,78)
disp.puttext(common.utf8ToGb2312("海拔高度-"),0,106)
disp.puttext(common.utf8ToGb2312("当前速度-"),0,134)
disp.puttext(common.utf8ToGb2312("当前角度-"),0,162)
disp.puttext(common.utf8ToGb2312("可见卫星-"),0,190)
disp.puttext(common.utf8ToGb2312("定位卫星-"),0,217)
disp.puttext(gps.getLocation().lngType..":"..string.sub(gps.getLocation().lng,1,7),130,52)
disp.puttext(gps.getLocation().latType..":"..string.sub(gps.getLocation().lat,1,6),130,78)
disp.puttext(tostring(gps.getAltitude())..common.utf8ToGb2312("米"),130,106)
disp.puttext(tostring(gps.getSpeed())..common.utf8ToGb2312("千米/时"),130,134)
disp.puttext(tostring(gps.getCourse())..common.utf8ToGb2312("度"),130,162)
disp.puttext(tostring(gps.getViewedSateCnt())..common.utf8ToGb2312("个"),130,190)
disp.puttext(tostring(gps.getUsedSateCnt())..common.utf8ToGb2312("个"),130,217)
以上显示代码放在一个任务中去保持LCD的刷新即可。看看实物上的效果如何

很明显这样的内容和效果是符合预期的,中间微调了下像素布局。有了屏幕,就有了更多的趣味,比如音乐,游戏等,老王慢慢琢磨下去,LuatOS还是有一定优势的。
X-MagicBox-820的luatOS之路连载系列2的更多相关文章
- X-MagicBox-820的luatOS之路连载系列6
继上次用Qt实现了显示地图和MQTT通信之后(X-MagicBox-820的luatOS之路连载系列5),说是要研究下地图的开放接口,也看了标记点和线的方法(地图上自定义标记点和轨迹线的实现).这次就 ...
- X-MagicBox-820的luatOS之路连载系列4
上次说到定位成功后,显示的数据准确性问题.专门查询了下我所在地区的经纬度信息. MagicBox的显示数据是这样的: 网络上查到的经纬度数据是这样的: 可以看出定位精度还可以,毕竟我这个查询的数据没有 ...
- [js高手之路] es6系列教程 - 对象功能扩展详解
第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...
- [js高手之路]设计模式系列课程-发布者,订阅者重构购物车
发布者订阅者模式,是一种很常见的模式,比如: 一.买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,使用面积等信息,他充当了订阅者的角色 中介拿到卖主的房 ...
- [js高手之路] es6系列教程 - 迭代器与生成器详解
什么是迭代器? 迭代器是一种特殊对象,这种对象具有以下特点: 1,所有对象都有一个next方法 2,每次调用next方法,都会返回一个对象,该对象包含两个属性,一个是value, 表示下一个将要返回的 ...
- [js高手之路] 设计模式系列课程 - jQuery的extend插件机制
这里在之前的文章[js高手之路] 设计模式系列课程 - jQuery的链式调用与灵活的构造函数基础上增加一个extend浅拷贝,可以为对象方便的扩展属性和方法, jquery的插件扩展机制,大致就是这 ...
- [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解
接着上文[js高手之路] es6系列教程 - 迭代器与生成器详解继续. 在es6中引入了一个新的循环结构for ....of, 主要是用来循环可迭代的对象,那么什么是可迭代的对象呢? 可迭代的对象一般 ...
- [js高手之路] vue系列教程 - 事件专题(4)
本文主要讲解事件冒泡,事件绑定的简写,事件默认行为,按键码等一系列与事件相关的知识. 一.事件绑定的简写,@事件类型. 之前我的[js高手之路] vue系列教程 - vue的事件绑定与方法(2) 用 ...
- [js高手之路]设计模式系列课程-组合模式+寄生组合继承实战新闻列表
所谓组合模式,就是把一堆结构分解出来,组成在一起,现实中很多这样的例子,如: 1.肯德基套餐就是一种组合模式, 比如鸡腿堡套餐,一般是是由一个鸡腿堡,一包薯条,一杯可乐等组成的 2.组装的台式机同理, ...
随机推荐
- 寻找写代码感觉(五)之Mybatis官方代码生成器的使用
一.Mybatis Generator生成器 见名知意,官方给出的代码生成器.好处就是不用自己写实体类.接口.xml文件了,应对简单增删改查是可以的.复杂的还是需要自己手写sql的. 二.Mybati ...
- Serverless 在大规模数据处理的实践
作者 | 西流 阿里云技术专家 前言 当您第一次接触 Serverless 的时候,有一个不那么明显的新使用方式:与传统的基于服务器的方法相比,Serverless 服务平台可以使您的应用快速水平扩展 ...
- bzoj1341 名次排序问题rank sorting(dp,考虑到对未来的贡献)
QWQ啊 这个题可以说是我目前碰到过的最难理解的dp之一了. 题目大意: 已知参赛选手的得分,你的任务是按照得分从高到底给出选手的排名.遗憾的是,保存选手信息的数据结构只支持 一种操作,即将一个选手从 ...
- 枚举类型(enum)
关于枚举 枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性.安全 ...
- Redis大集群扩容性能优化实践
一.背景 在现网环境,一些使用Redis集群的业务随着业务量的上涨,往往需要进行节点扩容操作. 之前有了解到运维同学对一些节点数比较大的Redis集群进行扩容操作后,业务侧反映集群性能下降,具体表现在 ...
- Spring框架访问数据库的两种方式的小案例
1.1 以Xml的方式访问数据库的案例 要以xml的方式访问数据库需要用到JdbcTemplate ,因为 JdbcTemplate(jdbc的模板对象)在Spring 中提供了一个可以操作数据库的对 ...
- Django开发个人博客入门学习经验贴
[写在前面] 入门学习搭建个人博客系统首先还是参考大佬们的经验,记得刚入手Django的时候,一篇博客大佬说过一句话,做技术的不要一开始就扎头于细节中,先把握整体框架,了解这个对象之后再去了解细节,进 ...
- 用css写三角形
html部分 <div class="triangle></div> css部分 .triangle{ width:0; height:0; overflow:hid ...
- 【Spring】IoC容器 - 依赖查找
前言 上一篇文章已经学习了[IoC的主要实现策略]有2种: 1.依赖查找 2.依赖注入 这里稍加详细的介绍一下依赖查找 1.依赖查找的方式 依赖查找的方式可以以多种维度来划分: 1.按名称/类型/注解 ...
- docker逃逸漏洞复现(CVE-2019-5736)
漏洞概述 2019年2月11日,runC的维护团队报告了一个新发现的漏洞,SUSE Linux GmbH高级软件工程师Aleksa Sarai公布了影响Docker, containerd, Podm ...