學習目標 : 認識faya 串列七段顯示模組的功能及使用方式
學習時間 : 40min
示範模組 : (1) faya brickNano
(2) faya串列LCD模組
(3) 16x2 LCD模組 (20x2 或 20x4 LCD亦可)
工具 : (1) 樂高積木底板 (相容)
====================功能介紹====================
faya串列LCD模組透過I2C介面,利用Arduino內建的函式,很輕易的就能在螢幕上秀出想要顯式的文字訊息。本段僅解釋範例中用到的指令,更多的函示庫指令用法可參考官方說明。
介紹指令前,先看一下faya串列LCD模組的外觀,它左邊的I2C串列埠SDA、SCL,用來連接Arduion的I2C腳位,進行I2C串列資料的傳輸,使用此模組前,需將Arduino的I2C腳位連到此這兩個埠 (UNO和NANO都是 A4 ==> SDA、A5 ==> SCL)。模組上有一可變電阻,用來調整文字的對比度。

因為使用者想要用的LCD顯示器可能規格不同,因此這個模組本身沒有附LCD顯示器,目前測試過16x2、20x2、20x4皆可使用,需特別注意的是選擇LCD模組時,16根排針需要焊在上方(不要買到左方的那種),如此才能和faya串列LCD模組結合!

接下來介紹使用指令
- #include<Wire.h>;
使用I2C串列界面時,務必指示Wire.h函式
- #include<LiquidCrystal_I2C.h>;
- LiquidCrystal_I2C lcd(address,m,n);
類別名稱 : 可自行命名
address : lcd位址,faya串列LCD模組的位址訂在0x20
m : lcd行數
n : lcd列數
(例) 當我們把faya串列LCD模組上接16x2的LCD模組時,須呼叫以下程式
LiquidCrystal_I2C lcd(0x20,16,2);
- lcd.init();
- lcd.backlight();
- lcd.setCursor(m,n);
m : 第m+1行
n : 第n+1列
(例) 當我們要把16x2LCD顯示器上的游標移到第5行第2列時,須下達以下指令
lcd.setCursor(4,1);
- lcd.print("text");
(例) 當我們要印文字I love fayalab!,須下達以下指令
lcd.print("i love fayalab!");
大家可以看到指令的方式非常簡潔,如果查看[LiquidCrystal_I2C.h]檔案(下圖),會發現有很多實用的指令可以呼叫,更多的指令請參考官方網站。

====================原理知識====================
以下解釋提供給有需要知道背後原理的人:
LCD顯示器的原始控制方式,需透過14條訊號線(含電源),透過並列的方式控制LCD螢幕的顯示內容,這個方式不但佔用了控制器的資源,也拉了很多訊號線,全部連到Arduino時,會類似如下圖所示:
有鑑於此,我們可借助一顆IC來處理顯示的工作,除了降低控制器的負擔,還能將控制方式由並列轉成串列,減少拉線數量。
晶片 PCF8574 剛好能夠符合以上的需求,它將I2C串列訊號轉換成8位元的並列訊號,搭配Arduino的LCD函示庫後,控制器只要送出串列訊號,其它的工作就交給此晶片了。
在介紹模組的電路前,先看一下文字型LCD顯示器的腳位,它的腳位順序是固定的,無論16x2 / 20x2 / 20x4 的顯示器腳位順序皆相同,因此以上規格的文字型LCD顯示器,皆可連接到faya 串列LCD模組上。
LCD顯示器和晶片PCF8574的連接方式如下,接法是固定的,其中的可變電阻VR1用來調整文字的對比度。另外由於I2C的位址由埠A2/A1/A0決定,此電路將此3埠全接地,因此裝置的I2C位址為0x20,有興趣的人可以參考datasheet的第8.4節。

了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
(1) 在 16x2 LCD顯示器上第一列顯示 [HELLO]
(1) 在 16x2 LCD顯示器上第二列顯示 [WORLD]
接線:
(1) 電源線連接
如下圖所示,連接的說明請看這篇文章 或簡易版
(2) 訊號線連接
Arduino_A4 ===> 串列LCD模組_SDA
Arduino_A5 ===> 串列LCD模組_SCL
範例程式:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2017/7/24 | |
// Faya-Nugget 範例程式 (SerialLCD_1.ino) | |
// 單元: 模組介紹:faya串列LCD模組 | |
// 網址: https://fayalab.blogspot.com/2017/07/serialLCD.html | |
// 目標: (1) LCD模組第一行顯示 HELLO | |
// (2) LCD模組第二行顯示 WORLD | |
// 接線: Arduino ==> faya模組 | |
// A4 ==> SDA (串列LCD模組) | |
// A5 ==> SCL (串列LCD模組) | |
//We always have to include the library | |
#include <Wire.h> | |
#include <LiquidCrystal_I2C.h> | |
//定義LCD的位址與參數 | |
LiquidCrystal_I2C lcd(0x20,16,2); // LCD位址:0x20 ; LCD規格:16x2 | |
void setup() | |
{ | |
lcd.init(); // 初始化LCD | |
lcd.backlight(); // 啟動背光 | |
} | |
void loop() | |
{ | |
lcd.setCursor(2,0); //LCD游標位置 第一列第三行 | |
lcd.print("HELLO"); | |
lcd.setCursor(8,1); //LCD游標位置 第二列第九行 | |
lcd.print("WORLD"); | |
} |
備註:
- 請記得將[LiquidCrystal_I2C]函示庫複製到Arduino的Libraries資料夾
- L27: 先把游標移到第1列第3行的位置,讓文字從此處開始列印出
- L29: 先把游標移到第2列第8行的位置,讓文字從此處開始列印出
- 文字顯示不明顯時,可調整可變電阻改變文字顯示的對比程度
範例結果:
討論:
由範例中可以發現串列式LCD顯示器的連線和控制方式非常的簡便,有助於我們更專注於資料面的處理。有興趣的朋友可以,可以參考.h檔或參考官方網站,多多利用內建的函式,讓畫面更活潑,例如文字跑馬燈如下所示,這個範例的程式可以在這邊下載!
也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
有朋友反應他們的LCD每行只顯示第一個字,遇到此問題時,請修改Libraries底下的 liquidCrystal_I2C.cpp檔案:
回覆刪除首先找到
LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 0;
}
將 return 0; 改成 return 1; 即可