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