Arduino 使用 1602 IIC(I2C) LCD 點陣液晶模組

這裡介紹如何在 Arduino 上面使用 Hitachi HD44780U 1602 LCD 點陣液晶模組,顯示簡單的文字。

這是一片 Hitachi HD44780U 1602 LCD 點陣液晶模組,這個模組很便宜,拍賣網站上買的話,不用一百元就可以買到。


lcm1602-iic-v1-1

在我買的這塊模組的背面已經焊接好一片 LCM1602 IIC V1 控制板,他可以讓我們很方便的使用 IIC(I2C)來控制 LCD 顯示器,而有些網站上賣的並沒有加上這一片,購買的時候要注意看。

lcm1602-iic-v1-2

這是側面的樣子。

lcm1602-iic-v1-3

lcm1602-iic-v1-4

有了這片顯示模組之後,就可以直接讓沒有螢幕輸出的 Arduino 顯示一些簡單的文字訊息,以下是針腳的接法與控制的程式。

Step 1
在顯示器背面的 LCM1602 IIC V1 控制板有 I2C 的四個針腳,分別為 GND、VCC、SDA 與 SCL,用杜邦線全部接出來。

lcm1602-iic-v1-5

Step 2
然後參考一下 Arduino 的 pinout 參考圖,接上對應的腳位,這裡我以 Arduino UNO 為例。

arduino-uno-pinout-1

連接的方式很簡單,VCC 接到 5V,GND 接到 GND,SDA 接到 SDA,SCL 接到 SCL。

lcm1602-iic-v1-6

Step 3
安裝 LiquidCrystal 函式庫,下載之後解壓縮到 Arduino 的 libraries 目錄中即可。

Step 4
接著開始編寫控制的程式:

#include <Wire.h>  // Arduino IDE 內建
// LCD I2C Library,從這裡可以下載:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // 設定 LCD I2C 位址

void setup() {
  Serial.begin(115200);  // 用於手動輸入文字
  lcd.begin(16, 2);      // 初始化 LCD,一行 16 的字元,共 2 行,預設開啟背光

  // 閃爍三次
  for(int i = 0; i < 3; i++) {
    lcd.backlight(); // 開啟背光
    delay(250);
    lcd.noBacklight(); // 關閉背光
    delay(250);
  }
  lcd.backlight();

  // 輸出初始化文字
  lcd.setCursor(0, 0); // 設定游標位置在第一行行首
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0, 1); // 設定游標位置在第二行行首
  lcd.print("GTWang.org");
  delay(8000);

  // 告知使用者可以開始手動輸入訊息
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Use Serial Mon");
  lcd.setCursor(0, 1);
  lcd.print("Type to display");
}

void loop() {
  // 當使用者手動輸入訊息
  if (Serial.available()) {
    // 等待一小段時間,確認資料都接收下來了
    delay(100);
    // 清除舊訊息
    lcd.clear();
    // 讀取新訊息
    while (Serial.available() > 0) {
      // 將訊息顯示在 LCD 上
      lcd.write(Serial.read());
    }
  }
}

Step 5
將程式編譯上傳至 Arduino。

lcm1602-iic-v1-7

如果正常的話,一開始顯示器上面就會出現一些初始訊息。

lcm1602-iic-v1-11

等待幾秒鐘之後,顯示器會出現「Use Serial Mon Type to display」,這時候我們就可以開啟 Arduino IDE 中的 Serial Monitor 來輸入文字。

arduino-serial-monitor-1

按下「Send」之後,這個訊息就會直接顯示在 LCD 上面了。

lcm1602-iic-v1-9

參考資料:Arduino-Info

Arduino, 物聯網

17 Comments

  1. 鄭昕倍

    編譯時出現異常
    do not name a type..

  2. 鄭昕倍

    也過內建的函數庫..一樣不會顯示字元
    調整過後面VR
    只有顯示一排白色方格
    http://attach.mobile01.com/attach/201511/mobile01-3678f24e103cd699c4a8767da777b017.jpg
    這是程式異常還是模組異常???

    • 吳昊維

      好像是LCD模組的接腳位址的問題LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // 設定 LCD I2C 位址
      將0X27換成0X3F

  3. Program man

    Good!

  4. 鄭昕倍

    為什麼版主都沒有回應???

    • G. T. Wang

      抱歉,我實在是太忙了,還沒有時間去看這個問題,建議您可以直接去網路上 Arduino 的論壇發問。

  5. 林源

    請問版主在哪個網站買的,我找不到已經焊好控制版的產品.謝謝

    • G. T. Wang

      我當初是在露天拍賣的「徳源科技」買的,您可以詢問他們看看。

  6. Jack

    我在左岸買的,I2C address is 0x3F, 有一段小程式可以看i2c address !

  7. 898

    如何顯示目前時間(不要透過任何模組)

  8. YunGii

    想請問一下,LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // 設定 LCD I2C 位址

    這行指令其中的位置0x27是指I2C什麼的位址呢?
    因為有買了兩顆LCD+I2C
    一個能顯示一個不能
    後來才發現是位址不同
    但還是不懂這位址0x27是哪邊來的…

    • G. T. Wang

      0x27 是 I2C 設備的位址,通常在硬體的說明文件中可以查到。

  9. DRmer

    嗨請問版主 是用什麼IDE寫arduino

  10. Neil Hsu

    感謝版主分享

  11. CYW

    嗨版主,可以請教一下為何到了Use Serial Mon 時
    開啟Moniter,隨便送出幾個英文字,卻出現白格呢?

Leave a Reply