Luat 功能开发教程(十二) 界面显示(disp)

界面显示

简介

disp(界面显示)可以在LCD屏幕上显示内容,文字、图片、二维码都可以显示


API说明

API接口描述
disp.init(para)初始化LCD屏幕驱动
disp.clear()清空屏幕内容
disp.update()刷新屏幕,将内容显示到屏幕上
disp.puttext()显示文字
disp.setfontheight()缩放字体
disp.putimage()显示图片
disp.drawrect()显示矩形框(画一个框)
disp.setcolor()设置前景色
disp.setbkcolor()设置背景色
disp.putqrcode()显示二维码
disp.getlcdinfo()获取屏幕分辨率和位深度
disp.close()关闭显示模块

详细的API介绍见disp(ui) API章节

实现流程

  • 初始化LCD屏幕驱动
    使用disp.init() 初始化屏幕驱动
  • 清除屏幕
    使用disp.clear() 清除屏上显示的内容
  • 放置文字或图片
    使用disp.puttext(str, x, y)来放置文字
    使用disp.putimage(img, x, y)放置图片
  • 刷新屏幕
    使用disp.update()来刷新屏幕,在调用disp.clear()或放置文字之后,必须使用disp.update()后才可以清除屏幕或将放置的文字图片刷新到屏幕

显示二维码

点我去看生成二维码的章节
点我去看生成二维码的demo

示例

相关实例程序在脚本库的demo\ui文件夹下

初始化屏幕驱动

以\script_LuaTask_V2.3.8\demo\ui的demo为例。demo中在开机以后初始化lcd屏幕驱动,此功能演示选择的是LCD屏(ST7735)作为演示,我们选择对应的驱动“color_lcd_spi_st7735.lua”

module(...,package.seeall)

--[[
函数名:init
功能  :初始化LCD参数
参数  :无
返回值:无
]]
function init()
    local para =
    {
        width = 128, --分辨率宽度,128像素;用户根据屏的参数自行修改
        height = 160, --分辨率高度,160像素;用户根据屏的参数自行修改
        bpp = 16, --位深度,彩屏仅支持16位
        bus = disp.BUS_SPI4LINE, --LCD专用SPI引脚接口,不可修改
        xoffset = 2, --X轴偏移
        yoffset = 1, --Y轴偏移
        freq = 13000000, --spi时钟频率,支持110K到13M(即110000到13000000)之间的整数(包含110000和13000000)
        pinrst = pio.P0_6, --reset,复位引脚
        pinrs = pio.P0_1, --rs,命令/数据选择引脚
        --初始化命令
        --前两个字节表示类型:0001表示延时,0000或者0002表示命令,0003表示数据
        --延时类型:后两个字节表示延时时间(单位毫秒)
        --命令类型:后两个字节命令的值
        --数据类型:后两个字节数据的值
        initcmd =
        {
            0x00020011,
            0x00010078,
            --0x00020021, -- 反显
            0x000200B1,
            0x00030002,
            0x00030035,
            0x00030036,
            0x000200B2,
            0x00030002,
            0x00030035,
            0x00030036,
            0x000200B3,
            0x00030002,
            0x00030035,
            0x00030036,
            0x00030002,
            0x00030035,
            0x00030036,
            0x000200B4,
            0x00030007,
            0x000200C0,
            0x000300A2,
            0x00030002,
            0x00030084,
            0x000200C1,
            0x000300C5,
            0x000200C2,
            0x0003000A,
            0x00030000,
            0x000200C3,
            0x0003008A,
            0x0003002A,
            0x000200C4,
            0x0003008A,
            0x000300EE,
            0x000200C5,
            0x0003000E,
            0x00020036,
            0x000300C0,
            0x000200E0,
            0x00030012,
            0x0003001C,
            0x00030010,
            0x00030018,
            0x00030033,
            0x0003002C,
            0x00030025,
            0x00030028,
            0x00030028,
            0x00030027,
            0x0003002F,
            0x0003003C,
            0x00030000,
            0x00030003,
            0x00030003,
            0x00030010,
            0x000200E1,
            0x00030012,
            0x0003001C,
            0x00030010,
            0x00030018,
            0x0003002D,
            0x00030028,
            0x00030023,
            0x00030028,
            0x00030028,
            0x00030026,
            0x0003002F,
            0x0003003B,
            0x00030000,
            0x00030003,
            0x00030003,
            0x00030010,
            0x0002003A,
            0x00030005,
            0x00020029,
        },
        --休眠命令
        sleepcmd = {
            0x00020010,
        },
        --唤醒命令
        wakecmd = {
            0x00020011,
        }
    }
    disp.init(para)
    disp.clear()
    disp.update()
