| Arduino教學 | 顯示應用 LCD1602 I2C | 401 |

LCD 的顯示功能是在我們進行 Arduino 學習或開發時,相當重要的基礎,除了可以顯示重要的資訊給使用者外,也可以當我們開發者除錯的好用工具,今天就來學習這部分的程式該如何實現,我們會先從常見的 16×2 兩行的文字型開始,透過 LCD1602 I2C 介面顯示需要的文字,不僅所需要腳位更少( sclk 跟 sdata 兩條傳輸),如果搭配第三方寫好的函式庫,使用起來更加簡潔快速,相信各位朋友一定會愛上,我們就趕快來看看吧!

1. LCD1602 介紹

一般提到 LCD,大部分人應該會直接聯想到電腦平台的顯示螢幕,但觀察一下我們周邊的常見的電子產品,是不是也都有個小螢幕與我們產生互動?舉例來說,計算機的螢幕可以顯示數字與運算的結果,智慧手錶中的螢幕除了可以顯示目前時間,甚至還是顯示重要文字訊息。在 Arduino 系統中,最常見也最實用的顯示元件就是 16×2 的文字型 LCD 螢幕,16 是指單行可顯示 16 字元,2 則是提供兩行的空間,下圖為實際的LCD1602顯示螢幕。(圖片取自 Newhaven Display International, Inc. 公司產品)

lcd1602 i2c
lcd1602 i2c

那 LCD 顯示螢幕通常會提供什麼介面與 Arduino Uno 進行連接溝通呢? 有兩種方式,一種為直接使用數位的 IO 腳位( Paralled ),另一種則是 I2C 的通訊連接。JIMI哥 推薦如果想玩玩看的朋友,可以直接購買有 I2C 介面的 LCD 顯示螢幕,I2C 版本的 LCD 通常會比一般版的高一些,但如果直接用 GPIO 方式進行 LCD 的相關實驗的話,各位朋友會發現所佔用的數位腳位真的有點多,基本的 8 條資料線+3條控制線,也或者可以使用4條訊號線+3個控制線模式,但相較於 I2C 介面的模組,僅需1條 DATA + 1條 CLOCK,還是 I2C 的優勢比較明顯。

有些朋友會問怎麼辨別購買的 LCD 有沒有 I2C 介面?最快的方法就是看模組背面,因為現在的廠商為了兼具相容性與降低成本,都會額外設計一個 I2C 的模組,利用焊接的方式,外掛到只有一般 IO 介面的 LCD,所以我們僅需要確定這個 LCD模組背面是否有多一塊 I2C 轉接的電路板,再來就是確認是適用 3.3 或 5V 電壓(當然也有 3.3V 或 5V 都兼容的),因為 Uno 為 5V 系統,選用上的考量當然是以 5V  LCD 為第一優先。

2. I2C 通訊介面原理

再來來聊聊 I2c 的通訊原理,I2C 跟 UART 一樣都算是單晶片系統中常見的通訊協定,跟 UART 不一樣的地方是,它的訊號線中包含了一條 CLOCK 訊號,所以它是屬於同步類型的協定。

它的最初設定的用途是做為 IC 與 IC 間通訊,兩支訊號線 DATA 與 CLOCK 即可以開始傳遞與接收訊息,架構上則是採用 Master 與 Slave 的主從式架構,講的白話一點,就是當你要設計一個I2C網路在你的線路上,必須先決定誰是老大(Master)跟小弟(slave),Master 負責發號施令,Slave 則根據接收到命令來進行回話或動作。

備註:補充一下,其實 I2C 沒有規定網路只能有1個 Master 喔(多主從架構),只是在單晶片系統中,常將主控制器設為 Master,周邊的應用 IC 會設定為 Slave 的角色。

I2C 還有一個特色就是『位址』,所有的 IC 裝置必須有個位址,各位朋友可以想像一下,老大(Master)把10個小弟(10 Slave )一起叫來一個房間開會(串成一個I2C 網路),他應該如何下達命令?答案就是為每個小弟編上一個編號,這樣命令才不會傳達錯人的風險,這個編號也就是所謂的位址,真實 IC 的位址是必須跟 NXP所申請的(收取費用),目的為確保裝置 ID不會有重複的疑慮。

3. LCD1602 I2C 電路接法

我們瞭解過 I2C 的基本原理後,就可以來使用 I2C 介面的 LCD,接線方式很簡潔,僅需兩條訊號線(SDA+ SCLK),Uno 預設的 I2C 腳位是在編號 A4(SDA)與 A5(SCLK)這兩支,別忘了接上 LCD 需要的電源與地,完整電路連接如下:

lcd i2c
lcd i2c

$ PULL-HIGH 電阻

