Arduino在1.8.5的程式庫上找不到Newliquidcrystal_1.3.5了,
雖然我更新了LiquidCrystal_PCF8574這個程式庫的說明,
但應該還是有人不想換程式庫跟重新修改程式,所以我自己把1.3.5找回來,
並且還找到了新的1.5.1,但語法有些不一樣,一併提供。
下載之後可以不用解壓縮直接匯入arduino IDE中:
說明一下各種程式庫的差異,設定中只有一個最大差異就是背光,
下面是差異表:
功能 | 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會有不同的大小,範例程式會畫一個小圓
在螢幕上。
留言列表