市面上這種 1602 液晶模組據書上講大都是相容於 Hitachi HD44780 晶片, 因此功能與使用方式差不多, 但可能模組接腳會有些不同. 通常都是有背光功能的 16 針腳包裝, 有些則只有 14 腳, 那就是沒有背光功能的, 少了背光電源輸入針腳 A, K. 我手上這塊 1602A 是 16 針腳的, 長相如下 :
接腳 | 功能 | 接 Arduino |
1 (VSS) | 電源負極 | GND |
2 (VCC) | 電源正極 | 5V |
3 (Vo) | 調整對比 | 可變電阻中腳 |
4 (RS) | D0~D7放入資料暫存器 (1) 或指令資料暫存器 (0) | 腳位 2 |
5 (RW) | 讀取 (1) 或寫入 (0) LCD | GND (寫入) |
6 (E) | 可寫入 (1) 或不可寫入 (0) LCD | 腳位 3 |
7 (D0) | 資料位元 0 | 不接 |
8 (D1) | 資料位元 1 | 不接 |
9 (D2) | 資料位元 2 | 不接 |
10 (D3) | 資料位元 3 | 不接 |
11 (D4) | 資料位元 4 | 腳位 4 |
12 (D5) | 資料位元 5 | 腳位 5 |
13 (D6) | 資料位元 6 | 腳位 6 |
14 (D7) | 資料位元 7 | 腳位 7 |
15 (A+) | 背光電源正極 | 5V |
16 (-K) | 背光電源負極 | GND |
接腳 2 正極電源 (VCC) 有時稱為 VDD, 記得以前學校電子學 FET 場效應電晶體慣用 VDD (因為接汲極 Drain 之故), 而雙極電晶體則用 VCC (因為接集極 Collection 之故), 反正不管 VCC 或 VDD, 就是接電源正極 (+5V). 書上有提到有些 LCD 模組的 VCC(+5V) 與 VSS(GND) 腳位可能顛倒, 要特別注意, 接錯可能對零件造成損傷.
OK, 下面就紀錄這次測試情形, 首先準備材料如下 :
- 麵包板 *1
- 10K 可變電阻 *1
- 公對公杜邦線 *15
這是我的 LCD 模組的接法, 從正面看從左到右是腳 1~ 腳 16, 有些 LCD 模組接腳安排可能不同, 要注意. 麵包板最上面兩排是電源, 上正下負, 所以分別連接 Arduino 的 GND 與 5V, 整個橫列都是共通的, 所以 1602 的 1 腳接 GND, 2 腳接 5V, 背光的 A 接 5V, K 接 GND.
初次使用 fritzing 令我驚艷, 這麼好用的工具竟然是 open source, 實在太棒了. 直接在接點上點一下就可以接線, 若要畫垂直線, 只要按住 shift, 再點接線, 就可以移動線條調整為如上的四四方方接線圖, 若按住 ctrl, 則可調整為曲線.
測試程式取自葉難 "Arduino 範例分析與實作設計" 的程式碼 5.11 :
#include <LiquidCrystal.h>
#define RS 2
#define E 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7
LiquidCrystal lcd(RS,E,D4,D5,D6,D7); //建立 LCD 物件
void setup() { //初始設定 (一次性)
lcd.begin(16,2); //定義 LCD 為 2 列 16 行顯示器
lcd.setCursor(0,0); //游標移到左上角
lcd.print("Hello World!"); //在第一列印出 Hello World!
}
void loop() { //無限迴圈
lcd.setCursor(0,1); //游標移到第 2 列第 1 行
lcd.print(millis()/1000); //印出秒數
}
可見程式上傳執行時, setup() 會在第一列顯示 Hello World!, 然後進入無限迴圈, 在第二列顯示經過的秒數. 按 UNO 板上的 RESET 鈕又會歸零重新開始計時.
剛送電時 LCD 顯示全藍底色, 但程式上傳後還是一樣, 沒有顯示 Hello World, 原來還要調整可變電阻, 這樣對比才會變大. 其實我覺得根本不需要可變電阻, 直接把 1602 的 Vo 接地即可, 這樣對比最強 (Vo 接 VCC 對比最小), 加可變電阻調對比是多此一舉. 這麼一來整個測試只用到 Arduino 與 1602 模組兩個元件, 真是厲害.
經過這個測試證實這塊 LCD 模組在購入數年後仍然可用. 但這實驗占用了 Arduino 四個輸出腳, 若結合其他感測器或許會不夠用, 這時可以採用 I2C 模組來將佔用腳數降至 2 個, 即 Arduino 輸出給 I2C 模組, 再由 I2C 模組驅動 LCD 模組, 所以將 I2C 模組列入下次採購項目.
相關產品市調如下 :
# LCD 1602 LCM 液晶顯示模組 I2C IIC 介面 5V 16x2 16*2 藍底 白字 $140
# LCD 1602 A 3.3V 藍底白字液晶顯示模組 Arduino專用 #69
# LCD 1602 I2C 轉接板 1602液晶顯示器 IIC 界面接口 $39
其次來測試 LCD 文字跑馬燈效果, 利用 scrollDisplayLeft() 與 scrollDisplayRight() 可以將原先用 print() 輸出的文字向左或向右移動一格. 下列程式參考了 "Arduino 一試就上手" 7-7 節 :
程式 :
#include <LiquidCrystal.h>
#define RS 2
#define E 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7
LiquidCrystal lcd(RS,E,D4,D5,D6,D7); //建立 LCD 物件
void setup() { //初始設定 (一次性)
lcd.begin(16,2); //定義 LCD 為 2 列 16 行顯示器
lcd.print("Hello World! This is a scroll test."); //在第一列印出 Hello World!
delay(1000); //延遲1秒
}
void loop() { //無限迴圈
lcd.scrollDisplayLeft(); //往左捲動
delay(400); //延遲0.4秒
}
參考資料 :
# Fritzing 麵包板:LED 閃爍電路
3 則留言 :
請問你有用過 LCD I2C 介面嗎 ?, 最近卡在這裡
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // 設定 LCD I2C 位址
LiquidCrystal_I2C lcd(0x27, 16,2)
為何有兩種寫法,要用哪一種 ?
Sorry, 我沒有 I2C 的 1602, 這可能是函式庫不同問題, 有的程式庫須宣告LCD的腳位, 參考 :
http://www.mobile01.com/topicdetail.php?f=368&t=4618137&p=2
我用0x3F,就可以使用
device:Arduino UNO
張貼留言