close

Arduino在1.8.5的程式庫上找不到Newliquidcrystal_1.3.5了,

雖然我更新了LiquidCrystal_PCF8574這個程式庫的說明,

但應該還是有人不想換程式庫跟重新修改程式,所以我自己把1.3.5找回來,

並且還找到了新的1.5.1,但語法有些不一樣,一併提供。

Newliquidcrystal_1.3.5-master

NewLiquidCrystal_1.5.1

下載之後可以不用解壓縮直接匯入arduino IDE中:

2021-07-29

 

說明一下各種程式庫的差異,設定中只有一個最大差異就是背光,

下面是差異表:

功能 Newliquidcrystal1.3.5 Newliquidcrystal1.5.1 LiquidCrystal_PCF8574
背光 on lcd.backlight(); lcd.backlight(); lcd.setBacklight(255);
背光 off lcd.nobacklight(); lcd.nobacklight(); lcd.setBacklight(0);

實際上我實驗的結果,lcd.setBacklight();中的設定值,除了0是熄滅之外,

其他從1到255都是點亮背光,1602A的背光只有亮與不亮,沒有亮度差異,

這設定值應該是給其他能設定背光亮度的LCD模組用的,1602A上只有分亮與不亮。

 

呼叫函數上也有不同的方式,共同的是使用前要先把程式庫含進來:

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

要用到SPI跟I2C介面就要先呼叫wire.h

要用到I2C LCD介面就要呼叫LiquidCrystall_I2C.h

要注意的是三個程式庫都是呼叫同名稱的函式進來,所以如果同時裝上很多個程式庫的話,

include進來的程式LiquidCrystall_I2C.h會出現編譯錯誤訊息,必須將沒有用到的程式庫移除才行。

 

以下是各呼叫程式庫時參數的差異:

 

Newliquidcrystal_1.3.5:

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

括弧裡參數的意義是: I2C addr, en,rw,rs,d4,d5,d6,d7,bl,blpol

 

Newliquidcrystal_1.5.1:

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

使用方法完全同1.3.5

 

LiquidCrystal_PCF8574

LiquidCrystal_PCF8574 lcd(0x27);

括弧裡一樣只要放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
    全站熱搜
    創作者介紹
    創作者 呂阿谷 的頭像
    呂阿谷

    呂阿谷的部落格

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