코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
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
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!