이 Arduino LCD 튜토리얼에서는
LCD(Liquid Crystal Display)를 Arduino 보드에 연결하는 방법을 배웁니다.
LCD는 정보 표시를 위한 전자 프로젝트에서 매우 대중적이고 널리 사용됩니다.
LCD에는 많은 종류가 있습니다.
이 자습서에서는 LCD 16x2(16열 및 2행)를 예로 사용합니다.
다른 LCD도 비슷합니다.
※ 참고:
배선을 단순화하고 싶다면 LCD I2C를 대신 사용할 수 있습니다. 참조 LCD I2C 자습서
필요한 하드웨어
Arduino UNO 또는 Genuino UNO |
USB 2.0 케이블 유형 A/B |
LCD |
전위차계 |
브레드보드 |
점퍼 와이어 |
LCD 16x2 정보
핀아웃
LCD에는 최대 16개의 핀이 있습니다. 가장 일반적인 용도에서는 모든 핀을 사용하지 않습니다.
LiquidCrystal 라이브러리 의 지원 으로 이러한 핀의 의미를 알지 못해도 LCD를 사용할 수 있습니다.
그러나 궁금하거나 심층적으로 알고 싶다면 다음 핀과 해당 기능을 살펴보겠습니다.
- GND 핀 은 GND (0V)에 연결해야 합니다 .
- VCC 핀 LCD용 전원 공급 장치는 VCC (5V)에 연결해야 합니다 .
- Vo(LCD Contrast) 핀 은 LCD 의 대비 및 밝기를 제어하고
5V(최고 대비 및 밝기)에 연결하거나 전위차계에 연결(대비 및 밝기 조정) - RS(Register Select) 핀 LCD에 보내야 하는 데이터에는
명령(LCD 제어용)과 데이터의 두 가지 종류가 있습니다.
이 두 가지는 동일한 데이터 버스에서 전송됩니다.
RS 핀은 데이터 버스의 데이터가 명령인지 데이터인지 LCD에 알려줍니다. - R/W(Read/Write) 핀 은 READ 모드 또는 WRITE 모드를 선택하는 핀 입니다.
- EN(활성화) 핀 은 LCD를 활성화하는 데 사용됩니다.
HIGH 는 LCD를 활성화하고 LOW 는 LCD를 비활성화합니다. - D0-D7(데이터 버스) 핀 은 Arduino와 LCD 간에 데이터와 명령을 전달합니다.
데이터 전송에는 4비트 모드와 8비트 모드의 두 가지 모드가 있습니다. - AK(Anode & Cathode) 핀 은 LCD 백라이트에 전원을 공급하는 데 사용됩니다.
VCC에 핀을 연결해야 합니다 . K 핀은 GND에 연결해야 합니다 .
4비트 모드 및 8비트 모드
- 8비트 모드 : 8비트의 바이트가 핀 D0~D7에서 동시에 전송됩니다.
- 4비트 모드 : 8비트의 바이트가 두 번 전송되며 매번 핀 D4에서 D7까지 4비트가 전송됩니다.
8비트 모드는 4비트 모드보다 빠르지만 4비트 모드보다 더 많은 핀을 사용합니다.
모드 선택은 초기화 과정에서 LCD에 명령을 전송하여 수행됩니다.
이 튜토리얼에서는 가장 일반적으로 사용되는 4비트 모드를 사용합니다.
이 모드에서 LCD의 핀:
- 6개의 핀(RS, EN, D4, D5, D6, D7)이 Arduino의 핀에 연결됩니다.
- 4개의 핀(D0, D1, D2, D3)이 연결되어 있지 않습니다.
- 나머지 6개의 핀은 GND / VCC 또는 전위차계에 연결됩니다 .
4비트 모드의 LCD 핀 테이블
LCD PIN | CONNECTED TO | |
01 | GND | GND |
02 | VCC | 5V |
03 | V0 | 5V 또는 potentiometer의 핀 |
04 | RS | Arduino의 핀 |
05 | R/W | GND |
06 | EN | Arduino의 핀 |
07 | D0 | 연결되지 않은 |
08 | D1 | 연결되지 않은 |
09 | D2 | 연결되지 않은 |
10 | D3 | 연결되지 않은 |
11 | D4 | Arduino의 핀 |
12 | D5 | Arduino의 핀 |
13 | D6 | Arduino의 핀 |
14 | D7 | Arduino의 핀 |
15 | A | 5V |
16 | K | GND |
LCD 좌표
LCD 16x2는 16열과 2행을 포함합니다. 열과 행은 0부터 인덱싱됩니다.
작동 원리
이 섹션은 심층 지식입니다. 이해하지 못하더라도 걱정하지 마십시오.
과부하가 걸리면 이 섹션을 무시하고 다른 날에 다시 오십시오. 다음 섹션을 계속 읽으십시오.
(표시할) 데이터를 LCD로 보내는 과정:
- Arduino는 RS 핀을 HIGH로 설정합니다 (데이터 레지스터 선택)
- Arduino는 D4 → D7 핀(데이터 버스)에 데이터를 씁니다.
- LCD는 데이터 버스에서 데이터를 수신합니다.
- RS 핀이 HIGH 이므로 LCD는 수신된 데이터를 데이터 저항에 저장합니다 .
그런 다음 LCD는 화면에 데이터를 표시합니다.
LCD에 명령(제어)을 보내는 프로세스(예: LCD 깜박임, 커서를 특정 위치로 설정, 디스플레이 지우기 ...):
- Arduino는 RS 핀을 LOW로 설정합니다 (명령 레지스터 선택).
- Arduino는 D4 → D7 핀(데이터 버스)에 명령을 씁니다.
- LCD는 데이터 버스에서 데이터를 수신합니다.
- RS 핀이 LOW 이기 때문에 LCD는 수신된 데이터를 명령 저항에 저장합니다 .
그러면 LCD는 명령 값에 따라 조치를 취합니다.
아두이노 - LCD
LCD를 제어하는 것은 상당히 복잡한 작업입니다.
다행히 LiquidCrystal 라이브러리 덕분에 이 라이브러리는 LCD 제어 프로세스를 단순화하므로
낮은 수준의 지침을 알 필요가 없습니다.
Arduino를 LCD에 연결하고 라이브러리의 기능을 사용하기만 하면 됩니다.
LCD를 사용하는 것은 케이크 조각입니다.
배선도
LCD 프로그래밍 방법
- 라이브러리 포함:
#include <LiquidCrystal.h>
- 6개의 LCD 핀에 연결된 Arduino의 핀 정의: RS, EN, D4, D4, D6, D7
const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;
라이브러리의 장점 중 하나는 LCD에 연결된 Arduino의 핀이 설정 가능하다는 것입니다.
이것은 Arduino를 LCD 및 기타 센서/액추에이터와 연결할 때 유연하게 만듭니다.
- LiquidCrystal 개체 선언:
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
- LCD의 열과 행 수를 설정합니다.
lcd.begin(16, 2);
- 커서를 원하는 위치로 이동(column_index, row_index)
lcd.setCursor(column_index, row_index);
- LCD에 메시지를 인쇄합니다.
lcd.print("Hello World!");
LCD로 할 수 있는 일이 더 많이 있습니다(LCD 부분으로 더 많은 작업 참조)
※ 참고:
Arduino 코드에서 연결된 핀을 지정하기만 하면 LCD에 연결할 Arduino의 6개 핀을 선택할 수 있습니다.
아두이노 코드
#include <LiquidCrystal.h>
// LCD pins <--> Arduino pins
const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
void setup()
{
lcd.begin(16, 2); // set up number of columns and rows
lcd.setCursor(0, 0); // move cursor to (0, 0)
lcd.print("Arduino"); // print message at (0, 0)
lcd.setCursor(2, 1); // move cursor to (2, 1)
lcd.print("GetStarted.com"); // print message at (2, 1)
}
void loop()
{
}
빠른 단계
- 위의 코드를 복사하여 Arduino IDE로 엽니다.
- 클릭 업로드 아두 이노 코드를 업로드 아두 이노 IDE 버튼을
- LCD에서 결과 보기
- 텍스트와 위치를 수정해 보세요.
커스텀 캐릭터
lcd.print () 함수는 ASCII 문자만 지원합니다.
특수 문자나 기호(예: 하트, 앵그리버드)를 표시하려면 아래의 문자 생성기를 사용해야 합니다.
LCD 16x2는 32자(2행 16열)를 표시할 수 있습니다. 각 문자는 40픽셀(8행 5열)로 구성됩니다.
문자 생성기는 문자(40픽셀)를 나타냅니다. 다음 단계만 수행하면 됩니다.
1. 각 픽셀을 클릭하여 선택/선택 해제
2. 사용자 정의 문자 코드 아래처럼 복사
byte customChar[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
3. 아래 코드에서 customChar[8] 을 교체합니다.
#include <LiquidCrystal.h>
// LCD pins <--> Arduino pins
const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
byte customChar[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
void setup()
{
lcd.begin(16, 2); // set up number of columns and rows
lcd.createChar(0, customChar); // create a new custom character
lcd.setCursor(2, 0); // move cursor to (2, 0)
lcd.write((byte)0); // print the custom char at (2, 0)
}
void loop()
{
}
LCD의 결과:
여러 사용자 정의 문자
최대 8개의 사용자 지정 문자를 만들 수 있습니다(색인 0에서 7까지).
아래 예에서는 3개의 문자를 생성하여 표시합니다.
#include <LiquidCrystal.h>
// LCD pins <--> Arduino pins
const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
byte customChar0[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
byte customChar1[8] = {
0b00100,
0b01110,
0b11111,
0b00100,
0b00100,
0b00100,
0b00100,
0b00100
};
byte customChar2[8] = {
0b00100,
0b00100,
0b00100,
0b00100,
0b00100,
0b11111,
0b01110,
0b00100
};
void setup()
{
lcd.begin(16, 2); // set up number of columns and rows
lcd.createChar(0, customChar0); // create a new custom character (index 0)
lcd.createChar(1, customChar1); // create a new custom character (index 1)
lcd.createChar(2, customChar2); // create a new custom character (index 2)
lcd.setCursor(2, 0); // move cursor to (2, 0)
lcd.write((byte)0); // print the custom char 0 at (2, 0)
lcd.setCursor(4, 0); // move cursor to (4, 0)
lcd.write((byte)1); // print the custom char 1 at (4, 0)
lcd.setCursor(6, 0); // move cursor to (6, 0)
lcd.write((byte)2); // print the custom char 2 at (6, 0)
}
void loop()
{
}
LCD의 결과:
요약: LCD에서 사용자 정의 문자를 사용하는 방법
- 위의 문자 생성기를 사용하여 사용자 지정 문자에 대한 이진 코드를 만듭니다.
- 사용자 정의 문자에 대한 이진 코드 선언(위 단계에서 복사)
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
- 사용자 지정 문자를 만들고 setup() 함수에서 인덱스 값(0에서 7까지)에 할당
lcd.createChar(index, customChar);
- 언제 어디서나(setup() 또는 loop() 함수에서) LCD에 사용자 정의 문자를 인쇄합니다.
lcd.setCursor(column, row); // move cursor to a desired position lcd.write((byte)index); // print the custom char at the desired position
대체 LCD
위의 코드는 다음 LCD에서도 작동합니다.
LCD 라이브러리 기능 참조
- LiquidCrystal()
- lcd.begin()
- lcd.clear()
- lcd.home()
- lcd.setCursor()
- lcd.write()
- lcd.print()
- lcd.cursor()
- lcd.noCursor()
- lcd.blink()
- lcd.noBlink()
- lcd.display()
- lcd.noDisplay()
- lcd.scrollDisplayLeft()
- lcd.scrollDisplayRight()
- lcd.autoscroll()
- lcd.noAutoscroll()
- lcd.leftToRight()
- lcd.rightToLeft()
- lcd.createChar()
[참조 번역인용] https://arduinogetstarted.com/tutorials/arduino-lcd