Alcor6L/PicoLisp/lcd
此 PicoLisp 模块包含用于驱动 Mizar32 显示模块的双行字符 LCD 面板的函数。
从物理上讲,显示器每行有 16 个字符,但内部具有 40 个字符乘以两行的内存。它一次显示这 40 列中的 16 列,通过多种方式来确定这 40 列中的哪些列出现在 16 列的显示器中。如果你只想显示 16x2 个字符,reset
、goto
和 print
函数就足够了。
初始化显示器,将所有内容重置为初始状态:清除屏幕,无光标,显示 40 列内存的第 1-16 列,准备在 (1,1) 打印,从左到右写入文本,并在每个字符后将光标向右移动一个位置。你不需要在程序开始时调用 reset,但这样做可以确保即使显示器处于由先前运行留下的奇怪状态时,你的程序也能正常工作。
(mizar32-lcd-reset)
这可以用来设置 LCD 显示器的一些更奇怪的操作模式。两个参数都是可选的,如果你省略它们,它们默认为 false,这将设置明智的模式。
(mizar32-lcd-setup display-shift right-to-left)
- display-shift - 如果为 T,那么在你随后打印的每个字符中,光标将在字符内存中像往常一样移动一个位置,但显示器的内容也会在水平方向上向相反方向移动一个位置,从而使光标保持在物理显示器的同一列中。这可以用来实现“滚动文本”效果。但是请注意,当光标从第 40 列移到第 1 列(反之亦然)时,它会翻转到另一行。
- right-to-left - 如果为 T,文本将从右到左打印:光标将在字符内存中向左移动一个位置,并且如果也启用了显示器移动,显示器的内容将向右移动,从而使光标保持在屏幕上的同一列中。
清除显示器,将光标移动到左上角(位置 1,1)并重置显示器移动,以显示第 1 到 16 列。
(mizar32-lcd-clear)
将光标移动到左上角(位置 1,1)并重置显示器移动。
(mizar32-lcd-home)
将光标移动到指定的行和列。
(mizar32-lcd-goto row column)
- row - 一个数字(1 或 2),表示你要移动到的行。
- column - 一个数字(1 到 40),表示该行中字符内存中的位置。
(setq pos-lst mizar32-lcd-getpos))
返回一个列表,该列表指示当前的光标位置。
返回值
(car pos-lst)
- 一个数字(1 或 2),表示当前的行。(cadr pos-lst)
- 一个数字(1 到 40),表示字符内存中的当前列。
从当前光标位置开始,写入 LCD 字符内存。光标将为每个打印的字符前进一个位置。当它超过第 40 列时,它会移动到另一行的第 1 列(反之亦然,当从右到左打印时)。
(mizar32-lcd-prinl [any1] [any2] ... [anyn])
- any -
any
的每个项目都可以是 PicoLisp 值 - 整数、符号或列表。字符串是显示 ASCII 文本消息的正常方式。整数参数的值应为 0 到 255,以显示单个字符,它可以是用户定义的字符 0-7 中的一个,常规 ASCII 字符 32-125 以及 126 和 127 用于表示向右和向左的箭头,以及代码为 160-255 的中文、希腊语和数学符号。
设置在光标位置显示的光标类型或将光标向左或向右移动。
(mizar32-lcd-cursor 'what)
- what - 一个字符串,用于说明要执行的操作
"none"
、"line"
或"block"
分别会在光标位置显示不可见的光标、一条持续的下划线或一个闪烁的实心块。"left"
或"right"
将光标在字符内存和显示器上向左或向右移动一个位置,而不更改底层字符。在这种情况下,显示器永远不会移动,并且像往常一样,光标会在某一行的第 40 列和另一行的第 1 列之间循环。
打开或关闭物理显示器,或将显示的字符向左或向右移动。
(mizar32-lcd-display 'what)
- what - 一个字符串,用于说明要执行的操作
"off"
和"on"
分别关闭和打开物理显示器。当显示器关闭时,它看起来是空白的,但字符内存的内容、光标的位置和类型、用户定义的字符和设置模式都会被记住,你可以在显示器关闭时写入字符内存并执行所有其他操作。这使你能够更新显示器,而不会让观看者看到太多闪烁。"left"
或"right"
将显示的字符向左或向右移动一个位置。例如,如果它正在显示通常的第 1-16 列,而你输入 mizar32.lcd.display("left"),它将显示第 2-17 列:可见的字符向左移动,但字符内存上的窗口向右移动。
编程八个用户可定义字符中的一个,其代码为 0 到 7。定义后,可以使用 (mizar32-lcd-print n)
显示字符,其中 n 是从 0 到 7 的数字。如果正在显示该字符,则其可见形式将在显示器上立即更改。在通电时,这 8 个字符被定义为随机垃圾。
(mizar32-lcd-definechar code glyph)
- code - 一个数字(0 到 7),表示你要重新定义的字符的代码。
- glyph - 最多包含八个数字的列表,表示字符的八行的位模式,从上到下按顺序排列。这些数字中的每一个的值都为 0 到 31,以定义该行中应为黑色的 5 个位中的哪些。像素的值从左到右依次为 16、8、4、2 和 1。例如,列表 (1 3 7 15 31 15 7 3 1 0) 将在最上面的 7 行中定义一个左指的实心三角形。额外的行将被忽略,缺少的行将被空白。
告诉当前按下的是五个用户按钮中的哪一个。
(setq buttons (mizar32-lcd-buttons))
返回值
- buttons - 一个字符串,包含最多五个字符 L、R、U、D 和 S,表示当前是否按下了左、右、上、下和选择按钮。如果没有任何按钮被按下,则返回一个空字符串。硬件允许可靠地检测选择按钮以及最多两个其他四个按钮:如果按下左、右、上和下中的三个按钮,则返回所有四个按钮。