學習目標 : 認識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
範例程式:
備註:
- 請記得將[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; 即可