중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

한글 LCD(SE-KLCD-A)

2014-09-29 16:35:18

개요 및 부품 목록


아두이노에 연결이 가능한 LCD에는 다양한 종류가 있습니다. 그러나 대부분이 한글을 지원하지 않아, 우리가 봤을 때 바로 알아보기 힘든 점이 있습니다.

이번에 사용할 LCD는 128X64 그래픽 LCD를 사용한 한글 디스플레이 입니다. 특히 아두이노와 연결이 간단하고, 각 글자에 맞는 코드들을 다 지원해줘서 사용하기 편합니다.

이를 이용해서 나만의 한글로된 시계나, 공지사항, 광고, 금전등록기 등 다양하게 사용하실 수 있습니다.

사진 출처 : 하하포스

이 컨텐츠에서는 이 LCD의 사용방법에 대해 알아보겠습니다.

 

미리 보기 동영상

 

 

부품 목록

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

 

 

부품명 오렌지 보드 한글 LCD 점퍼케이블
파트  

 

 

하드웨어 Making 및 소프트웨어 Coding

회로도

 

브레드보드 레이아웃

 

 

 

 

연결 방법

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

 

 

 

 

 

소프트웨어 Coding

 

 

/********************************************************
 * 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), 아두이노, 오렌지보드