這邊有個地方要需留意一下,在接 i2c 的線路時,整個線路上必須接上所謂的 Pull-High 上拉電阻,也就是分別在 SCL 跟 SDA 的線路上接個 3.3K 或 4.7K 的電阻到 VCC 電源,因為 i2c 是屬於 open-drain 驅動的電路,沒有接上 Pull-High 電阻的話,BUS 上就不會有 HIGH 的準位,這個電阻僅須在整個 BUS 上接上一組即可,電阻值也是有限制的,不過通常接個 K 級歐姆等級在一般應用來說都是 OK的。

在我們購買的 LCD1602 配上 I2c 的模組來說,大多已經加上這兩個 Pull-High 電阻,所以如果朋友後續測試發現 i2c 怎麼怪怪的,可以先試試著檢查這個電阻是否已經加在整個 i2c 網路。

4. 程式功能

我們直接來實做一個簡單的秀出文字在 LCD1602,各位朋友可以參考下面的原始程式碼修改『HELLO WORLD』字串即可。

$ 安裝 I2C LCD 函式庫

因為 LCD 1602 的 I2c 模組已經算是通用規格,所以最快運用的方法就是利用第三方的 LCD 函示庫,JIMI哥 在這邊推薦大家可以用 Matthias Hertel 這位作者寫的 LiquidCrystal_PCF8574 這個 Library,可以直接到下面網站下載 zip 檔並安裝到 Arduino 的 IDE 內: 

https://www.mathertel.de/Arduino/LiquidCrystal_PCF8574.aspx

要安裝額外的 Library 到 IDE 有兩種方法,一是利用 IDE 內的搜尋功能,另一個就是利用手動的方式加入 IDE 的 Library 資料夾中,這邊我們介紹第一種最快的方式安裝:

步驟1: 打開 IDE 的工具–>管理程式庫

https://jimirobot.com.tw/image/arduino/401/ps_lib1.jpg

步驟2: 搜尋 LiquidCrystal_PCF8574 與下載安裝

https://jimirobot.com.tw/image/arduino/401/ps_lib2.jpg

$ 原始程式碼

#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>

LiquidCrystal_PCF8574 lcd(0x27); 
// set the LCD address to 0x27

void setup()
{
  lcd.begin(16, 2); // initialize the lcd  
} // setup()

void loop(){   
    lcd.setBacklight(255);
    lcd.home();
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("HELLO WORLD!!!");
    lcd.setCursor(0, 1);
    delay(200);
} // loop()

$ 程式講解

0#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>

LiquidCrystal_PCF8574 lcd(0x27); 
// set the LCD address to 0x27 

由於這個 lcd 函數是透過 i2c 來做溝通,所以我們將 LiquidCrystal_PCF8574.h 跟 wire.h I2c 的函數同時 include 進來,並用 0x27 這個的位置進行初始化 lcd 物件,各位朋友可以參考手邊的 lcd 的 Address 是多少填入,如果為拍賣購入的大多是 0x27 或 0x3F。(記得要先安裝好 LiquidCrystal,不然 complie 會出現找不到這個函式庫)

void setup()
{
  lcd.begin(16, 2); // initialize the lcd  
} // setup()

在 setup() 函數內,主要為設定 lcd 為 16chars 和 2 行的參數。

void loop(){   
    lcd.setBacklight(255);
    lcd.home();
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("HELLO WORLD!!!");
    lcd.setCursor(0, 1);
    delay(200);
} // loop()

在 loop() 函數內,依序設定

  1. 背光調到最亮
  2. 重置 LCD
  3. 清除螢幕顯示字
  4. 設定游標為至為 (0,0) //第 0 行第 0 個位置
  5. 顯示 HELLO WORLD
  6. 設定游標為至為(0,1) //第 1 行第 0 個位置
  7. 延遲 200ms

5. 總結&懶人包

以上就是用 I2C 介面 LCD 的用法,接線上只需要稍微注意一下,SDA 與 SCL 不要接反,應該要秀出文字就沒有太大的問題,下次我們就來聊聊萬一手邊的 LCD1602 只有 IO 介面時,又該怎麼使用,這篇的內容就到這啦,最後是今日懶人包內容(Arduino ino File),如果有什麼問題歡迎下面留言與我討論呦!

↓↓下載連結↓↓

401-lcd-i2c.ino

↓↓↓↓↓↓賣場連結↓↓↓↓↓↓

歡迎大家有需要的話,可以多多支持一下我們的蝦皮賣場喔! 😀 

吉米家官方店-創客機器人材料專賣 https://shopee.tw/jimirobot.tw

Follow JIMI哥 Twitter : https://twitter.com/jimirobot  <–得到最新文章通知

發佈留言

Close Menu