[Arduino 線上教程] 第八篇: 液晶顯示器

[Arduino 線上教程] 第八篇: 液晶顯示器

更新於 發佈於 閱讀時間約 9 分鐘

前導

好,這次不用接線,請直接在右側零件選單選擇 Arduino。

raw-image

在裡面找到 LCD 後把它拖拉出來。

raw-image

好,現在開始介紹如何使用:


LCD 模組有完整的控制指令,我們透過引入函式庫進行 LCD 的控制。

#include <Adafruit_LiquidCrystal.h>

主要的指令方法說明如下:

begin(columns, rows)初始化 LCD 顯示器,設置顯示器的行數與列數。

lcd.begin(16, 2);  // 假設是 16 行 2 列的 LCD 顯示器

clear(): 清除 LCD 顯示器上的所有文字。此函式會發送清除命令到 LCD 控制器,將顯示器所有字元位置清空,並將游標重設到左上角(位置 0,0)。

lcd.clear();

home() :將游標移回顯示器的起始位置(0,0)。

lcd.home();

setCursor(col, row):設定游標位置,從指定的列與行開始輸出資料。

lcd.setCursor(5, 1);  // 將游標移至第 6 行、第 2 列(索引從 0 開始)

print():將文字、數字或其他資料以字串形式輸出到 LCD 上。

lcd.print("Hello, World!");

write():將單一字符(或原始位元)寫入 LCD。

lcd.write('A');

除了上述方法外,許多 LCD 庫還提供控制顯示的方法,例如:

display(): 打開 LCD 顯示器,將儲存於顯示記憶體中的資料顯示出來。

lcd.display();

noDisplay() : 關閉 LCD 顯示器,但不清除記憶體,資料依然存在,只是不顯示出來。

lcd.noDisplay();

cursor()noCursor()啟用或隱藏 LCD 顯示器上的游標。

blink()noBlink()啟用或關閉 LCD 上的游標閃爍功能。


好,接下來我們都以實際操作來學習如何使用。

首先,你會發現現在按下模擬已經會顯示東西,所以我們要來解釋現在其提供的程式碼:

#include <Adafruit_LiquidCrystal.h>

int seconds = 0;

Adafruit_LiquidCrystal lcd_1(0);

void setup()
{
lcd_1.begin(16, 2);

lcd_1.print("hello world");
}

void loop()
{
lcd_1.setCursor(0, 1);
lcd_1.print(seconds);
lcd_1.setBacklight(1);
delay(500); // Wait for 500 millisecond(s)
lcd_1.setBacklight(0);
delay(500); // Wait for 500 millisecond(s)
seconds += 1;
}

說明如下:

int seconds = 0;
  • 定義一個整數變數 seconds,初始值設為 0,用來記錄經過的秒數。

Adafruit_LiquidCrystal lcd_1(0);
  • 建立一個名為 lcd_1Adafruit_LiquidCrystal 物件。
  • 括號中的 0 代表 LCD 模組的地址或初始化參數,這裡改成0x20也可以。

void setup()
{
lcd_1.begin(16, 2);
lcd_1.print("hello world");
}

lcd_1.begin(16, 2);

  • 功能: 初始化 LCD 顯示器,並設定它的尺寸為 16 行、2 列。

lcd_1.print("hello world");

  • 功能: 將字串 "hello world" 輸出到 LCD 上。(從位置 (0,0) 開始)

void loop()
{
lcd_1.setCursor(0, 1);
lcd_1.print(seconds);
lcd_1.setBacklight(1);
delay(500); // Wait for 500 millisecond(s)
lcd_1.setBacklight(0);
delay(500); // Wait for 500 millisecond(s)
seconds += 1;
}
  • lcd_1.setCursor(0, 1);
    • 功能: 將 LCD 的游標移到第 2 列(列索引從 0 開始,所以 1 表示第二列)。
    • 結果: 接下來輸出的內容將從第二列最左邊開始顯示。
  • lcd_1.print(seconds);
    • 功能: 將變數 seconds 的數值以文字形式輸出到 LCD 上。
    • 結果: 每次 loop() 都會將目前的秒數或計數值顯示在第二列上。
  • lcd_1.setBacklight(1);
    • 功能: 開啟 LCD 的背光,讓顯示內容更加明亮可見。
    • 結果: 背光亮起。
  • delay(500);
    • 功能: 程式停頓 500 毫秒,這段期間 Arduino 不會執行其他程式碼。
  • lcd_1.setBacklight(0);
    • 功能: 關閉 LCD 的背光。
    • 結果: 背光熄滅。
  • delay(500);
    • 功能: 程式再停頓 500 毫秒。
  • seconds += 1;
    • 功能: 將變數 seconds 的值增加 1。
    • 結果: 下一次 loop() 時顯示的數字會比上一次大 1。

