跳轉到內容

Mizar32/LCD

來自華夏公益教科書,開放的書籍,開放的世界
Mizar32 I2C 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中,無法更改。

I2C匯流排速度

[編輯 | 編輯原始碼]

與LCD顯示屏透過I2C通訊時,Mizar32的I2C匯流排速度必須設定為不超過50kHz。如果Mizar32以高達100kHz的速度與其他I2C裝置通訊,這不會干擾LCD顯示屏:它能夠識別自己的地址(並拒絕所有其他地址)高達100kHz,但只能以最大50kHz的速度處理資料包。

Mizar32 LCD模組USB電源駭客

電源供應

[編輯 | 編輯原始碼]

LCD顯示模組需要Mizar32從其7.2伏直流電源插座供電。如果你希望從Mizar32的USB電源供電,你可以在LCD板的底部焊接一根電線,從BUS5聯結器(靠近板邊緣的中心)的引腳1連線到LCD1聯結器(靠近“左”按鈕)的引腳2。

I2C指令集

[編輯 | 編輯原始碼]

該板響應8位I2C指令位元組0x7C到0x7F(7位從機地址62和63)

指令 功能
0x7C 向LCD傳送指令
0x7D 讀取LCD RAM地址
0x7E 向LCD傳送資料位元組
0x7F 讀取按鈕開關

I2C指令7C:傳送LCD指令

[編輯 | 編輯原始碼]

物理上LCD顯示屏有2行16個字元,但內部它有一個字元儲存器,每行可以容納40個字元,而16x2的可見顯示屏只顯示內部字元儲存器的一部分。

列印超過第一行字元儲存器的第40個字元會自動傳遞到第二行的開頭,而超過第二行的第40個字元則會從第一行的開頭繼續。同樣,當游標從任一行的第一個字元向左移動時,它會移動到另一行的第40個位置。

清除顯示並返回主頁

[編輯 | 編輯原始碼]

指令位元組0:重置LCD模組

[編輯 | 編輯原始碼]

對於SED1278,指令位元組0是一個空操作。在這裡,相反,PIC識別它是一個特殊情況,並重置SED

  • 清除螢幕
  • 不顯示游標
  • 兩行字元
  • 8x5畫素字元字型
  • 傳送字元資料時游標向右移動;顯示屏不移位

你可以使用以下函式來實現這一點

語言 功能
eLua mizar32.lcd.reset()
PicoLisp (mizar32-lcd-reset)

指令位元組1:清除顯示

[編輯 | 編輯原始碼]

指令位元組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:將顯示屏向右移動一個位置

[編輯 | 編輯原始碼]

命令 28 可以實現相反的效果,它將顯示的字元和游標向右移動一位,並在左側顯示兩個新字元。游標仍然停留在之前所在的字元上。

在 Alcor6L 中,可以使用以下方法:

語言 功能 函式域
eLua mizar32.lcd.display(dir) dir = {"left", "right"}
PicoLisp (mizar32-lcd-display 'dir) dir = {left, right}

設定顯示工作模式

[編輯 | 編輯原始碼]

命令位元組 32-63

[編輯 | 編輯原始碼]

這些命令的第 4、8 和 16 位設定顯示工作模式。

含義
0 1
4 顯示字型型別 5x8 5x11
8 顯示行數 1 行 2 行
16 介面資料長度 4 位 8 位

對於 Mizar32 顯示模組,您需要 5x8、2 行、4 位,這是上電時的預設設定。

設定 RAM 地址

[編輯 | 編輯原始碼]

命令位元組 64-127:設定 CG RAM 地址

[編輯 | 編輯原始碼]

命令位元組 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 會將您切換回正常的字元寫入模式,並將文字游標保留在它所在的位置。

命令位元組 128-255:設定 DD RAM 地址

[編輯 | 編輯原始碼]

如果命令位元組的最高位被設定,則較低的 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 命令 7D:讀取地址計數器

[編輯 | 編輯原始碼]

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 命令 7E:傳送 LCD 資料位元組

[編輯 | 編輯原始碼]

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 命令 7F:讀取按鈕

[編輯 | 編輯原始碼]

I2C 命令 0x7F 獲取 LCD 模組的按鈕開關的當前狀態,作為一個位元組,其較低的 5 位將被設定為某些組合,以指示當前按下了哪些按鈕。

選擇
1 2 4 8 16

顯示屏可以可靠地檢測到是否按下了選擇按鈕,以及其他四個按鈕中的任意兩個。如果按下了其他三個按鈕,則模組將返回一個位元組,表示所有四個按鈕都被按下(這是由於按鈕在電路板上連線的方式造成的,因此您只需使用四根線就能獲得五個按鈕)。

在 Alcor6L 中,您可以使用以下方法:

語言 示例
eLua buttons = mizar32.lcd.buttons()
PicoLisp (setq lcd-buttons (mizar32-lcd-buttons))

每個函式都返回一個字串,其中包含 LRUDS 字元的選擇,以指示左、右、上、下和選擇按鈕當前是否被按下。如果沒有按鈕被按下,則返回一個空字串。硬體允許可靠地檢測選擇按鈕以及其他四個按鈕中的最多兩個,但如果按下了左、右、上和下三個按鈕,則會返回所有四個按鈕。

軟體檢視

[編輯 | 編輯原始碼]

如果您膽子很大,可以使用上面的程式碼和 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)

