Robofun 機器人論壇
標題:
Arduino控制2x16 LCD (使用LCD4Bit Library)
[打印本頁]
作者:
babyfish0226
時間:
2008-1-13 20:16
標題:
Arduino控制2x16 LCD (使用LCD4Bit Library)
嘗試以Arduino控制LCD好多天,終於在今天給試了出來
[youtube]he0QeltyiK8[/youtube]
線接的亂七遭...
不過還是浪費了一組LCD,由於第一顆買的是PVC160203PTN 2x16,可惜網路上竟然找不到DataSheet,
再加上必須焊接而不能直接利用麵包板測試,在自己技術不純熟的情況之下把接腳焊的一蹋糊塗,另外也因為
不曉得有『吸錫帶』這東西,看著揪成一堆的『作品』,在心痛且不知所措的情況之下只好再跑去電子材料行
買了另一棵2x16的LCD。
第二顆買的是LMC-stc2d16drg,這才發現,原來所有的LCD不只都和HD44780相容
(Arduino LCD Library使用說明中有提到要相容),而且所有的接腳都是一樣的,想到自己為了找HD44780相容
的LCD及DataSheet而浪費不少時間,就覺得有點好笑。
Anayway,還好多了stc2d16drg這一顆才讓我釐清了部分重要的觀念,接下來的過程也就比較順利一點了。
首先要做的也是將Arduino及LCD做結合,這次我學乖,在新的LCD下墊個東西讓針腳可以插入固定,而接線的部份
在官方的範例中都有提到,不過在Arduino中對於LCD的控制有兩個重要的Library,一為LiquidCrystal,另一個則是LCD4Bit,
而這兩個有什麼不同呢?LCD4Bit是改良自LiquidCrystal,所以也提供了較多有趣的function及控制,最重要的是LCD4Bit使用的
接腳較少而且還可以控制多行LCD(我買的是2x16啊),所以當然是選擇他囉!(事實上我是從LiquidCrystal開始玩)。
Arduino與LCD接腳的對應位置
Arduino LCD
------------------------------------
2 Enable
3 Data Bit 0 (DB0)
4 (DB1)
5 (DB2)
6 (DB3)
7 (DB4)
8 (DB5)
9 (DB6)
10 (DB7)
GND
(11)
Read/Write (RW)
12 Register Select (RS)
------------------------------------
以大多數的LCD來說,若無背光則會有14個Pin,若有背光則會有16個,而接腳位置大多如下(不用找datasheet):
------------------------------------
1 VSS (接地)
2 VDD(5V電源輸入)
3 VO (調整對比,請接一個1k的可變電阻)
4 Register select(RS)
5 READ/WRITE(RW)
6 Enable
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4
12 DB5
13 DB6
14 DB7
15 A(+) 背光
16 K(-) 背光
------------------------------------
上述綠色字的部份是LiquidCrystal所使用的接法,但若使用LCD4Bit則不需要接,可省下幾個 Pin額外使用,
但比較不同的是,在LiquidCrystal中LCD的RW是需要接到Arduino的 Pin11,但LCD4Bit則改為接地,
這點比較需要注意一下。
另外在LCD的VO腳位一定要接上一個1k的電阻或可變電阻,不然LCD可是什麼都看不到的喔(我就是沒做而浪費不少時間)。
現在來看一下LCD4Bitn所提供的範例吧:
------------------- Arduino use LCD4Bit Library ---------------------------
//example use of LCD4Bit library
//載入LCD4Bit Library
#include <LCD4Bit.h>
//建立一個LCD的控制物件並指定您LCD的行數,官方原為1行,這裡我改成2行
LCD4Bit lcd = LCD4Bit(2);
//宣告並指定要顯示的訊息或字串
char msgs[6][15] = {"apple", "banana", "pineapple", "mango", "watermelon", "pear"};
int NUM_MSGS = 6;
void setup() {
//Pin13接上一顆LED做為測試使用
pinMode(13, OUTPUT);
//lcd初始化
lcd.init();
//下面為選項參數,您可以不設定,或是自行設定LCD初始的顯示相關預設值,
//這裡的設定會取代原Library在init的過程中所設定的預設值
//lcd.commandWrite(0x0F);//cursor on, display on, blink on. (nasty!)
}
void loop() {
digitalWrite(13, HIGH); //light the debug LED
//pick a random message from the array
int pick = random(NUM_MSGS);
char* msg = msgs[pick];
//清除lcd畫面上的所有資料
lcd.clear();
//在lcd上列印出訊息
lcd.printIn(msg);
delay(1000);
digitalWrite(13, LOW);
//這裡只是將每一個訊息後面加上三個點而已
for (int i=0; i<3; i++){
lcd.print('.');
delay(100);
}
//將游標利至第二行並印出訊息
lcd.cursorTo(2, 0); //line=2, x=0.
lcd.printIn("Score: 6/7");
delay(1000);
//將LCD上現有的文字以50ms的速度向左移動20個字元
//這是LCD4Bit有趣的功能,可以做到文字動畫的效果,好玩喔。
lcd.leftScroll(20, 50);
}
----------------------------------------------------------------------
是不是很簡單呢?只是......不曉得為何我會搞了這麼多天?
下一個要玩甚麼呢?
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2