068_1602LCD_병렬텍스트출력 📟💬
문자 디스플레이 제어의 첫걸음! 1602 캐릭터 LCD의 핀 구조와 병렬 구동 프로그래밍
LiquidCrystal내장 라이브러리를 활용하여 문자열 출력, 커서 위치 이동(setCursor), 가변저항 명암 튜닝을 실습합니다.

- 🖥️ 강의 슬라이드: slides.md
1. 1602 LCD 모듈의 핀 해부하기 🔍
1602 LCD 뒷면에는 전원, 제어선, 데이터선 등 총 16개의 접속 핀이 일렬로 배치되어 있습니다.
👧 도로시: “지니야! 1602 LCD 화면에 컴퓨터 모니터처럼 ‘Hello Dorothy’라는 글자를 예쁘게 찍어보고 싶어! 어떻게 명령해야 해?”
🐱 지니: “아두이노의 기본 내장 마법 도구인LiquidCrystal라이브러리를 쓰면 단 세 줄의 코드로 화면에 글씨를 타닥타닥 띄울 수 있어!”
🐶 토토: “멍멍! (화면에 글자가 뜨면 토토가 제일 먼저 읽을 거다 멍!)”

📌 16개 핀의 기능과 명칭
| 핀 번호 | 핀 기호 | 주요 기능 및 역할 |
|---|---|---|
| 1, 2 | VSS / VDD |
시스템 전원 공급 (GND / 5V) |
| 3 | V0 (VEE) |
LCD 명암(Contrast) 조절 단자 (가변저항 연결 필수) |
| 4 | RS (Register Select) |
레지스터 선택 (LOW: 명령어 레지스터, HIGH: 문자 데이터 레지스터) |
| 5 | R/W (Read/Write) |
읽기/쓰기 모드 (아두이노에서는 주로 쓰기 모드인 GND에 직결) |
| 6 | E (Enable) |
데이터 전송 동기화 트리거 신호 핀 |
| 7 ~ 14 | D0 ~ D7 |
8비트 데이터 버스 (4비트 모드 시 D4~D7 핀만 사용) |
| 15, 16 | A / K (LED+ / LED-) |
백라이트 LED 전원 (A: 5V, K: GND) |
2. 병렬 회로 연결: 가변저항과 함께! 🛠️
4비트 모드를 사용하면 아두이노의 디지털 핀 6개(RS, E, D4, D5, D6, D7)와 10k$\Omega$ 가변저항을 결선합니다.

📌 부품 연결 상세 가이드
- 전원 및 백라이트 배선:
VSS(1번) ➡️ 아두이노 GNDVDD(2번) ➡️ 아두이노 5VA(15번) ➡️ $220\Omega$ 저항 ➡️ 5VK(16번) ➡️ GND
- 명암 조절 (가변저항):
- $10\text{k}\Omega$ 가변저항의 양쪽 다리 ➡️ 각각 5V와 GND
- 가변저항의 가운데 다리(출력) ➡️ LCD
V0(3번 핀)
- 제어 및 데이터 신호선 (4비트 모드):
RS➡️ 디지털 12번 핀R/W➡️ GND (항상 쓰기 전용)E➡️ 디지털 11번 핀D4➡️ 디지털 5번 핀,D5➡️ 디지털 4번 핀D6➡️ 디지털 3번 핀,D7➡️ 디지털 2번 핀
3. 기본 내장 라이브러리: <LiquidCrystal.h> 📚
별도의 다운로드 없이 아두이노 IDE에 표준 내장되어 있는 공식 라이브러리를 호출합니다.

