液晶顯示
不用電腦也看得到板子在說什麼。 · ⏱ 約 25 分鐘
你會學到三件事
- LCD 是一塊有行有列的畫布
setCursor 決定接下來寫在哪裡
- 「先移游標、再寫字」,這個順序不能反
開始之前
序列埠很好用,而它需要一條線接著電腦。
做成品的時候你要的是:拔掉電腦,它還看得到。
接線(並列式 LiquidCrystal):RS→12、E→11、D4→5、D5→4、
D6→3、D7→2,另外接電源和一顆調對比的可變電阻。
🟢 先把編輯器打開,跟著下面一起做:跟著做
一、宣告
宣告的時候要說它接在哪幾支腳:
1LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
括號裡是六支腳的號碼,順序是 RS, E, D4, D5, D6, D7。
⚠️ 順序錯的話畫面會是亂碼或空白,而不會報錯。
和第 8 課的 Servo s; 一樣,這是一個物件,它有自己的動作。
積木盤上這一顆寫著「宣告字元液晶 …(…)」。
二、告訴它多大
在 setup 裡說它有幾行幾列:
16 行寬、2 列高,是最常見的規格(也有 20×4 的)。
⚠️ 這一行在 setup() 裡,而且要在任何 print 之前。
積木上它寫著「設定液晶 … 為 … 行 … 列」。
三、先移游標,再寫字
寫字之前要先說寫在哪一格:
1lcd.setCursor(0, 0);2lcd.print("Hello");
setCursor(第幾行, 第幾列):
這兩顆在積木上寫著「把液晶 … 的游標移到第 … 行第 … 列」
與「在液晶 … 上顯示 …」。
0 1 2 3 4 5 ... 15
列 0 H e l l o
列 1
⚠️ 兩個都從 0 開始,又是那件事。
所以 16×2 的螢幕,合法的位置是行 0~15、列 0~1。
⚠️ 順序不能反。 print 之後再 setCursor 是沒有意義的:
游標是「接下來寫在哪」,不是「剛剛寫在哪」。
四、⚠️ 覆蓋不會清乾淨
LCD 不會自己清空。在同一個位置寫 100 再寫 5,會變成 500,
因為只有第一格被蓋掉。
兩種解法:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1lcd.clear(); // 全部清掉(會閃一下)2lcd.print("5 "); // 或者自己補空格蓋掉
每次都 clear() 會讓畫面閃爍,所以顯示會變的數字時,
補空格通常比較好看。
完成的樣子
這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。
1LiquidCrystal lcd(12, 11, 5, 4, 3, 2);2 3void setup() {4 lcd.begin(16, 2);5 lcd.setCursor(0, 0);6 lcd.print("Hello");7}8 9void loop() {10}
換你了
把第 5 課的光感應值顯示在第二列,每秒更新一次
(⚠️ 用第 10 課的 millis(),不要用 delay)。
記得處理「從 3 位數變 2 位數」的殘影問題。
到編輯器做這一題:練習:把光感應值顯示在第二列(用 millis 不用 delay)
做一個
在 LCD 上顯示 分:秒,從 0 開始跑。用 millis 不准用 delay。
🔴 秒數要補零:1:05 不是 1:5。那一行你得自己寫。
⚠️ 而不要每一圈都重寫整個畫面,會閃。只在數字真的變了的時候才寫。
到編輯器做這一題:做一個:一個會跑的碼錶
這一課你做了什麼
- 你在一塊沒有電腦的螢幕上寫了字
- 你用
setCursor 決定寫在哪一格
- 你知道覆蓋不會清乾淨,而
clear() 會閃
如果卡住了
| 你看到 |
多半是因為 |
| 整片空白 |
對比沒調(轉那顆可變電阻),或背光沒接 |
| 一整排黑方塊 |
沒收到資料——begin 漏了,或腳位順序錯 |
| 亂碼 |
六支腳的順序錯了 |
| 數字有殘影 |
覆蓋不會清乾淨。補空格或 clear() |
| 畫面一直閃 |
每次 loop 都 clear() 了。改成只在值變了才更新 |
在編輯器打開這一課 →