close

函式庫可以提供很多功能方便使用,底下先將常用的函式庫功能與寫法放上去:

首先程式一開始需依照硬體架構include相關的函式庫,

後面才能正確驅動硬體功能。

並列式用法:

#include <LiquidCrystal.h>

再來就是指定各功能腳位:

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

當然也可以直接指定腳位節省一些打字時間,底下這行可以取代上面兩行:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

8位元介面太浪費腳位這裡就不多做介紹。

串列式用法1 74LS164 SR:

#include <Wire.h>
#include <LiquidCrystal_SR.h>

只要在arduino上要使用TWI/I2C介面就要加入第一行 include  wire.h

第二行則是使用74LS164 Shift Register IC時要使用的函式庫

再來就是指定各功能腳位:

LiquidCrystal_SR lcd(8,7,TWO_WIRE);

第一個數字是指定clock pin,第二個數字是指定data/enable pin

串列式用法2 I2C:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

只要在arduino上要使用SPI/I2C介面就要加入第一行 include  wire.h

第二行則是使用I2C介面LCD時要使用的函式庫

再來就是指定I2C address:

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

第一個數字是指定I2C位址,需配合所使用的硬體做正確設定。

 

除了上述依照不同硬體所使用的函式庫及初始化不一樣之外,

底下的函式庫功能則是通用的。

 

注意:

begin() 這個函式必須在呼叫所有 LiquidCrystal 函式庫提供的函式之前呼叫。

初始化液晶顯示器,藉由給予液晶顯示器的高度和寬度,讓 LiquidCrystal 物件知道液晶顯示器的可印範圍。

實際上LiquidCrystal這個函式庫並不僅支援1602而已,還有其他各種規格LCD都支援,

所以要先讓函式庫知道可使用範圍,語法:

lcd.begin(cols, rows)

配合1602A就是:

lcd.begin(16,2);   

 

以下的函式功能則不分順序都可以配合使用者需求使用。依照字母順序排列:

clear()

描述
清除液晶顯示器目前顯示的字元並把游標位置移至左上角。

語法

lcd.clear();

參數
無參數

 

home()

描述
把游標位置移至左上角。如果移動游標的同時也要清除液晶顯示器上顯示的字元,可以使用 clear()。

語法

lcd.home();

參數
無參數

 

setCursor()

描述
移動液晶顯示器的游標至指定位置。

語法

lcd.setCursor(col, row);

參數
col:游標新位置的行數,行數從 0 開始計算
row:游標新位置的列數,列數從 0 開始計算

 

write()

描述
在液晶顯示器上顯示字元。

語法

lcd.write(data);

參數
data:要顯示到液晶顯示器上的字元

回傳
byte:回傳輸出到液晶顯示器上的字元數

範例

#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
 
void setup()
{
  Serial.begin(9600);
}
 
void loop()
{
  if (Serial.available()) {
    lcd.write(Serial.read());
  }
}

此範例程式可以讓使用這在com port介面上將輸入的字元輸出到LCD上,

不過重複輸入時並不會清除前面的字元,僅為測試而已。

 

print()

描述
在液晶顯示器上顯示文字。

語法

lcd.print(data);
lcd.print(data, BASE);

參數
data:要顯示在液晶顯示器上的資料,型態可為 char, byte, int, string
BASE (非必要):BASE 用來指定資料的格式;可用的格式有:BIN (二進位格式)、OCT (八進位格式)、DEC (十進位格式)、HEX (十六進位格式)

回傳
byte:回傳輸出到液晶顯示器上的字元數

範例
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
 
void setup()
{
  lcd.print("hello, world!");
}
 
void loop() {}
 

這個函式功能應該是最常用的幾種函式之一,範例就是在螢幕上顯示hellworld!字元。

 

cursor()

描述
在液晶顯示器上顯示游標。

語法

lcd.cursor();

參數
無參數

 

noCursor()

描述
隱藏液晶顯示器的游標。

語法

lcd.noCursor();

參數
無參數

 

blink()

描述
在液晶顯示器上顯示閃爍的游標。如果與 cursor() 混合使用,結果將取決於使用的液晶顯示器。

語法

lcd.blink();

參數
無參數

 

noBlink()

描述
隱藏液晶顯示器閃爍的游標。

語法

lcd.noBlink();

參數
無參數

 

display()

描述
把因為呼叫 noDisplay() 而被隱藏的內容顯示出來。

語法

lcd.display();

參數
無參數

 

noDisplay()

描述
隱藏液晶顯示器印出的資料,被隱藏的資料並不會消失,

可以呼叫 display() 使被隱藏的資料重新顯示。

語法

lcd.noDisplay();

參數
無參數

 

scrollDisplayLeft()

描述
使液晶顯示器上顯示的資料往左移動一行。

描述

lcd.scrollDisplayLeft();

參數
無參數

 

scrollDisplayRight()

描述
使液晶顯示器上顯示的資料往右移動一行。

語法

lcd.scrollDisplayRight();

參數
無參數

 

autoscroll()

描述
啟動液晶顯示器自動滾動的功能,啟動自動滾動的功能後,
如果目前字元排列的方式是由左至右(預設的狀態),
每次有新的字元要顯示在液晶顯示器上時,
都會使原本顯示的字元往左移動一行,
反之如果是由右至左則會往右移動一行,
如此使每次新加入的字元都會在同一個位置上。

語法

lcd.autoscroll();

參數
無參數

 

noAutoscroll()


描述
關閉液晶顯示器自動滾動的功能。

語法

lcd.noAutoscroll();

參數
無參數

 

leftToRight()

描述
設定液晶顯示器顯示字元的排列方式為由左至右(預設的狀態),

這設定不影響已經顯示在液晶顯示器上的字元。

語法

lcd.leftToRight();

參數
無參數

 

rightToLeft()

描述
設定液晶顯示器顯示字元的排列方式為由右至左(預設為由左至右),

這設定不影響已經顯示在液晶顯示器上的字元。

語法

lcd.rightToLeft();

參數
無參數

 

createChar()

Description
自訂客製化的字元,最多可以自訂八個 5*8 的字元,每個自訂字元會有一個編號,

編號從 0 ~ 7。每個自訂字元使用一個內含有 8 個位元組的陣列來儲存,

其中每個位元組只會使用到 0 ~ 4 五個位元,如果在這 0 ~ 4 的位元設定為 1

代表要液晶顯示器的這格亮,如果設定為 0 則代表要暗。

要顯示自訂字元時把自訂字元的編號作為參數傳入 write() 函式。

註:當要使用編號為 0 的自訂字元時,如果作為參數給 write() 函式的不是變數,

應該要把型態轉換為 byte,否則會發生編譯錯誤,詳見以下範例。

語法

lcd.createChar(num, data);

參數
num:自訂字元的編號
data:存放自訂字元的陣列

範例

#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
byte smiley[8] = {
  B00000,
  B10001,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};
 
void setup() {
  lcd.createChar(0, smiley);
  lcd.begin(16, 2);  
  lcd.write(byte(0));
}
 
void loop() {}

 

1602A除了內存的字型之外還能以點陣圖的方式輸出,

這個函式就是提供寫入自訂圖形到1602A的記憶體內,

隨著不同的LCD會有不同的大小,範例程式會畫一個小圓

在螢幕上,如下圖:

 

arrow
arrow

    呂阿谷 發表在 痞客邦 留言(1) 人氣()