好,在本單元結束前,我們實作一個小專案,為此,我們需要從元件中拉出 TMP36 溫度傳感器。

其中,最左邊的腳位是Vcc,中間的腳位是引腳產生與溫度成正比(線性)的類比電壓。它應該連接到類比 (ADC) 輸入。而最右邊的腳位是GND。

而要將電壓轉換為溫度,只需使用基本公式:

  • 溫度 (°C) = (Vout – 0.5) * 100
  • 例如,如果電壓輸出為 1V,則表示溫度為 (1 – 0.5) * 100 = 50 °C

最後把接線接好,如下圖:

raw-image

接下來撰寫程式碼:

#include <Adafruit_LiquidCrystal.h>

// 建立 LCD 物件
Adafruit_LiquidCrystal lcd(0x20);

// 定義 TMP36 感測器連接的類比腳位
#define sensorPin A0

void setup() {
// 初始化 LCD 為 16 列 2 行
lcd.begin(16, 2);
// 選擇顯示背光
lcd.setBacklight(1);

// 初始化序列監視器(僅用於除錯)
Serial.begin(9600);

// 顯示一個啟動訊息,等待 2 秒後清除
lcd.print("TMP36 Sensor");
delay(2000);
lcd.clear();
}

void loop() {
// 讀取 TMP36 輸出(類比值介於 0 ~ 1023)
int reading = analogRead(sensorPin);

// 將讀取值轉換為電壓值
// 若使用 5V ,換算係數為 (5.0 / 1024.0)
float voltage = reading * (5.0 / 1024.0);

// 利用 TMP36 的特性將電壓轉換為攝氏溫度
float temperatureC = (voltage - 0.5) * 100;

// 將攝氏轉換為華氏溫度
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;

// 清除 LCD 顯示,並將結果輸出到 LCD
lcd.clear();

// 第一行顯示攝氏溫度
lcd.setCursor(0, 0); // 第一列,第 0 行
lcd.print("T: ");
lcd.print(temperatureC, 1); // 顯示 1 位小數
lcd.write(0xB2); // 顯示度數符號 (°)
lcd.print("C");

// 第二行顯示華氏溫度
lcd.setCursor(0, 1); // 第二列,第 0 行
lcd.print("F: ");
lcd.print(temperatureF, 1);
lcd.write(0xB2); // 顯示度數符號 (°)
lcd.print("F");

// 同時將結果輸出到序列監視器(方便除錯)
Serial.print("Temperature: ");
Serial.print(temperatureC);
Serial.print("\xB0");
Serial.print(" C | ");
Serial.print(temperatureF);
Serial.print("\xB0");
Serial.println(" F");

delay(1000); // 每隔 1 秒更新一次讀取結果
}

本頻道持續更新中(內容涵蓋前端程式設計入門、大學必備程式設計入門、電子系專業課程入門、數學微積分題解)如果身旁有相關科系的學生,不妨推薦一下喔~

相信這裡會是家教或線上課程之外,高中、大學生系統性綜合學習的好選擇。

最後感謝您的觀看!

avatar-img
電資鼠 - 您的學習好夥伴
8會員
200內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!
本篇將帶你學會如何使用 ESP32 控制 OLED 顯示器,顯示不只是文字,還能呈現圖像、圖示、數據曲線,甚至製作簡易動畫。OLED 是現代微控制器專案中常見的高解析低功耗顯示元件,適合用於物聯網設備、穿戴裝置、感測儀錶板等應用。 透過本篇,你將能夠掌握 OLED 顯示技術的使用方法。
透過本篇,你將能實作簡單的聲音控制應用。 本篇將教你如何實作 「鋼琴聲音」,進行簡單的 聲音與控制互動。
從這一單元開始,我想換另一個軟體進行電路模擬,此軟體叫做wokwi。 並且,我們要嘗試使用另一種開發版 ESP32 進行小專案開發。 而本章節我會解釋溫濕度感測器的程式碼原理,讓你實際了解如何使用。
本篇將帶你學會如何使用 ESP32 控制 OLED 顯示器,顯示不只是文字,還能呈現圖像、圖示、數據曲線,甚至製作簡易動畫。OLED 是現代微控制器專案中常見的高解析低功耗顯示元件,適合用於物聯網設備、穿戴裝置、感測儀錶板等應用。 透過本篇,你將能夠掌握 OLED 顯示技術的使用方法。
透過本篇,你將能實作簡單的聲音控制應用。 本篇將教你如何實作 「鋼琴聲音」,進行簡單的 聲音與控制互動。
從這一單元開始,我想換另一個軟體進行電路模擬,此軟體叫做wokwi。 並且,我們要嘗試使用另一種開發版 ESP32 進行小專案開發。 而本章節我會解釋溫濕度感測器的程式碼原理,讓你實際了解如何使用。