相關知識:認識 液晶顯示器LCD模組
資料出處: Arduino_邁向AMA中級先進微控制器應用認證AB115_PDF.pdf
1. 簡介
(1) 液晶顯示器模組(liquid crystal display module, LCM)是重要的周邊 裝置,由於直接推動 LCD 需很複雜之硬體電路,因此 IC 設計公司設計了一些晶片來進行這些複雜的動作,LCD 模組製造公司才使用這 些晶片與電路板、LCD 組合成為一個模組,以方便使用者應用,因 此一般都使用 LCD 模組來設計產品,簡稱 LCM 或 LCD。LCD 模組 是一個容易使用的輸出設備,在人機介面上扮演了很重要的角色。
(2) LCD 模組依照顯示功能可分為文字型與繪圖型兩大類,本章所使用 的模組為文字型:
文字型常見的規格有 16 字×1 列、16 字×2 列、20 字×1 列、 20 字× 2 列、20 字× 4 列,可透過 ASCII 碼對應顯示出英文與 各種符號;若想顯示中文,則需要特殊的 LCD 模組,其模組內 建中文字型,需占用較大的記憶體。 繪圖型的規格以內含的點陣數表示,例如128×64 等大小,繪 圖型 LCD 可顯示比較複雜的圖形,以及進行比較多的變化。
(3) 文字型LCD模組大部分是以HD44780控制晶片為核心,其特性如下:
內建80bytes 的資料顯示記憶體(data display RAM, DD RAM),使用者只要將欲顯示文字的 ASCII 填入此記憶體中即 可顯示。
內建系統字型記憶體(character generate ROM, CG ROM),共 160 個 5×7 字型,字型如同附錄的 ASCII 碼。 具有自建字型產生器(character generate RAM, CG RAM),共 有 8 個 5×7 字型可由使用者自訂,其 ASCII 碼為 0 ~ 7。
2. 外觀與腳位 (1) LCD 模組外觀如圖 12-7、圖 12-8 所示,其中圖 12-7 為文字型 LCD,腳位型式有單一排14+2 腳,也有雙排14+2 腳的形式,其中 +2 是代表有背光的模組腳數;為簡化接腳數,LCD 模組也有改成 I2C 介面 * 的 LCD,使用時只要 2 個 I/O 即可使用。圖 12-8 為繪圖型 LCD,此類 LCD 大都採用 I2C 傳輸。
註 I2C(Inter-Integrated Circuit;唸作I square C)匯流排是由PHILIPS 公司 開發的兩線式串列匯流排,用於連接微控制器及其周邊設備。I2C 由資料線 SDA 和時脈 SCL 構成,可在 MCU 與周邊 IC 間、或周邊 IC 與 IC 間進行雙 向傳送,最高傳送速率 100kbps。
P12-8
LCD 模組腳位說明
腳號 | 符號 | 說明 | 備註 |
1 | GND | 接地(0V) | |
2 | VDD | 電源(+5V) | |
3 | Vo | 可接一顆1kΩ電阻,或使用可變電阻調整適當的對比 | |
4 | RS | 1:D0–D7 當作資料解釋; 0:D0–D7 當作指令解釋 | |
5 | R/ W | 1:從LCD 讀取資料0:寫資料到LCD | |
6 | E | 致能(Enable)高態動作 | |
7 | DB0 | 資料匯流排的長度可為8 位 元或是4 位元: 1. 使用8 位元資料傳輸快但 占用較多I/O 腳(DB0 ~ DB7) 2. 選擇4 位元傳輸較慢但只 占用4 支I/O 腳(DB4 ~ DB7) | Bit0 LSB |
8 | DB1 | | Bit1 |
9 | DB2 | | Bit2 |
10 | DB3 | | Bit3 |
11 | DB4 | | Bit4 |
12 | DB5 | | Bit5 |
13 | DB6 | | Bit6 |
14 | DB7 | | Bit7 MSB |
15 | A(+) | LED背光陽極( 串接220Ω~330Ω 電阻到電源) | |
16 | K(-) | LED背光陰極(GND) | |
3. LCD 模組有很完整的控制指令,但礙於篇幅及考慮其複雜性,本章不討 論其細節的控制指令部分,直接以 Arduino 提供的 LCD 函式庫進行 LCD 的控制,使用時需引入下列的函式庫。
#include <LiquidCrystal.h>
常見的指令有:
(1) LCD 初始化:使用模組前需對LCD 硬體進行初始化動作,
lcd.begin();// initialize the LCD
透過 LiquidCrystal 指令,可建立 LCD 物件,並指定使用哪些控制腳或資 料腳位,其宣告方式有以下幾種: LiquidCrystal lcd(RS, Enable, D4, D5, D6, D7); LiquidCrystal lcd(RS, RW, Enable, D4, D5, D6, D7); LiquidCrystal lcd(RS, Enable, D0, D1, D2, D3, D4, D5, D6, D7); LiquidCrystal lcd(RS, RW, Enable, D0, D1, D2, D3, D4, D5, D6, D7); 其中RW 為選擇性接腳,未使用時應接地;另外D0 ~ D7 也可 選用一次送8 位元的資料,或是選用D4 ~ D7 分送二次完成8 位元 資料的方式。初始化後,lcd 為繼承 LCD 函式庫後的物件變數名稱。
(2) clear():清除螢幕 此指令可清空 LCD 螢幕,並將游標移至第 0 列第 0 行。
lcd.clear();
(3) begin(x, y):設定使用的 LCD 畫面大小 此指令可設定 LCD 文字列的大小,以 16×2 為例,範例如下: lcd.begin(16,2);
(4) home():將 LCD 游標回歸到左上角位置(第 0 列第 0 行) lcd.home();
(5) setCursor(x, y):移動游標位置至第 x 行第 y 列 例如移動游標至第 1 列第 12 行的位置(左上角是從 0,0 開始計算) lcd.setCursor(12, 1);
(6) lcd.print(data, BASE):輸出文字或數字在 LCD 上
lcd.print("Hello, world!");
data 可顯示的資料型態有 char、byte、int、long 或 string;BASE 為選擇性參數,若 data 為非字串資料型態,可指定顯示數值的方式, 可以是 BIN 二進制、DEC 十進制、OCT 八進制或 HEX 十六進制。 lcd.print(data, BASE);
(7) lcd.write(data):輸出字元或 ASCII 碼在 LCD 上 此指令可顯示 data 的 ASCII 碼,例如 char var=65,則 lcd.write(var) 顯 示 'A' 字元(65 的 ASCII 為 A),若使用 lcd.print(var) 則顯示 '65'。 lcd.write(data);
(8) 幾個控制指令,分述如下:
lcd.cursor(); // 顯示游標
lcd.nocursor(); // 隱藏游標
lcd.blink(); // 游標閃爍
lcd.noblink(); // 游標不閃爍
lcd.display(); // 開啟 LCD 顯示器
lcd.noDisplay(); // 關閉 LCD 顯示器