#include <LiquidCrystal.h>
// 연결한 핀 순서: LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
const int RS = 12, E = 11;
const int D4 = 5, D5 = 4, D6 = 3, D7 = 2;
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
void setup() {
// 가로 16칸, 세로 2줄 규격 선언
lcd.begin(16, 2);
}
[!NOTE]
lcd.begin(16, 2)를 호출하면 LCD 내부 컨트롤러에 초기화 명령어가 전송되면서 디스플레이가 켜지고 화면이 깨끗이 비워집니다.
4. 실습 ①: 첫 줄에 “hello, world!” 출력하기 🎉
lcd.print() 함수를 사용하여 1602 LCD 화면에 영문 문자열을 즉시 표시합니다.
#include <LiquidCrystal.h>
// RS, E, D4, D5, D6, D7 핀 번호 할당
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() {
lcd.begin(16, 2); // 16열 2행 LCD 화면 초기화
lcd.print("Hello!"); // LCD 화면에 "Hello!" 문자열 출력
}
void loop() {
}
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
// 첫 번째 줄 맨 처음(0, 0) 위치부터 문자열 출력
lcd.print("hello, world!");
}
void loop() {
// 문자가 계속 유지되도록 빈 루프 유지
}
👧 도로시: “우와! 시리얼 모니터 대신 내 책상 위 전용 초록 미니 모니터에 인사가 선명하게 떴어!”
5. 실습 ②: 2줄 모두 쓰기: lcd.setCursor(열, 행) 🎯
1602 LCD는 가로 16열(0~15), 세로 2행(0~1)으로 이루어진 2차원 좌표계를 사용합니다.

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(16, 2);
// 1번째 줄(행 0) 맨 처음 칸(열 0)으로 커서 이동
lcd.setCursor(0, 0);
lcd.print("Hello Dorothy!");
// 2번째 줄(행 1) 2번째 칸(열 2)으로 커서 이동
lcd.setCursor(2, 1);
lcd.print("Arduino & Jiny!");
}
void loop() {
}
[!TIP]
lcd.setCursor(col, row)의 인자 순서는(가로 열, 세로 행)순서입니다. 가로 0~15, 세로 0~1 범위를 벗어나지 않도록 주의합니다.
6. 글씨가 안 보이고 네모 상자만 뜬다면? 🔧
회로를 올바르게 연결했는데도 글자가 보이지 않을 때 취해야 할 긴급 트러블슈팅 가이드입니다.

📌 3단계 자가 진단 체크리스트
- 상황 1: 하얀색 사각형 네모 블록만 가득 차 있는 경우
- 원인: 명암 전압이 너무 높게 설정되어 액정 셀이 100% 닫혀 있는 상태입니다.
- 해결: $10\text{k}\Omega$ 가변저항의 파란색 손잡이를 일자 드라이버로 시계 또는 반시계 방향으로 천천히 돌려 전압을 낮춥니다.
- 상황 2: 화면이 텅 비어 아무것도 보이지 않는 경우
- 원인: 명암 전압이 0V에 가까워 글씨가 너무 옅게 렌더링된 상태입니다.
- 해결: 가변저항을 반대 방향으로 서서히 돌려 글씨 윤곽이 선명해지는 황금 각도를 찾습니다.
- 상황 3: 백라이트가 아예 켜지지 않는 경우
- 해결: 15번(
A)과 16번(K) 핀의 5V/GND 배선 및 전류 제한 저항 결선을 점검합니다.
- 해결: 15번(
🌟 도로시와 지니의 이번 시간 핵심 정리! 🏆
축하합니다! 1602 캐릭터 LCD의 병렬 제어와 텍스트 출력 프로그래밍을 완벽히 마스터했습니다.

📋 핵심 요약 체크리스트
- 16핀 병렬 인터페이스: RS, E, D4~D7 신호선으로 4비트 데이터 통신을 수행했습니다.
LiquidCrystal라이브러리:lcd.begin(16, 2),lcd.print(),lcd.setCursor()함수로 자유로운 화면 제어를 달성했습니다.V0명암 제어: $10\text{k}\Omega$ 가변저항으로 최적의 폰트 콘트라스트를 맞췄습니다.
👧 도로시: “그런데 지니야, 선을 6가닥이나 꽂으려니까 빵판이 너무 복잡해! 선을 획기적으로 줄일 순 없을까?”
🐱 지니: “후후, 도로시! 다음 시간에 배울 ‘I2C 통신 모듈(PCF8574)’을 달면 단 2가닥의 신호선으로 모든 글자를 전송할 수 있단다!”