2020年5月23日 星期六

四.6 16 X 2 I2C介面LCD顯示實習


在前一個範例中示範了4位元資料匯流排介面的LCD顯示器使用方法即使以這種最簡單的硬體接線方式來說也使用六條的IO接腳如果是傳統的Arduino模組板即使是Uno這種的最陽春的板子也還剩下不少的IO腳(Uno板最多可使用到20隻IO接腳)可以使用但對ESP8266這種只有9隻IO腳可用的單晶片模組來說可就麻煩了因此如果真的有需要使用到LCD顯示器作為訊息顯示之用的話建議改用只需使用到兩隻接腳具I2介面的LCD顯示器

I2C(Inter-Integrated Circuit)這個通訊傳輸界面是NXP(前身為飛利浦)開發的通訊協定一般唸做I-square-C(I平方C),看字面的意義就可知它主要用來做為IC之間的通訊。它的速度一般分為低速的100Kbit/s和高速的400Kbit/s兩種,目前更有高到1M bit/s和3.4Mbit/s,因為沒有像Ethernet那麼快,所以不適合傳送大量資料。由於他比RS232快速,因此非常適合拿來設定IC初始值,或是IC之間的控制訊號傳輸。因為I2C只使用兩條線通訊SDA(data)/SCL(clock)在這兩條線上可以併接非常多的元件或裝置而這些裝置只要使用不同的通訊位址就可以並接在一起不會發生衝突所以在一些很計較IO腳位的數目但又不需要太快傳輸速度的系統中非常受歡迎

由於I2C匯流排介面在Arduino IDE系統中是屬於”Wire.h”這個程式庫,所以必須先宣告;不過這個程式庫是內建在Arduino IDE系統中的程式庫路徑內,所以我們不必特別去下載安裝但是跟I2C介面LCD顯示器相關的函式還是必須再下載外掛的相關程式庫(名稱為”LiquidCrystal_I2C.h”)才行!接下來就帶領各位練習如何使取得及安裝這個名為”LiquidCrystal_I2C.h”的程式庫到Arduino IDE整合開發環境中。

當我們啟動Arduino IDE整合開發環境軟體時,如圖11所示,上方主功能選項中有一用紅線框起來,名稱為”草稿碼”(標記1)的選項,當我們將滑鼠移到它並以左鍵點選時,會有一下拉選項表單出現;如果我們點選圖中編號標註為2名稱為”匯入程式庫”的選項時,又會出現另外一個新的下拉選項表單,接著再點選這個選項表單中編號標註為3名稱為”管理程式庫”的選項後,就會開啟一個新的如12所示的程式庫管理員彈出視窗。

這個程式庫管理員工具視窗主要就是讓使用者能夠很容易的取得並安裝那些已經經過官方認可的程式庫就以我們這次的範例來說使用者先將鍵盤游標移到中以橘黃色線框圈起來的編號標註為2,名稱為”主題/全部”的右邊之搜尋文字輸入框內,並輸入”lcd i2c”(大小寫沒有差別)的搜尋特徵文字後,便可以在中間的搜尋結果視窗中看到一堆相關的程式庫。不過由於相關的程式庫很多,此時可以用滑鼠將右方以暗紅色線框圈起來編號標註為3的下拉滑桿往下移動,直到以英文’L’開頭的區域後,尋找如標註4的”LiquidCrystal_I2C” 程式庫;如果已經安裝過這個程式庫,則在編號標註為5的地方會看到”版本1.1.2  INSTALLED”這樣的文字內容,這代表此程式庫已經安裝過,且版本為”1.1.2”。


圖四11 Arduino IDE整合開發環境畫面


圖四12 Arduino IDE整合開發環境程式庫管理員視窗畫面


如果該函式庫還不曾安裝過的話,使用者可將滑鼠游標移到這個程式庫的範圍區域內,並按下左鍵,就會像看到右方編號標註為6的內容,其中左邊有一個下拉展開視窗,可讓使用者選擇想要安裝的版本,然後點選標註為”安裝”的按鈕便可以完成該程式庫的安裝動作。

目前市面可見到的I2C介面LCD顯示器其實都是以標準的LCD顯示器加上一塊所謂的I2C轉接板來達成圖四13所示,上方標記1的黑色模組板便是這塊I2C轉接板它主要是使用了PCF8574這顆I2C bus轉8bit I/O擴充IC這塊模組板的上方有一排16 Pin的排針座其編號與功能和標準的LCD顯示器外接腳位(標記2) 相同因此可直接焊接在LCD顯示器的後方(標記3)這樣便可構成了一個使用I2C介面的LCD顯示器


圖四13 I2C介面LCD顯示器與標準LCD顯示器之關係照片


功能與動作說明

1、 使用I2C介面可顯示2行每行16個字元的LCD顯示器做為顯示元件

2、 從第1行的第2個位置開始顯示"Hello wordl.."的訊息

3、 從第2行的第2個位置開始顯示"This is line 2!"的訊息


電路圖

圖414 16X2 I2C介面LCD顯示器接線與電路圖


程式說明與列表

這個範例程式和前一個主要的不同點在於式使用了”LiquidCrystal_I2C.h”這個外掛的程式庫所以程式一開始就先引入這個程式庫接著定義這個使用I2C介面的LCD顯示器物件變數”lcd”而這個物件變數的格式如下


lcd(addr,chNum,lineNum)


括弧中的第一個引數”addr”是這個I2C裝置的位址而第二個引數”chNum”是LCD顯示器每一行可顯示的字元數至於第三個引數”lineNum”則是LCD可顯示的行數。因此由下面的程式可知這個I2C介面的LCD顯示器使用”0x27”的位址,且螢幕畫面為16X2個字元


  1. #include <LiquidCrystal_I2C.h>     // 引入I2C介面的LCD顯示器函式庫 

 

  1. LiquidCrystal_I2C  lcd(0x27,16,2);   // 


除此之外,這種介面的LCD顯示器初始化指令為”lcd.init()”,而且也可以控制模組背光的亮滅,如果要點亮背光LED,使用的指令為「lcd.backlight()」,反之則可用「lcd.noBacklight()」。


8  lcd.init();                     // 初始化LCD顯示器 

9  lcd.backlight();                // 點亮LCD顯示器的背光電源


本範例程式中其他的部分和前一個完全相同在此就不多做贅述


以下是完整的程式列表:

 

#include <LiquidCrystal_I2C.h>     // 引入I2C介面的LCD顯示器函式庫 

 

LiquidCrystal_I2C lcd(0x27,16,2);   // 設定I2C介面LCD顯示器的硬體位址為 

                              // 0x27,顯示畫面為每行16個字元,一共2行

 

void setup()

{

  lcd.init();                     // 初始化LCD顯示器 

  lcd.backlight();                // 點亮LCD顯示器的背光電源

  // 將游標移回起始點,即第一行的第一個位置   

  lcd.home();

 

  lcd.setCursor(1, 0);            // 將游標移到第1行的第2個位置  

  lcd.print("I2C LCD Test...");    // 顯示"Hello wordl.."的訊息

  lcd.setCursor(1, 1);            // 將游標移到第2行的第2個位置

  lcd.print("This is line 2!");   // 顯示"This is line 2!"的訊息

}

 

void loop()

{

}



程式名稱LCD_I2C_2Line.ino


沒有留言:

張貼留言