這裡介紹如何在 Arduino 上面使用 Hitachi HD44780U 1602 LCD 點陣液晶模組,顯示簡單的文字。
這是一片 Hitachi HD44780U 1602 LCD 點陣液晶模組,這個模組很便宜,拍賣網站上買的話,不用一百元就可以買到。
在我買的這塊模組的背面已經焊接好一片 LCM1602 IIC V1 控制板,他可以讓我們很方便的使用 IIC(I2C)來控制 LCD 顯示器,而有些網站上賣的並沒有加上這一片,購買的時候要注意看。
這是側面的樣子。
有了這片顯示模組之後,就可以直接讓沒有螢幕輸出的 Arduino 顯示一些簡單的文字訊息,以下是針腳的接法與控制的程式。
Step 1
在顯示器背面的 LCM1602 IIC V1 控制板有 I2C 的四個針腳,分別為 GND、VCC、SDA 與 SCL,用杜邦線全部接出來。
Step 2
然後參考一下 Arduino 的 pinout 參考圖,接上對應的腳位,這裡我以 Arduino UNO 為例。
連接的方式很簡單,VCC 接到 5V,GND 接到 GND,SDA 接到 SDA,SCL 接到 SCL。
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。
如果正常的話,一開始顯示器上面就會出現一些初始訊息。
等待幾秒鐘之後,顯示器會出現「Use Serial Mon Type to display」,這時候我們就可以開啟 Arduino IDE 中的 Serial Monitor 來輸入文字。
按下「Send」之後,這個訊息就會直接顯示在 LCD 上面了。
參考資料:Arduino-Info
鄭昕倍
編譯時出現異常
do not name a type..
鄭昕倍
也過內建的函數庫..一樣不會顯示字元
調整過後面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
Program man
Good!
鄭昕倍
為什麼版主都沒有回應???
G. T. Wang
抱歉,我實在是太忙了,還沒有時間去看這個問題,建議您可以直接去網路上 Arduino 的論壇發問。
林源
請問版主在哪個網站買的,我找不到已經焊好控制版的產品.謝謝
G. T. Wang
我當初是在露天拍賣的「徳源科技」買的,您可以詢問他們看看。
林源
感謝你的回應
Jack
我在左岸買的,I2C address is 0x3F, 有一段小程式可以看i2c address !
898
如何顯示目前時間(不要透過任何模組)
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 設備的位址,通常在硬體的說明文件中可以查到。
DRmer
嗨請問版主 是用什麼IDE寫arduino
G. T. Wang
我個人是使用 Arduino 官方的 IDE
Neil Hsu
感謝版主分享
CYW
嗨版主,可以請教一下為何到了Use Serial Mon 時
開啟Moniter,隨便送出幾個英文字,卻出現白格呢?
Wu
to CYW
請把 Serial.begin(115200); 中的 115200 換成 9600 就可以了
高鑒
請問板主,用serial monitor輸入的自,僅能顯示LCD的第一行?
如果想換行,是否能載serial monitor輸入指令?
王
Arduino:1.8.4 (Windows 7), 開發板:”Arduino Nano, ATmega328P”
C:\Users\Acer\Documents\Arduino\LCD2\LCD2.ino:4:31: fatal error: LiquidCrystal_I2C.h: No such file or directory
#include
^
compilation terminated.
exit status 1
開發板 Arduino Nano 編譯錯誤。
在D:\Program Files (x86)\Arduino\libraries\NewliquidCrystal_1.3.4: D:\Program Files (x86)\Arduino\libraries\NewliquidCrystal_1.3.4裡找到無效的程式庫
在D:\Program Files (x86)\Arduino\libraries\Newliquidcrystal_1.3.5: D:\Program Files (x86)\Arduino\libraries\Newliquidcrystal_1.3.5裡找到無效的程式庫
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
版主大大~請問怎會出現這樣的錯誤訊息?
bruce
感謝 版主大大 無私分享
自已是一位Step by step都會出錯的人,
今次能夠成功順利完成實驗, 真的非常感謝 m(_ _)m
這邊附上換行的片段
lcd.print(sr.substring(0,16));
if(sr.length()>16){
lcd.setCursor(0, 1);
lcd.print(sr.substring(16));
}
菜菜
請問換行片段要放在哪裡呢?!
yang
#include
請問這行顏色沒變,下載了多個版本都不行…該如何解決呢?
Stanley
請問這個出錯是什麼原因?
exit status 1
‘POSITIVE’ was not declared in this scope
Moses Wong
我都有這個問題
laplacetw
上面幾位的問題都是沒有正確引入LiquidCrystal_I2C.h,依照GT.Wang大大給的下載連結解壓縮到Arduino的libraries資料夾,然後要注意I2CIO.cpp這檔案中的#include 要改成#include ,否則會error。
laplacetw
啊…留言內容被過濾掉了,補充一下:
#include 角括號..斜線Wire斜線Wire.h角括號
要改成
#include 角括號Wire.h角括號
nunu
若在編譯時出現
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
‘positive’ was not declared in this scope
那就是同一個函式庫太多版本了,有的範例程式是用舊的指令但卻抓到新的library,也就是程式舊的指令引用和了新的函式庫。
解決方法,把過多一樣的函式庫全刪了、只留下範例程式內對應的版本即可,那就不會抓錯函式了。
我也是搞了很久,連前一天試的其它LCD範例可正常執行的,結果安裝了太多版本的函式庫後全部出現一樣的狀況。全刪後只安裝一個正確的版本就可以了。
sam
我將LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 改為 LiquidCrystal_I2C lcd(0x27, 16, 2); 和在setup中加一句 lcd.init();//初始化LCD 後就正常運行了…希望有用啦…