您也可以從我們的 github 頁面下載上面示例的 程式碼

SimpleMachines 為 Alcor6L(Mizar32 的 LCD 模組)添加了一個平臺模組,如上所述,它為您處理所有 I2C 魔法和特殊定時。使用此模組來實現上述功能,您只需說:

語言 示例
eLua mizar32.lcd.print("Hello")
PicoLisp (mizar32-lcd-prinl 'Hello)

它提供了以下功能。

LCD 重置

[編輯 | 編輯原始碼]
語言 示例
eLua mizar32.lcd.reset()
PicoLisp (mizar32-lcd-reset)

初始化顯示屏,將所有內容重置為初始狀態:清除螢幕、沒有游標、顯示 40 列儲存器中的第 1-16 列、準備在 (1,1) 處列印、從左到右寫入文字,並在每個字元之後將游標向右移動一位。您不必在程式開始時呼叫重置,但是這樣做可以確保您的程式即使顯示屏處於之前的執行過程中遺留的奇怪狀態也能正常工作。

LCD 設定

[編輯 | 編輯原始碼]
語言 示例
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:如果為真,文字將從右到左列印:游標將在字元儲存器中向左移動一個位置,並且如果也啟用了顯示屏移位,顯示屏的內容將向右移動,以便游標停留在螢幕上的同一列。

LCD 清除

[編輯 | 編輯原始碼]
語言 示例
eLua mizar32.lcd.clear()
PicoLisp (mizar32-lcd-clear)

清除顯示屏,將游標移到左上角(位置 1,1)並重置顯示屏移位以顯示第 1 列到第 16 列。

LCD 主頁

[編輯 | 編輯原始碼]
語言 示例
eLua mizar32.lcd.home()
PicoLisp (mizar32-lcd-home)

將游標移到左上角(位置 1,1)並重置顯示屏移位。

LCD 游標轉到

[編輯 | 編輯原始碼]
語言 示例
eLua mizar32.lcd.goto( row, column )
PicoLisp (mizar32-lcd-goto row column)

將游標移到指定的行和列。

  • row:一個數字(1 或 2),表示要移動到的行。
  • column:一個數字(1 到 40),表示該行在字元儲存器中的位置。

LCD 游標位置

[編輯 | 編輯原始碼]
語言 示例 返回值
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),表示字元儲存器中的當前列。

LCD 列印

[編輯 | 編輯原始碼]
語言 示例
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 的中文、希臘語和數學符號。

LCD 游標設定

[編輯 | 編輯原始碼]
語言 示例
eLua mizar32.lcd.cursor(what)
PicoLisp (mizar32-lcd-cursor what)

設定在游標位置顯示的游標型別,或將游標向左或向右移動。

what 是一個字串,用來說明應該做什麼。

  • "none"、"line" 或 "block" 將分別在游標位置顯示無可見游標、常量下劃線或閃爍的實心塊。
  • "left" 或 "right" 將游標在字元儲存器和顯示屏上向左或向右移動一個位置,而不改變底層字元。在這種情況下,顯示屏永遠不會移動,並且像往常一樣,游標在一行的第 40 列和另一行的第 1 列之間換行。

LCD 顯示設定

[編輯 | 編輯原始碼]
語言 示例
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

LCD 按鈕

[編輯 | 編輯原始碼]
語言 示例
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) )

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書