2014-09-29 16:35:18
아두이노에 연결이 가능한 LCD에는 다양한 종류가 있습니다. 그러나 대부분이 한글을 지원하지 않아, 우리가 봤을 때 바로 알아보기 힘든 점이 있습니다.
이번에 사용할 LCD는 128X64 그래픽 LCD를 사용한 한글 디스플레이 입니다. 특히 아두이노와 연결이 간단하고, 각 글자에 맞는 코드들을 다 지원해줘서 사용하기 편합니다.
이를 이용해서 나만의 한글로된 시계나, 공지사항, 광고, 금전등록기 등 다양하게 사용하실 수 있습니다.

사진 출처 : 하하포스
이 컨텐츠에서는 이 LCD의 사용방법에 대해 알아보겠습니다.


| NO | 부품명 | 수량 | 상세설명 |
| 1 | 오렌지 보드 | 1 | 아두이노 |
| 2 | 한글 LCD(SE-KLCD-A) | 1 | LCD |
| 3 | 점퍼케이블 | 3 | 점퍼케이블 |
| 부품명 | 오렌지 보드 | 한글 LCD | 점퍼케이블 |
| 파트 | ![]() |
![]() |
![]() |


맨 왼쪽 핀부터 GND, 5V, RX입니다. GND, 5V는 아두이노 보드의 GND, 5V에 연결해 주시고 RX선은 D1번 핀(TX)에 연결해 주시면 됩니다.
(아두이노에 업로드시 D1번핀에 연결된 선을 빼주시고 업로드 하셔야 합니다. 업로드가 완료 된 후 D1번핀에 선을 연결해 주세요.)

