2020年5月23日 星期六

四.4 16 X 2 4bit介面LCD顯示器實習


七段LED顯示器構造簡單使用容易但也因此可以顯示的訊息就很少如果需要顯示較多較複雜的訊息一般都會使用所謂的LCD顯示器模組(或者稱為LCM)以顯示的內容來區分可分LCD顯示器為文字(Character)型和繪圖(Graphic)型兩種後者也可以顯示文數字由於本書是著重在IOT物聯網方面的應用因此不太會使用到複雜或大型的繪圖(Graphic)型LCD顯示器所以在此僅介紹一些簡單LCD顯示器 使用方法


功能與動作說明

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

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

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


電路圖

圖410 16X2 4位元介面LCD顯示器接線與電路圖


程式說明與列表

由於在Arduino IDE中跟LCD顯示器有關的應用函式都不是內建的但是在安裝時已經放在預設的函式庫路徑中所以必須以引用(#include)的方式加入到程式中因此程式第一行便在宣告所需使用到的LCD程式庫「LiquidCrystal.h」

接這在第3行宣告並建立一個名稱為”lcd”的LCD顯示器物件變數


3. LiquidCrystal  lcd(14,2,0,4,5,16);  //設定 4 Bits 介面LCD顯示器的硬體接腳


這樣的格式代表使用4 bits的資料匯流排介面

在「LiquidCrystal.h」這個LCD程式庫中,共有四種格式的”LiquidCrystal()"物件變數格式,主要差別在使用到的引數數目,這些引數的內容包括3隻控制腳(即EN、RS、RW)與資料匯流排(D0~D7),由於所有的LCD函式指令都是寫入動作,所以RW這隻讀/寫控制腳可以不必使用;此外其中的匯流排引數可以是4位元(D4~D7)也可以是8位元(D0~D7),由於一般使用時在效果和速度上感覺不到兩者的差異,所以大都使用4位元的匯流排介面,以減少硬體接線和節省腳位。

由前面的說明可以得到下列四種”LiquidCrystal()"物件變數定義的格式


  1. LiquidCrystal(RS, EN, D4, D5, D6, D7)

  2. LiquidCrystal(RS, EN, RW, D4, D5, D6, D7)

  3. LiquidCrystal(RS, EN, D0, D1, D2, D3, D4, D5, D6, D7)

  4. LiquidCrystal(RS, EN, RW, D0, D1, D2, D3, D4, D5, D6, D7)


如果沒有別的原因當然是會選用第一種使用4位元資料匯流排的格式了

由於本範例的動作很簡單所以整個程式在初始化部分(setup())就完成了程式的第8行呼叫LCD的初始化指令"lcd.begin"設定LCD顯示器的外觀也就是顯示的行數與每一行的字數在此我們依照實際使用的LCD硬體架構設定為可顯示二行每行有16個字元


8   lcd.begin(16,2);                     // 初始化LCD顯示器 


接著呼叫游標歸位指令"lcd.home()"(第10行),讓游標回到左上角初始的位置(座標為0,0),再以游標設定指令"lcd.setCursor(x,y)" (第12行)把游標移動到訊息開始顯示的位置;其中的引數’y’代表行數(也就是垂直方向),’0’代表第一行,而’x’代表每行水平方向的位置,同樣是由’0’開始;在此’y’的值只能為0~1,而’x’則限制在0~15。

在設定好游標也就是訊息開始顯示的位置之後再使用LCD顯示指令”lcd.print()” (第1315行)把要顯示的內容放到引數內送到LCD顯示器就大功告成在此兩種要顯示的訊息都是以同樣的方式完成


以下是完整的程式列表:

 

#include <LiquidCrystal.h>     // 引入LCD顯示器函式庫 

 

LiquidCrystal  lcd(14,2,0,4,5,16);  // 設定 4 Bits 介面LCD顯示器的硬體接腳

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

 

void setup()

{

  lcd.begin(16,2);                     // 初始化LCD顯示器 

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

  lcd.home();

 

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

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

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

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

}

 

void loop()

{

}


程式名稱LCD_4bit_2Line1.ino


沒有留言:

張貼留言