본문 바로가기

아두이노로 장난하기

아두이노로 텍스트 LCD 표시하기




안녕하세요 고군입니다~

이번 시간에는 텍스트LCD에 대하여 알아보고, 아두이노를 사용하여 화면을 표시해보도록 하겠습니다.

텍스트 LCD는 그래픽이나 한글 표시가 힘들고 표시할 수 있는 문자의 수가 적어 그래픽 LCD에 밀려나는 추세이지만 저렴한 가격으로 인해 산업현장에서는 아직도 많이 사용되고 있으며, 표시(Display)장치와 구동(Driver)장치가 하나로 되어 있습니다. 또한 그래픽 LCD보다 사용되는 포트수가 적고 사용이 용이해 여전히 학습용으로 많이 사용되고 있습니다.

LCD는 8문자 x 2라인, 16 x 2, 16 x 4, 20 x2, 40 x 2라인 등 많은 종류가 있는데 여기서는 16 x 2 LCD에 대해 알아보겠습니다.


[그림1] 텍스트 LCD 외형 및 연결 회로도


 핀 번호

 기호

 기    능

 1

 Vss

 0V

 전원

 2

 VDD

 5V

 3

 VL

 VR 10k

 4

 RS

 H : 데이터, L : 인스트력션

 5

 R / /W

 H : 리드, L : 라이트

 6

 E1

 H : 인에이블 신호

 7

 D0

 데이터 버스

 4비트 사용시 : D4~D7만 사용

                     상위 4비트

                     하위 4비트

 8비트 사용시 : D0~D7사용

 8

 D1

 9

 D2

 10

 D3

 11

 D4

 12

 D5

 13

 D6

 14

 D7

 15

 A

 LDE 백라이트 전원

 16

 K

LCD 핀 기능


▶ VSS

   LCD에 전원을 인가하는 단자로, 0V(GND)에 연결합니다.

▶ VDD

   LCD에 전원을 인가하는 단자로, +5V에 연결합니다.

▶ VL

  LCD의 밝기를 조절하는 단자로서, 10kΩ의 가변 저항을 연결하여 밝기를 조정합니다. 밝기 조정을 하지 않으려면 GND에 연결합니다.

▶ RS(Register Select)신호, 핀4

  입력 신호를 받는 단자로서 액정 표시 모듈에 데이터 혹은 명령을 읽기/쓰기할 때 사용합니다.

▶ R / /W(Read/Write) 신호, 핀5

  입력 신호로서 액정 표시 모듈에 데이터 혹은 명령을 라이트/리드할 때 사용합니다. 리드/라이트 신호 사양은 LCD 제조 회사마다 조금씩 다르다는 것을 유의하여야 합니다.

▶ E1(Enable) 신호, 핀6

  이 신호는 Active High입니다. 이것은 GAL 16V8의 입력 어드레스 라인을 조합하여 생성해낸 출력 어드레스 라인을 이용하여 LCD 인에이블 신호를 선택하도록 합니다.

▶ D0~D7(Data Bus)

  데이터 버스로서 CPU와 LCD 사이에 데이터를 주고받기 위한 데이터 버스입니다. 만약 4비트를 사용할 경우에는 D4~D7만 사용합니다.

▶ A

  백 라이트의 전원 단자로서 IN4001(다이오드)을 연결하여 전압을 강하시켜서 사용합니다.

▶ K

  백 라이트의 전원 단자로서 GND에 연결합니다.


▶ 아두이노


[전자부품목록]




▶ 아두이노 보드: 1개 

▶ 브레드보드: 1개

▶ 점프선 : 다량

▶ 저항 220옴: 1개

▶ 텍스트 LCD: 1개


[그림2] 텍스트 LCD 아두이노 연결도


텍스트 LCD제어를 위한 핀 연결


이번 아두이노 보드 테스트에서는 8비트 모드가 아닌 4비트 모드를 사용하여 제어합니다. 4비트 모드는 위 그림과 같이 데이터 신호 4개와 제어신호 3개를 사용하여 동작시키게 됩니다. 그리고 3개의 제어신호 중 R/W는 Read(읽기)는 사용하지 않고 Write(쓰기)기능만 사용하기 때문에 GND에 연결했습니다.


▶ 아두이노 소스 예제




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <LiquidCrystal.h>
 
//LCD 객체
LiquidCrystal lcd(12115432);
 
void setup( ) 
{
 
  //LCD의 열수와 행수를 설정
  lcd.begin(162);
 
  lcd.print("TEXT LCD");
 
}
 
void loop( ) 
{
 lcd.setCursor(01);
 lcd.print("HELLO WORLD!");
}
 
cs


▶ 함수 설명


● LiquidCrytal

 LiquidCrystal(uint_t rs, uint8_t enable,

                  uint_t d0, uint_t d1, uint_t d2, uint_t d3, 

                  uint_t d4, uint_t d5, uint_t d6, uint_t d7);

 LiquidCrystal(uint_t rs, uint_t rw, uint8_t enable,

                  uint_t d0, uint_t d1, uint_t d2, uint_t d3, 

                  uint_t d4, uint_t d5, uint_t d6, uint_t d7);

 LiquidCrystal(uint_t rs, uint_t rw, uint8_t enable,

                  uint_t d0, uint_t d1, uint_t d2, uint_t d3);

 LiquidCrystal(uint_t rs, uint8_t enable,

                  uint_t d0, uint_t d1, uint_t d2, uint_t d3); 

LiquidCrytal 클래스의 생성자로 4비트 또는 8비트 모드에 따라 지정해야 할 데이터 핀의 수가 달라지며, R/W 신호를 사용하지 않는 경우 GND에 연결해야 합니다.

● begin

 void begin(uint8_t cols, uint_t rows. uint8_t charsize                        LCD_5x8DOTS);

 매개변수 cols: 열의개수, rows: 행의개수, charsize: 글자크기 

텍스트 LCD를 초기화 합니다. 초기화 과정에서 창의 크기와 글자 크기를 지정할 수 있습니다. 글자 크기는 5x10크기 또는 5x8 크기 중 선택할 수 있고 디폴트는 5x8크기입니다.