/********************************************************
* KOREAN LCD *
* *
* created 16 NOV 2013 *
* by VariCAP *
* HTTP://WWW.ROBOT.CO.KR *
* *
* This example code is in the public domain. *
* http://cafe.naver.com/arduinoshield/43 *
********************************************************/
//#define KLCD_NUL 0x00
#define KLCD_HOME 0x01
#define KLCD_CLSTART 0x02 // 커서 줄 처음으로 이동
#define KLCD_CRIGHT 0x03 // 커서 오른쪽 이동
#define KLCD_CLEFT 0x04 // 커서 왼쪽 이동
#define KLCD_CUP 0x05 // 커서 위로 이동
#define KLCD_CDOWN 0x06 // 커서 밑으로 이동
//#define KLCD_BELL 0x07
#define KLCD_NORMAL 0x08 // 일반 화면 흰색 바탕 + 검은색 글씨
#define KLCD_REVERSE 0x09 // 화면 색반전 검은색 바탕 + 흰색 글씨
//#define KLCD_LINEFEED 0x0A
#define KLCD_CLEAR 0x0B // 화면 초기화 및 커서 위치 초기화
//#define KLCD_ASCII_0C 0x0C
#define KLCD_ENTER 0x0D // 엔터
#define KLCD_LOCATE 0x0E
//#define KLCD_ASCII_0F 0x0F
// 각 명령어에 따른 코드 선언
void klcd(unsigned int v) {
// 1 바이트의 영문자/숫자/제어코드 또는 2 바이트로 구성되는 한글코드(KS5601-1987)를
// LCD화면에 출력합니다.
unsigned char d;
if (v > 0xFF) { d = (v>>8) & 0xFF; Serial.write(d); }
d = v & 0xFF; Serial.write(d);
}
void klcd_locate(unsigned char r, unsigned char c) {
// 커서 위치를 설정합니다. 행(r)과 열(c)을 지정합니다 행은 0-3 범위이고 열은 0-15 범위의 숫자입니다.
unsigned char t;
Serial.write(KLCD_LOCATE);
t = ((r<<5) | (c & 0x1F));
Serial.write(t);
}
void setup() {
Serial.begin(9600); // 시리얼 포트 초기화(9600)
delay(300);
klcd(KLCD_CLEAR); // LCD화면 초기화
delay(300);
klcd(KLCD_CLEAR); // LCD화면 초기화
klcd(KLCD_NORMAL); // 일반 화면(흰색 바탕 + 검은색 글씨)
}
void loop() {
//--------------- Page 1 ------------------------
// KocoaFab 소개
klcd(KLCD_CLEAR);
klcd(KLCD_NORMAL);
klcd(0xB8DE);
klcd(0xC0CC);
klcd(0xC4BF);
klcd(0xC0C7);
Serial.println();
// '메이커의'
klcd(0xB9AE);
klcd(0xC8AD);
klcd(0xB9DF);
klcd(0xC0FC);
klcd(0xBCD2);
Serial.println();
// '문화발전소'
klcd(0xC4DA);
klcd(0xC4DA);
klcd(0xBEC6);
klcd(0xC6D5);
Serial.println();
// '코코아팹'
String temp = "kocoaFab.cc";
Serial.print(temp);
// 'kocoaFab.cc' 영문은 Serial.print() 로 LCD에 출력 가능
delay(3000);
//--------------- Page 2 ------------------------
// KocoaFab 소개(색반전)
klcd(KLCD_CLEAR);
klcd(KLCD_NORMAL);
klcd(KLCD_REVERSE); // 배경 검은색 + 글자 흰색 으로 전환(색반전)
klcd(0xB8DE);
klcd(0xC0CC);
klcd(0xC4BF);
klcd(0xC0C7);
Serial.println();
// '메이커의'
klcd(0xB9AE);
klcd(0xC8AD);
klcd(0xB9DF);
klcd(0xC0FC);
klcd(0xBCD2);
Serial.println();
// '문화발전소'
klcd(0xC4DA);
klcd(0xC4DA);
klcd(0xBEC6);
klcd(0xC6D5);
Serial.println();
// '코코아팹'
String temp1 = "kocoaFab.cc";
Serial.print(temp1);
// 'kocoaFab.cc'
delay(3000);
//--------------- Page 3 ------------------------
// 쉽고, 뜯고, 맛보고, 증기자!!!(글자 출력 순서와 위치를 바꿔서 출력)
klcd(KLCD_CLEAR);
klcd(KLCD_NORMAL);
klcd(0xBEC3);
klcd(0xB0ED);
Serial.println(',');
delay(300);
// '씹고,'
klcd_locate(2, 3);
klcd(0xB8C0);
klcd(0xBAB8);
klcd(0xB0ED);
Serial.print(',');
delay(1000);
// '뜯고,'
klcd_locate(1, 9);
klcd(0xB6E2);
klcd(0xB0ED);
Serial.print(',');
delay(500);
// '맛보고,'
klcd_locate(3, 6);
klcd(0xB8B8);
klcd(0xB5E9);
klcd(0xC0DA);
Serial.print("!!!");
// '만들자!!!'
delay(3000);
//--------------- Page 4 ------------------------
// 쉽고, 뜯고, 맛보고, 만들자! 세로로 출력하기(중간에 색반전)
klcd(KLCD_CLEAR);
klcd(KLCD_NORMAL);
klcd(0xBEC3);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(0xB0ED);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(',');
delay(600);
// '쉽고,'
klcd_locate(0, 3);
klcd(0xB6E2);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(0xB0ED);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(',');
delay(1200);
// '뜯고,'
klcd_locate(0, 8);
klcd(KLCD_REVERSE);
klcd(0xB8C0);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(0xBAB8);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(0xB0ED);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
Serial.print(',');
delay(400);
// 색반전후 '맛보고,'
klcd_locate(0, 12);
klcd(0xB8B8);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(0xB5E9);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
klcd(0xC0DA);
klcd(KLCD_CDOWN);
klcd(KLCD_CLEFT);
klcd(KLCD_CLEFT);
Serial.print('!');
// '만들자!'
delay(3000);
}
// 출처 : 아두이노 플러스 : 아두이노 한글 LCD
이 LCD는 4X16의 크기를 가지고 있습니다.
한글 각 글자에 맞는 코드는 http://cafe.naver.com/arduinoshield/43 에 들어 가시면 예제 소스와 함께 각 글자에 따른 코드를 확인 할 수 있습니다.
//#define KLCD_NUL 0x00 #define KLCD_HOME 0x01 #define KLCD_CLSTART 0x02 // 커서 줄 처음으로 이동 #define KLCD_CRIGHT 0x03 // 커서 오른쪽 이동 #define KLCD_CLEFT 0x04 // 커서 왼쪽 이동 #define KLCD_CUP 0x05 // 커서 위로 이동 #define KLCD_CDOWN 0x06 // 커서 밑으로 이동 //#define KLCD_BELL 0x07 #define KLCD_NORMAL 0x08 // 일반 화면 흰색 바탕 + 검은색 글씨 #define KLCD_REVERSE 0x09 // 화면 색반전 검은색 바탕 + 흰색 글씨 //#define KLCD_LINEFEED 0x0A #define KLCD_CLEAR 0x0B // 화면 초기화 및 커서 위치 초기화 //#define KLCD_ASCII_0C 0x0C #define KLCD_ENTER 0x0D // 엔터 #define KLCD_LOCATE 0x0E //#define KLCD_ASCII_0F 0x0F // 각 명령어에 따른 코드 선언
커서를 이동하는 명령어 입니다. 자신이 원하는 위치에 글자를 출력 하고 싶으시면 위에 명령어를 이용해서 커서를 이동한 후 글자를 출력하시면 됩니다.
(이 LCD는 16x4의 크기를 가지고 있으므로 커서 이동하실 경우 가로 0~15, 세로 0~3 범위 내에서 움직일 수 있도록 하셔야 합니다.)
void klcd(unsigned int v) {
// 1 바이트의 영문자/숫자/제어코드 또는 2 바이트로 구성되는 한글코드(KS5601-1987)를
// LCD화면에 출력합니다.
unsigned char d;
if (v > 0xFF) { d = (v>>8) & 0xFF; Serial.write(d); }
d = v & 0xFF; Serial.write(d);
}
void klcd_locate(unsigned char r, unsigned char c) {
// 커서 위치를 설정합니다. 행(r)과 열(c)을 지정합니다 행은 0-3 범위이고 열은 0-15 범위의 숫자입니다.
unsigned char t;
Serial.write(KLCD_LOCATE);
t = ((r<<5) | (c & 0x1F));
Serial.write(t);
}
klcd() 함수는 LCD화면에 글자를 출력하거나 커서 이동 명령어를 수행 하는 함수입니다. 입력 받은 문자를 바이트 크기를 비교하여 2바이트 이상일 시(한글) LCD출력에 맞게 수정해서 Serial.write로 출력 합니다.
klcd_locate는 세로, 가로 값을 입력 받아 그 값에 맞는 위치로 커서를 이동 합니다.
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!
한글 LCD(SE-KLCD-A), 아두이노, 오렌지보드