| 
 | 
 
嘗試以Arduino控制LCD好多天,終於在今天給試了出來   
 
  
線接的亂七遭... 
 
不過還是浪費了一組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); 
} 
---------------------------------------------------------------------- 
 
是不是很簡單呢?只是......不曉得為何我會搞了這麼多天?    
 
下一個要玩甚麼呢? |   
 
 
 
 |