最近文章

Arduino筆記(四):在2x16 LCD上顯示 Hello World訊息

[2013/03/16]
練習使用HD44780相容(或稱1602)液晶顯示 LCD(Liquid crystal display),在2x16的顯示幕印出"Hello World", 並測量可變電阻的數值,也同時學習使用analogRead()函式及LiquidCrystal Library。

執行結果如下圖:


[1602顯示器接腳說明]

LCD顯示器若無背光則會有14個Pin,若有背光則會有16個,而接腳位置大多如下:
------------------------------------
1 VSS (接地)
2 VDD (5V電源輸入)
3 VO 或稱 Vee:調整對比,需接一個1k的可變電阻
4 Register Select(RS):1: D0 – D7 當作資料解釋,0: D0 – D7 當作指令解釋
5 READ/WRITE(RW): 1: 從 LCD 讀取資料,0: 寫資料到 LCD
6 Enable
7 DB0
8 DB1
9 DB2
10 DB3

11 DB4
12 DB5
13 DB6
14 DB7
15 A(+) 背光:可接330 Ohm電阻到電源
16 K(-) 背光:接地
------------------------------------

看過一些HD44780相容的範例,Arduino對LCD的控制有兩個重要的Library,一個是LiquidCrystal,另一個是LCD4Bit,LCD4Bit是改良自LiquidCrystal,所以也提供了較多有趣的function及控制,最重要的是LCD4Bit使用的接腳較少,且可以控制多行顯示。使用 4-bit 模式主要的好處是節省 I/O 腳位,通訊的時候只會用到 4 個高位元 (D4-D7)。

[材料]

•麵包板 x 1
•Arduino 主板 x 1
•HD44780 相容 LCD x 1 (本實驗使用 16 pin 有背光 LCD)
•旋轉式可變電阻 x 1
•單心線 x N條


[接線圖]

• 將 LCD 的 RS(4), Enable(6), D4(11), D5(12), D6(13), D7(14) 依序接到 12, 11, 5, 4, 3, 2 腳位
• 將 LCD 的 VSS(1) 及 R/W(5) 接到 GND,VDD(2)接到 +5V
• 可變電阻中間腳位接到 LCD 的 VO,其中一支接到 5V,另外一支接 GND (註:或是在VO 上串接一顆 1k ohm 電阻連到 GND)


[實驗結果]

• analogRead()這個函式讀取的值是 10 bit,也就是一個位於0到1023之間的值
• analogRead()大約每秒鐘讀取10,000次
• LCD顯示的數值會一直改變,因為會受其他是否有類比輸入以及手是否靠近版子有關等


[程式]

/* 在2x16的顯示幕印出"Hello World", 並測量可變電阻的數值
 * This example code is in the public domain.
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * 10K Potentiometer:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3) */

// 引用 LiquidCrystal Library
#include 



// 建立 LiquidCrystal 的變數 lcd
// LCD 接腳: rs, enable, d4, d5, d6, d7 
// 對應到 Arduino 接腳: 12, 11, 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
 // 設定 LCD 的行列數目 (2 x 16)
 lcd.begin(16, 2);

 // 設定類比串列速率
Serial.begin(9600);

 // 列印 "Hello World" 訊息到 LCD 上
lcd.print("hello, world!");
}

void loop() {
 // 將游標設到 column 0, line 1, (注意: line 1 是第二行(row),因為是從 0 開始數起)
lcd.setCursor(0, 1);

// 列印 Arduino 重開之後經過的秒數
// lcd.print(millis()/1000);

// 讀取A0的類比值
int sensorValue = analogRead(A0);

// 將類比的數值顯示在第二列
lcd.print(sensorValue);

// 顯在一份資料是視窗上

Serial.println(sensorValue);
  delay(2000);     // delay in between reads for stability
}


[參考資料]

Copper Maa Blog:Arduino 筆記 – Lab9 在 2x16 LCD 上顯示 "Hello World" 訊息
Arduino webSite:Examples > Libraries > LiquidCrystal


3 則留言:

  1. 請問可以顯示出值,可是可變電阻很難調(調到清楚很容易就跑掉),可以怎麼解決?謝謝!

    回覆刪除
    回覆
    1. 可以換成精密型的可變電阻

      刪除
  2. 想請問您1602 I2C LCD 要如何設定

    回覆刪除