Semorphe

液晶顯示

不用電腦也看得到板子在說什麼。 · ⏱ 約 25 分鐘

你會學到三件事

  1. LCD 是一塊有行有列的畫布
  2. setCursor 決定接下來寫在哪裡
  3. 「先移游標、再寫字」——這個順序不能反

開始之前

序列埠很好用,而它需要一條線接著電腦。

做成品的時候你要的是:拔掉電腦,它還看得到。

接線(並列式 LiquidCrystal):RS→12、E→11、D4→5、D5→4、 D6→3、D7→2,另外接電源和一顆調對比的可變電阻。

一、宣告

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

括號裡是六支腳的號碼,順序是 RS, E, D4, D5, D6, D7

⚠️ 順序錯的話畫面會是亂碼或空白,而不會報錯。

和第 8 課的 Servo s; 一樣,這是一個物件——它有自己的動作。

二、告訴它多大

lcd.begin(16, 2);

16 行寬、2 列高——最常見的規格(也有 20×4 的)。

⚠️ 這一行在 setup() 裡,而且要在任何 print 之前

三、先移游標,再寫字

lcd.setCursor(0, 0);
lcd.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 ——因為只有第一格被蓋掉。

兩種解法:

lcd.clear();                 // 全部清掉(會閃一下)
lcd.print("5   ");           // 或者自己補空格蓋掉

每次都 clear() 會讓畫面閃爍,所以顯示會變的數字時, 補空格通常比較好看。

完成的樣子

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
    lcd.begin(16, 2);
    lcd.setCursor(0, 0);
    lcd.print("Hello");
}

void loop() {
}

換你了

把第 5 課的光感應值顯示在第二列,每秒更新一次 (⚠️ 用第 10 課的 millis(),不要用 delay)。

記得處理「從 3 位數變 2 位數」的殘影問題。

這一課你做了什麼

如果卡住了

你看到 多半是因為
整片空白 對比沒調(轉那顆可變電阻),或背光沒接
一整排黑方塊 沒收到資料——begin 漏了,或腳位順序錯
亂碼 六支腳的順序錯了
數字有殘影 覆蓋不會清乾淨。補空格或 clear()
畫面一直閃 每次 loopclear() 了。改成只在值變了才更新
在編輯器打開這一課 →