end

--控制SPI引脚的电压域
pmd.ldoset(15,pmd.LDO_VLCD)
init()

对于不同的屏幕有不同的驱动,目前demo里有如下几种屏幕的驱动

color_lcd_spi_gc9a01.lua
color_lcd_spi_gc9106l.lua
color_lcd_spi_ILI9341.lua
color_lcd_spi_st7735.lua
mono_lcd_spi_ssd1306.lua

LCD屏幕驱动初始化完毕后,接下来就可以在屏幕上显示内容了

显示文字

我们可以使用disp.puttext()在屏幕上显示文字,也可以使用disp.setcolor()更改文字颜色与disp.setbkcolor()更改背景颜色,如下代码

module(...,package.seeall)
function textColorTest() 
 --将屏幕背景色设置为黑色
      disp.setbkcolor(0x0000)
 --刷新内容先需要先清除一下屏幕
      disp.clear()  
 --颜色值为16位的565颜色值,565颜色值由RGB换算.
 --RGB值第一个字节取高五位,第二个字节取高六位,第三个字节取高五位。
 --这里用的字体颜色为粉色,RGB值为(255, 101, 230),换算成565值为0XFB3C
      disp.setcolor(0XFB3C)
--放置文字,只能放置GB2312编码的文字,其他的会乱码
--此处编写代码时编辑器所用的文字编码格式为UTF8,使用接口将文字编码格式转为GB2312
      disp.puttext(common.utf8ToGb2312("屏幕上可以看到我"), 64, 80)
--使用此接口刷新屏幕
      disp.update()
end
--执行函数
textColorTest()

image.png

显示图片

我们可以使用disp.putimage()在屏幕上显示图片,如下代码

module(...,package.seeall)
function putImageTest() 
    --刷新内容先需要先清除一下屏幕
    disp.clear()
    --这张图片是在格式网站上裁剪后转为png格式的图片,下载脚本时将图片一起下进模块
    --图片所在路径为"/lua" 
    disp.putimage("/lua/mengqi.png", 0, 0)
    disp.update()
end
--执行函数
putImageTest()

image.png

画框

我们可以使用disp.drawrect()在屏幕上画框,如下代码

module(...,package.seeall)
function putFrameTest() 
    --刷新内容先需要先清除一下屏幕
    disp.clear()
    --开始画框
    disp.drawrect(8, 10, 120, 26,0x0000)
    disp.drawrect(8, 28, 120, 44,0xF800)
    disp.drawrect(8, 46, 120, 62,0x001F )
    disp.drawrect(8, 64, 120, 80,0x07E0)
    disp.drawrect(8, 82, 120, 98,0XFB3C)
    disp.drawrect(8, 100, 120, 116,0xFFE0)
    disp.drawrect(8, 118, 120, 134,0x7BE0)
    disp.drawrect(8, 136, 120, 152,0x780F)
    --刷新显示
    disp.update()
end
--执行函数
putFrameTest()

image.png

常见问题

1、如何设置字体大小?

core中的默认支持的字体大小为16
如果需要调整为其他大小,使用disp.setfontheight(x)接口设置,x为字号大小

2、支持的屏的分辨率最高到多少?

240*320

3、如何生成ascii码可见字符的字库文件?

参考:ascii字库生成方式.zip

4、如何旋转屏幕内容?

用ST7735来做例子
更改驱动代码就可实现,如下

--先找到0x00020036和0x000200E0
--中间0x000300C0就是控制屏幕旋转方向的命令
--C0/00/A0/60或C8/08/A8/68就可以控制屏幕旋转方向
--如
0x000300A0

image.png

5、一款新屏,例如347D的屏能驱动吗?

目前 Air724 所有支持的屏幕驱动已经添加到了 demo\ui 路径下,可以先在 demo 中查看自己需要的屏幕驱动是否已经实现。
如果屏幕驱动未实现,但是屏幕接口属于spi,或者i2c,那么用户需要自己根据屏幕厂家提供的 datasheet 进行驱动编写了。
若在未支持的屏幕中驱动调试碰到问题,也可以将屏幕寄给我们进行驱动调试。

6、Air724有适配过比1.8寸更大的屏吗?

这个是跟分辨率相关的,和屏幕尺寸无关,Air724 支持的屏幕分辨率最大是 240*320,如果这个分辨率的屏大于 1.8寸,同样也是可以驱动的。

相关资料

dispAPI说明文档

相关开发板资料以及购买链接

Air724UG开发板购买链接
Air724 开发板使用说明

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值