Mizar32/LCD
Mizar32 LCD显示屏是一个附加的硬件模块,它可以插入Mizar32主板的六个总线连接器中的任何一个。它有一个16列2行的液晶显示屏,每个位置可以显示一系列字符中的一个,它有六个按钮:左、右、上、下、选择和重置。
红色的重置按钮重置控制显示屏的板载PIC微控制器,而五个按钮可以通过I2C总线由主处理器读取。
LCD显示屏由一个PIC 16F84微控制器驱动,它是一个低功耗处理器,运行由Simplemachines编写的程序,与Ampire 162B LCD面板通信,检测按钮按下并通过I2C总线与主AVR32处理器通信。
LCD面板本身包含另一个微处理器,SED 1278,它接收来自PIC的指令,为LCD面板生成字符,并保持显示屏刷新。它有一个40个字符乘2行的内部字符存储器,其中16x2在任何时候都显示在LCD屏幕上。SED 1278的程序位于ROM中,无法更改。
与LCD显示屏通过I2C通信时,Mizar32的I2C总线速度必须设置为不超过50kHz。如果Mizar32以高达100kHz的速度与其他I2C设备通信,这不会干扰LCD显示屏:它能够识别自己的地址(并拒绝所有其他地址)高达100kHz,但只能以最大50kHz的速度处理数据包。
LCD显示模块需要Mizar32从其7.2伏直流电源插座供电。如果你希望从Mizar32的USB电源供电,你可以在LCD板的底部焊接一根电线,从BUS5连接器(靠近板边缘的中心)的引脚1连接到LCD1连接器(靠近“左”按钮)的引脚2。
该板响应8位I2C指令字节0x7C到0x7F(7位从机地址62和63)
指令 | 功能 |
---|---|
0x7C |
向LCD发送指令 |
0x7D |
读取LCD RAM地址 |
0x7E |
向LCD发送数据字节 |
0x7F |
读取按钮开关 |
物理上LCD显示屏有2行16个字符,但内部它有一个字符存储器,每行可以容纳40个字符,而16x2的可见显示屏只显示内部字符存储器的一部分。
打印超过第一行字符存储器的第40个字符会自动传递到第二行的开头,而超过第二行的第40个字符则会从第一行的开头继续。同样,当光标从任一行的第一个字符向左移动时,它会移动到另一行的第40个位置。
对于SED1278,指令字节0是一个空操作。在这里,相反,PIC识别它是一个特殊情况,并重置SED
- 清除屏幕
- 不显示光标
- 两行字符
- 8x5像素字符字体
- 发送字符数据时光标向右移动;显示屏不移位
你可以使用以下函数来实现这一点
语言 | 功能 |
---|---|
eLua | mizar32.lcd.reset()
|
PicoLisp | (mizar32-lcd-reset)
|
指令字节1在字符存储器的每个位置写入空格,将光标移动到字符存储器的第一行第一列,并重置显示屏移位,以便内部字符存储器的每一行的第一个字符与物理显示屏的第一个字符对齐。
语言 | 功能 |
---|---|
eLua | mizar32.lcd.clear()
|
PicoLisp | (mizar32-lcd-clear)
|
指令字节2:返回主页
[edit | edit source]命令字节2将光标移动到字符内存的第一行第一列,并重置显示屏偏移。它与“清除显示屏”相同,但不会清除字符内存的内容。
语言 | 功能 |
---|---|
eLua | mizar32.lcd.home()
|
PicoLisp | (mizar32-lcd-home)
|
数据输入模式
[edit | edit source]命令字节4:打印时,光标向右移动
[edit | edit source]在发送命令字节4后,向LCD显示屏打印字符会使光标向右移动一个位置:如果光标超出物理显示屏的右边缘,它将继续写入内部字符内存,但光标和这些字符不会显示在物理显示屏上。
命令字节5:打印时,显示屏向右移
[edit | edit source]这是另一种以相反顺序打印文本的方法,这次将光标保持在显示屏上的相同位置,并在每次打印字符时将文本向右移动一个位置。如果您处于此模式,光标位于(1,1),并且打印“Hello
”,您将最终得到第一行第五个位置的H
,以及第二行前四个位置的“olle
”,因为超出40列字符内存的任一端始终从另一行的对端继续。
命令字节6:打印时,光标向左移动
[edit | edit source]当发送命令字节6后,打印字符会使光标向左移动一个位置,因此如果您打印“Hello”,则显示屏上的文字将以相反顺序显示“olleH
”,光标位于最后一个字符的左侧。要查看这一点,您首先必须将光标移动到显示屏的右侧,否则它会立即超出显示屏的左边缘,只留下一个“H”可见,并在第二行末尾打印“olle
”(超出屏幕)。
命令字节7:打印时,显示屏向左移
[edit | edit source]在发送命令字节7后,每次将字符发送到显示屏时,光标将保持在相同的物理位置,所有显示的字符都向左移动一个位置。另一种理解方式是,16x2的物理显示屏在虚拟显示屏上向右移动一个位置,例如,如果它显示的是第1-16列,那么它就会显示第2-17列。要查看打印的文本,您首先必须将光标移动到显示屏的右侧,否则所有显示的内容都会立即超出显示屏的左边缘,并且只有在打印了另外24个字符后才会重新出现在右边缘(24是因为虚拟显示屏宽40个字符,物理显示屏宽16个字符)。
在Alcor6L中,可以使用以下函数选择这四个选项
语言 | 功能 | 函数域 |
---|---|---|
eLua | mizar32.lcd.setup(display_shift, right_to_left) |
{true, false}
|
PicoLisp | (mizar32-lcd-setup display-shift right-to-left) |
{T, NIL}
|
默认情况下,显示屏不会移动,字符从左到右打印。
光标模式
[edit | edit source]一起打开和关闭显示屏,并说明要显示的光标类型。
命令字节8:关闭显示屏
[edit | edit source]这将关闭显示屏,显示空白面板。但是,它会记住40x2字符内存中的数据、用户定义的字符、光标位置以及在物理显示屏上显示的字符内存的哪一部分。
命令字节12:打开显示屏,不显示光标
[edit | edit source]如果显示屏已关闭,则将其重新打开,但不会显示光标。
命令字节13:打开显示屏并显示闪烁块状光标
[edit | edit source]如果显示屏已关闭,则将其重新打开,并在光标位置显示闪烁的黑色块。
命令字节14:打开显示屏并显示下划线光标
[edit | edit source]如果显示屏已关闭,则将其重新打开,并在光标位置,字符单元的底线将全部变黑。
命令字节15:打开显示屏并显示下划线和闪烁块状光标
[edit | edit source]在这种情况下,您将同时获得持续的下划线和闪烁的块。我不确定为什么您会想要那样...
在Alcor6L中,可以使用以下函数选择光标类型
语言 | 功能 | 函数域 |
---|---|---|
eLua | mizar32.lcd.cursor(what) |
what = {"none", "line", "block"}
|
PicoLisp | (mizar32-lcd-cursor 'what) |
what = {none, line, block}
|
您还可以使用以下命令打开和关闭LCD显示屏
语言 | 功能 | 函数域 |
---|---|---|
eLua | mizar32.lcd.display(what) |
what = {"on", "off"}
|
PicoLisp | (mizar32-lcd-display 'what) |
what = {on, off}
|
当您重新打开显示屏时,Alcor6L会记住光标类型并将其恢复。这适用于所有Alcor6L语言。
光标或显示屏偏移
[edit | edit source]还有另一种方法可以将40列内存的可见部分向左或向右移动,以及将光标向左或向右移动一个位置。
命令字节16:将光标向左移动一个位置
[edit | edit source]这会将光标在内存和显示屏上都向左移动一个字符位置。如果它超出显示屏的可见部分,则光标不可见;如果它从第1列向左移动,则会移动到另一行的第40列。
命令字节20:将光标向右移动一个位置
[edit | edit source]这会将光标在内存和显示屏上都向右移动一个字符位置。如果它超出显示屏的可见部分,则光标不可见;如果它从第40列向右移动,则会移动到另一行的第1列。
在Alcor6L中,可以使用以下函数来实现这些操作
语言 | 功能 | 函数域 |
---|---|---|
eLua | mizar32.lcd.cursor(dir) |
dir = {"left", "right"}
|
PicoLisp | (mizar32-lcd-cursor 'dir) |
dir = {left, right}
|
命令字节24:将显示屏向左移动一个位置
[edit | edit source]这会改变虚拟显示屏的哪一部分在物理显示屏上可见。它会将所有可见字符向左移动一个位置,并在右边缘显示虚拟显示屏上的一列新字符。
移动显示屏时,光标将保持在内部字符内存中的相同位置,因此在物理显示屏上,它也会看到向左移动一个位置。
命令 28 可以实现相反的效果,它将显示的字符和光标向右移动一位,并在左侧显示两个新字符。光标仍然停留在之前所在的字符上。
在 Alcor6L 中,可以使用以下方法:
语言 | 功能 | 函数域 |
---|---|---|
eLua | mizar32.lcd.display(dir) |
dir = {"left", "right"}
|
PicoLisp | (mizar32-lcd-display 'dir) |
dir = {left, right}
|
这些命令的第 4、8 和 16 位设置显示工作模式。
位 | 含义 | 值 | |
---|---|---|---|
0 | 1 | ||
4 | 显示字体类型 | 5x8 | 5x11 |
8 | 显示行数 | 1 行 | 2 行 |
16 | 接口数据长度 | 4 位 | 8 位 |
对于 Mizar32 显示模块,您需要 5x8、2 行、4 位,这是上电时的默认设置。
命令字节 64 到 127 将光标从显示屏移动到字符生成器 RAM。以下数据字节不会在屏幕上显示任何内容,而是指示 8 个用户定义字符(代码为 0 到 7(以及 8 到 15))的八个像素中哪些是透明的,哪些是黑色的。
第一个用户定义字符的定义位于位置 64 到 71,第二个位于 72 到 79,依此类推。每个字节定义字符的一行,从上到下,五个最低有效位定义每行的五个像素,顺序为 16、8、4、2、1,从左到右。一个“1”位显示为黑色。
例如,要将字符 0 和 1 定义为指向左边的黑色三角形和指向右边的黑色三角形。
1 6 |
8 | 4 | 2 | 1 | 总计 | 1 6 |
8 | 4 | 2 | 1 | 总计 |
---|---|---|---|---|---|---|---|---|---|---|---|
* | 1 | * | 16 | ||||||||
* | * | 3 = 2 + 1 | * | * | 24 = 16 + 8 | ||||||
* | * | * | 7 = 4 + 2 + 1 | * | * | * | 28 = 16 + 8 + 4 | ||||
* | * | * | * | 15 = 8 + 4 + 2 + 1 | * | * | * | * | 30 = 16 + 8 + 4 + 2 | ||
* | * | * | 7 = 4 + 2 + 1 | * | * | * | 28 = 16 + 8 + 4 | ||||
* | * | 3 = 2 + 1 | * | * | 24 = 16 + 8 | ||||||
* | 1 | * | 16 | ||||||||
0 | 0 |
您将发送命令字节 64,后面跟着 1、3、7、15、7、3、1、0、16、24、28、30、28、24、16、0,要返回到常规的字符写入模式以显示它们,您需要发出一个“设置 DD RAM 地址”命令字节(参见下一项)。如果字符已在屏幕上显示,则在重新定义后,它们的形状会立即发生变化。在 Alcor6L 中,您可以使用以下函数调用:
对于指向左边的三角形,
语言 | 示例 |
---|---|
eLua | mizar32.lcd.definechar(0, {1, 3, 7, 15, 7, 3, 1})
|
PicoLisp | (mizar32-lcd-definechar 0 (1 3 7 15 7 3 1))
|
对于指向右边的三角形,
语言 | 示例 |
---|---|
eLua | mizar32.lcd.definechar(1, {16, 24, 28, 30, 28, 24, 16})
|
PicoLisp | (mizar32-lcd-definechar 1 (16 24 28 30 28 24 16))
|
与命令字节接口不同,Alcor6L 的 definechar
函数用于 LCD 会将您切换回正常的字符写入模式,并将文本光标保留在它所在的位置。
如果命令字节的最高位被设置,则较低的 7 位设置光标在数据存储器中的位置,下一个字符将在显示器的字符存储器中存储到该位置(当显示屏被移动以显示字符存储器的那部分时,它也会显示在屏幕上)。
代码 | 光标移动到哪里 |
---|---|
128-167 | 第一行 40 个字符 |
192-231 | 第二行 40 个字符 |
我不知道如果设置 DD RAM 地址为 168-191 或 232-255 会发生什么。
在 Alcor6L 中,您可以使用以下方法:
语言 | 功能 | 函数域 |
---|---|---|
eLua | mizar32.lcd.goto(row, column) |
row = {1, 2}, column = {1, 2, .., 40}
|
PicoLisp | (mizar32-lcd-goto row column) |
row = {1, 2}, column = {1, 2, .., 40}
|
I2C 命令 0x7D
读取光标在字符存储器中的当前位置,并将其通过 I2C 总线发送回来。
这是下一个字符将存储到的内部存储器地址,如果您发送一个数据字节,则返回的字节是 0 到 127 之间的一个值,对应于上面“设置 DD RAM 地址”命令中使用的代码的较低的 7 位。在 Alcor6L 中,您可以使用以下方法:
在 eLua 中,以下函数将返回行值为 1 或 2,列值为 1 到 40 之间的值。
语言 | 示例 |
---|---|
eLua | row, column = mizar32.lcd.getpos()
|
在 PicoLisp 中,以下函数将返回一个列表,其 car
为 1 或 2,cadr
为 1 到 40 之间的值。
语言 | 示例 |
---|---|
PicoLisp | (setq pos-tab (mizar32-lcd-getpos))
|
I2C 命令 0x7E
将数据发送到 LCD 显示屏。
您发送的每个数据字节通常在 LCD 显示屏上显示一个字符,并将光标向右移动一位。
代码 | 显示内容 |
---|---|
0-7 | 八个用户定义字符 |
8-15 | 相同的八个用户定义字符 |
16-31 | 空白 |
32-126 | 标准 ASCII 字符 |
127 | |
128-159 | 空白 |
160-255 | 汉字和特殊符号 |
例外情况是,当您刚刚发送了命令字节 64-127 之一后,会将以下数据字节设置为用户定义字符的像素(参见上面的“设置 CG RAM 地址”)。
在 Alcor6L 中,您可以使用以下函数之一:
语言 | 示例 |
---|---|
eLua | mizar32.lcd.print(data)
|
PicoLisp | (mizar32-lcd-prinl data)
|
其中 data
是一个或多个字符串和数字的列表,用逗号隔开。字符串是显示 ASCII 文本消息的常规方法,而数值数据应为 0 到 255 之间的值,并从上面的表格中显示单个字符。要打印十进制整数,您需要先进行格式化。例如,如果变量 gen
包含一个适合 3 个字符的整数(0-999),您可以使用:
语言 | 示例 |
---|---|
eLua | mizar32.lcd.print(string.format("%3d", gen))
|
PicoLisp | (mizar32-lcd-prinl (format gen))
|
I2C 命令 0x7F
获取 LCD 模块的按钮开关的当前状态,作为一个字节,其较低的 5 位将被设置为某些组合,以指示当前按下了哪些按钮。
键 | 选择 | 左 | 右 | 上 | 下 |
位 | 1 | 2 | 4 | 8 | 16 |
显示屏可以可靠地检测到是否按下了选择按钮,以及其他四个按钮中的任意两个。如果按下了其他三个按钮,则模块将返回一个字节,表示所有四个按钮都被按下(这是由于按钮在电路板上连接的方式造成的,因此您只需使用四根线就能获得五个按钮)。
在 Alcor6L 中,您可以使用以下方法:
语言 | 示例 |
---|---|
eLua | buttons = mizar32.lcd.buttons()
|
PicoLisp | (setq lcd-buttons (mizar32-lcd-buttons))
|
每个函数都返回一个字符串,其中包含 L
、R
、U
、D
和 S
字符的选择,以指示左、右、上、下和选择按钮当前是否被按下。如果没有按钮被按下,则返回一个空字符串。硬件允许可靠地检测选择按钮以及其他四个按钮中的最多两个,但如果按下了左、右、上和下三个按钮,则会返回所有四个按钮。
如果您胆子很大,可以使用上面的代码和 eLua 的 i2c
平台模块原语与 LCD 显示模块进行通信。例如,要显示“Hello
”,您可以说:
在 eLua 中
i2c.setup(0, 50000) i2c.start(0) ack = i2c.address(0, 63, i2c.TRANSMITTER) if ack then i2c.write(0, "Hello") end i2c.stop(0)
在 PicoLisp 中
(de mizar32-lcd-write-i2c (x) (i2c-setup 0 50000) (i2c-start 0) (if (not (= 0 (i2c-address 0 63 *i2c-transmitter*))) (i2c-write 0 x) ) (i2c-stop 0) ) (mizar32-lcd-write-i2c 'Hello)
SimpleMachines 为 Alcor6L(Mizar32 的 LCD 模块)添加了一个平台模块,如上所述,它为您处理所有 I2C 魔法和特殊定时。使用此模块来实现上述功能,您只需说:
语言 | 示例 |
---|---|
eLua | mizar32.lcd.print("Hello")
|
PicoLisp | (mizar32-lcd-prinl 'Hello)
|
它提供了以下功能。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.reset()
|
PicoLisp | (mizar32-lcd-reset)
|
初始化显示屏,将所有内容重置为初始状态:清除屏幕、没有光标、显示 40 列存储器中的第 1-16 列、准备在 (1,1) 处打印、从左到右写入文本,并在每个字符之后将光标向右移动一位。您不必在程序开始时调用重置,但是这样做可以确保您的程序即使显示屏处于之前的运行过程中遗留的奇怪状态也能正常工作。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.setup(display_shift, right_to_left)
|
PicoLisp | (mizar32-lcd-setup display_shift right_to_left)
|
这可以用来设置 LCD 显示屏的一些更奇特的运行模式。这两个参数都是可选的,如果你省略它们,它们会默认设置为 false,这将设置合理的模式。
display_shift
:如果为真,那么在你随后打印的每个字符中,光标将像往常一样在字符存储器中移动一个位置,但显示屏的内容也会在水平方向上移动一个位置,方向相反,以便光标保持在物理显示屏的同一列。这可以用来实现“滚动文本”效果。但是请注意,当光标从第 40 列移到第 1 列或反过来时,它会翻转到另一行。
right_to_left
:如果为真,文本将从右到左打印:光标将在字符存储器中向左移动一个位置,并且如果也启用了显示屏移位,显示屏的内容将向右移动,以便光标停留在屏幕上的同一列。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.clear()
|
PicoLisp | (mizar32-lcd-clear)
|
清除显示屏,将光标移到左上角(位置 1,1)并重置显示屏移位以显示第 1 列到第 16 列。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.home()
|
PicoLisp | (mizar32-lcd-home)
|
将光标移到左上角(位置 1,1)并重置显示屏移位。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.goto( row, column )
|
PicoLisp | (mizar32-lcd-goto row column)
|
将光标移到指定的行和列。
row
:一个数字(1 或 2),表示要移动到的行。column
:一个数字(1 到 40),表示该行在字符存储器中的位置。
语言 | 示例 | 返回值 |
---|---|---|
eLua | row, column = mizar32.lcd.getpos() |
row, column
|
PicoLisp | (setq lcd-pos (mizar32-lcd-getpos)) |
(car lcd-pos), (cadr lcd-pos)
|
返回当前光标位置。
符号 | 含义 |
---|---|
row |
一个数字(1 或 2),表示当前行。 |
column |
一个数字(1 到 40),表示字符存储器中的当前列。 |
语言 | 示例 |
---|---|
eLua | mizar32.lcd.print([data1] [, data2] ... [datan])
|
PicoLisp | (mizar32-lcd-prinl [data1] [data2] ... [datan])
|
从当前光标位置开始写入 LCD 字符存储器。光标将为每个打印的字符前进一个位置。当它超过第 40 列时,它会移到另一行的第 1 列(反之亦然,从右到左打印时)。
每个数据项可以是字符串或整数。字符串是显示 ASCII 文本消息的正常方式。整数参数的值应为 0 到 255,以显示单个字符,该字符可以是用户定义的字符 0-7、常规 ASCII 字符 32-125 以及 126 和 127(用于指向右和指向左的箭头)以及代码为 160-255 的中文、希腊语和数学符号。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.cursor(what)
|
PicoLisp | (mizar32-lcd-cursor what)
|
设置在光标位置显示的光标类型,或将光标向左或向右移动。
what
是一个字符串,用来说明应该做什么。
- "none"、"line" 或 "block" 将分别在光标位置显示无可见光标、常量下划线或闪烁的实心块。
- "left" 或 "right" 将光标在字符存储器和显示屏上向左或向右移动一个位置,而不改变底层字符。在这种情况下,显示屏永远不会移动,并且像往常一样,光标在一行的第 40 列和另一行的第 1 列之间换行。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.display(what)
|
PicoLisp | (mizar32-lcd-display what)
|
打开或关闭物理显示屏,或将显示的字符向左或向右移动。
what
是一个字符串,用来说明应该做什么。
- "off" 和 "on" 分别关闭或重新打开物理显示屏。当显示屏关闭时,它看起来是空白的,但字符存储器的内容、光标的位置和类型、用户定义的字符和设置模式都会被记住,你可以写入字符存储器并执行所有其他操作,即使显示屏关闭。这允许你在没有让观看者看到太多闪烁的情况下更新显示屏。
- "left" 或 "right" 将显示的字符向左或向右移动一个位置。例如,如果它正在显示通常的第 1-16 列,而你说 mizar32.lcd.display("left")(或其他语言中的等效语句),那么它将显示第 2-17 列:可见字符向左移动,但字符存储器上的窗口向右移动。
语言 | 示例 |
---|---|
eLua | mizar32.lcd.definechar(code, glyph)
|
PicoLisp | (mizar32-lcd-definechar code glyph)
|
对八个用户可定义字符中的一个进行编程,其代码为 0 到 7。定义后,可以使用 mizar32.lcd.print(n) 显示字符,其中 n 是从 0 到 7 的数字。如果正在显示的字符,它的可见形式将在显示屏上立即改变。上电时,8 个字符被定义为随机垃圾。
code
:一个数字(0 到 7),表示要重新定义的字符。glyph
:最多包含八个数字的表,这些数字按从上到下的顺序给出字符八行的位模式。这些数字中的每一个都是从 0 到 31 的值,用来定义该行中哪些 5 位应该是黑色。像素从左到右的值分别为 16、8、4、2 和 1。例如,{1, 3, 7, 15, 31, 15, 7, 3, 1, 0} 将在上面的 7 行中定义一个指向左边的实心三角形。额外的行会被忽略,缺少的行会被清空。
要使用 Lisp 以法语打印,可以尝试以下操作
# A PicoLisp program to demonstrate # user defined characters. (de print-msg () (mizar32-lcd-clear) # define the French accent character `é'. (mizar32-lcd-definechar 0 (1 2 14 17 31 16 14 0)) # print Liberté. (mizar32-lcd-prinl 'Libert 0 ",") # print égalité. (mizar32-lcd-prinl 0 'galit 0 ",") (mizar32-lcd-goto 2 1) # print fraternité in the next line· (mizar32-lcd-prinl 'fraternit 0) ) (print-msg)
请注意:您也可以从我们 github 上的示例存储库下载上面的代码 french.l
。
语言 | 示例 |
---|---|
eLua | buttons = mizar32.lcd.buttons()
|
PicoLisp | (setq buttons (mizar32-lcd-buttons))
|
告知当前按下了哪个用户按钮。
buttons
是一个字符串(在 PicoLisp 中,buttons 是一个列表),包含最多五个字符 L、R、U、D 和 S,分别表示当前是否按下了左、右、上、下和选择按钮。如果没有任何按钮被按下,则返回一个空字符串。硬件允许可靠地检测选择按钮,以及其他四个按钮中的最多两个:如果左、右、上和下三个按钮被按下,则返回所有四个按钮。
例如,游戏代码片段可以是
在 eLua 中
pressed = mizar32.lcd.buttons() if pressed:find("S") then do_select() end if pressed:find("L") then do_move_left() end if pressed:find("R") then do_move_right() end
在 PicoLisp 中
(setq buttons (mizar32-lcd-buttons)) (if (member "S" (chop buttons)) (do-select) )
- LCD 模块的电路图
- Ampire 的 162B LCD 模块的数据手册
- 用 8051 连接 LCD,Parveen Kumar 撰写的关于 162B 的文章
- Mizar32 显示模块固件的源代码
- eLua 的手册mizar32.lcd()模块