본문 바로가기
대한상공회의소 스마트팩토리 교육/IoT 디바이스 개발

[IoT 디바이스 개발] 아두이노«수업-4» : LCD Display (1602A) 사용법 (LiquidCrystal lcd 함수 / lcd.begin 함수 / lcd.setCursor 함수 등)

by 나는영하 2022. 1. 28.

※ 주의사항 

본 블로그는 수업 내용을 바탕으로 제가 이해한 부분을 정리한 블로그입니다.
본 내용을 참고로만 보시고, 틀린 부분이 있다면 지적 부탁드립니다!

감사합니다😁

 

안녕하세요!!

오늘은 아래와 같은 내용을 확인해보겠습니다.

 

LCD Display 사용법

LiquidCrtystal lcd 함수

lcd.begin 함수

lcd.setCursor 함수

기타 lcd 관련 함수들


1.  TEXT LCD Diplay(1602A)

TEXT LCD Display(1602A) 전면부(좌) / 후면부(우) - 후면부에 붙어있는 작은 칩이 I2C 인터페이스

1) 16 x 2 글자가 표시되는 디스플레이 모듈

 

2) 전면부의 16개 단자와 마이크로컨트롤러간에 연결해서 사용

 - VSS, VDD : 전원부

 - V0, RS, RW, E : 제어신호부

 - D0, D1, D2, D3, D4, D5, D6, D7 : 데이터부

 - A, K : 밝기 조정

 

3) 핀이 너무 많이 사용되서 비효율적이라 후면부에 I2C 인터페이스 보드 추가 부착

※ I2C란? 2개의 신호선으로 송수신 하는 방식!

 - 장점 : 외부 결선 축소 / - 단점 : 비용 증가, 시리얼 통신으로 전송속도 저하

 

4) 아두이노 대부분의 LCD 모듈은 히타찌사의 HD44780 IC가 사용된다.

GD44780 IC 블록 다이어그램(좌) / LCD Diplay 초기화 과정(우)

※ HD44780 IC 및 초기화 관련 내용들은 추후 Atmega를 배우는 과정에서 상세히 다룰예정이라고 합니다.

Coming Soon!!😁

 

 


 

2.  아두이노 Text LCD 관련 함수 및 결선도

2-1. 결선도 및 PIN 별 기능

LCD Display 결선도(좌) / 실제 결선사진(우)

 1) RS PIN : Register Selection, 값에 따라 전송하는 형식이 달라진다.
- LOW : Instruction Register(명령어)를 전송한다.

- HIGH : Data Register(데이터)를 전송한다.

 

 2) RW PIN : 값에 따라 읽기, 쓰기 모드가 된다.

- LOW : Write(쓰기) 모드 → 기본값, 자주사용하는 모드

- HIGH : Read(읽기) 모드 

※ RW PIN의 경우 주로 Write모드를 사용하기 때문에 GND에 연결해서 사용한다.

 

 3) E : Start data read / write

 4) D0~D7 : 데이터를 전송하고 받는 핀, 4비트 모드에선 D4~D7만 사용하고 D0~D3은 사용하지 않는다. 

2-2. TEXT LCD 관련 함수 및 기본 코드 Sample

 1) 아두이노에서 LCD Display를 사용하기 위해선 다음과 같은 헤더파일을 선언해야 한다.

 #include <LiquicdCrystal.h>

 

 2) LiquidCrystal lcd() 함수 : 비트별 인터페이스에 따라 사용하는 핀이 달라지고 파라메타 값도 달라진다.

- 4 Bit 인터페이스 사용 PIN : RS, E, D4, D5, D6, D7

- 8 Bit 인터페이스 사용 PIN : RS, RW, E, D0, D1, D2, D3, D4, D5, D6, D7

 

 3) 자주 사용하는 lcd 관련 함수

- lcd.begin(X,Y) : Y(행)* X(열) 규격을 가지는 lcd를 초기화 한다. // Y가 열이고 X가 행을 나타낸다.(햇갈림주의)

- lcd.setCursor(X,Y) : 커서를 해당 위치 Y(행), X(열) 로 이동한다.

- lcd.write() : lcd에 글자를 출력한다. (아스키 값)

- lcd.print() : lcd에 숫자나 문자열을 출력한다.

- lcd.scrollDisplayLeft / lcd.scrollDisplayRight : LCD 화면 내용을 왼쪽이나 오른쪽으로 한칸 이동한다. 

※ 이밖에 표에 있는 모든 함수 앞에는 'lcd.'을 붙여서 사용해야 한다. 

 


 

3.  응용예제

1) 문제

2) 코드

Line 1 : LCD Display를 사용하기 위한 헤더파일

Line 2 : 예제 3을 표시하기 위한 배열

Line 3 : LCD Display를 사용하기 위한 함수(초기선언 개념)

Line 6 ~ 9 : 예제 1번 문제에 대한 코드

Line 10 ~ 11 : 예제 2번 문제에 대한 코드

Line 15 ~ 19 : 예제 3번 문제에 대한 코드

Line 20 ~ 27 : 예제 4번 문제에 대한 코드

Line 28 ~ 33 : 예제 5번 문제에 대한 코드

Line 34 ~ 41 : 예제 6번 문제에 대한 코드 


 

4.  TEXT LCD 모듈에 사용자 정의 문자 출력하기

- 16 x 2 글자가 표시되는 LCD 모듈에서 1글자는 5 x 8의 배열로 이루어져 있다.

- 즉, 5 x 8 배열을 생성해서 배열 안에 바이너리(2진) 값으로 출력하고자 하는 모양을 형상화해서 바이너리 값으로 출력하면 알파뱃이나 숫자가 아닌 한글 등 특수한 문자도 출력이 가능하다.

 

4-1. 한글 'ㅇ'을 Byte 행렬로 형상화한 코드

- 한글이나 특수한 모양을 본인이 직접 쉽게 커스텀하고 관련 바이너리 행렬을 쉽게 구할수 있는 사이트를 참고하면 더욱 쉽고 빠르게 사용자 정의 문자를 출력할 수 있습니다!!

아래 사이트를 참고하세요!😁

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

https://maxpromer.github.io/LCD-Character-Creator/

 

LCD Custom Character Generator

Clear      Invert Link

maxpromer.github.io


 

4-2. 한글 '안녕'을 형상화 해서 오른쪽으로 이동

 

 

 1) 사용 함수

- lcd.createrChar(x, y) : y[]의 데이터로 가지는 새로운 문자를 x번지에 특수 문자로 정의하여 저장한다.

※ y는 반드시 바이너리값으로 저장된 8x5행렬로 저장되어야 합니다.

- lcd.setCursor(x, y) : y * x 위치에 커서를 이동합니다.

(lcd.write 함수보다 앞에 와서 특수문자를 입력할 위치를 지정해줍니다.)

- lcd.write(x) : lcd.creater 함수로 저장한 특수문자를 번지주소로 불러서 출력합니다.

 

4-3. 2개의 스위치를 이용해서 서로 각기 다른 글자 출력하기(응용)

지난 시간에 배운 switch case 문과 LCD Display 출력을 결합해서 서로 각기 다른 문자를 출력해보았습니다.

 

댓글