본문 바로가기

프로젝트/TFT LCD 한글 출력 (아두이노)

Hangul_Direct.h ( 필요한 폰트만 코드에 삽입 )

아두이노 한글 폰트 Code 자동생성 프로그램 ver 2.0 으로 폰트를 만들어                           아두이노 소스코드에 삽입한 후 한글을 출력하는 한글 Class

sd카드와 별도의 폰트파일이 필요 없다. 필요에 따라 16x16 폰트 에디터로 만든                                  사용자 문자도 사용 가능 하다.

아두이노 코드에서 사용 하는 예                                                                                               사용 보드는 아두이노 mega ( Uno는 20~30자가 메모리 한계임)

코드 내부의 글자도 메모리를 잡아 먹는다. 그래서 F연산자로 플래쉬메모리(코드저장부분)  저장 하지만그래도 한계가 있다. Uno의 경우는 더 심하다. 코드내에 글자수가 많아 지면 담을 수 있는 폰트도 많이 줄어 버린다.이경우를 해결하기 위하여 코드안의 문장을 파일로 저장하고 출력 직전에 불러 오는 방식을 사용 하려고 한다.문제는 문장을 쓰는 SD.prinln()은 있지만 문장을 읽어 오는 함수가 없어 엄청 불편 해 진다.그래서 아래 코드에 주석 처리된 String readLine(    File  inf  ) 함수를 만들었다.

  Hangul_Direct.ino
  // --- 폰트 만들기 2.0 으로 만든 코드입니다.  -----

struct Font  // 폰트구조체

     String         s;     //  폰트글자 
     unsigned short f[16]; //  폰트 
}; 

Font font[]={ 
"우", {0x0000, 0x03E0, 0x0C18, 0x1004, 0x1004, 0x0C18, 0x03E0, 0x0000, 0x3FFE, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000  } ,
"연", {0x0000, 0x0E08, 0x1178, 0x2088, 0x2088, 0x2088, 0x1178, 0x0E08, 0x0008, 0x0008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"히", {0x0000, 0x1F08, 0x0008, 0x0008, 0x7FC8, 0x0008, 0x0E08, 0x1108, 0x2088, 0x2088, 0x2088, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000  } ,
"날", {0x0000, 0x2008, 0x2008, 0x2008, 0x200E, 0x2008, 0x2068, 0x1F88, 0x0000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"찾", {0x0000, 0x1F08, 0x0008, 0x7FC8, 0x040E, 0x0408, 0x0A08, 0x1108, 0x60C8, 0x0000, 0x1FF8, 0x0080, 0x0140, 0x0630, 0x180C, 0x0000  } ,
"아", {0x0000, 0x0008, 0x0E08, 0x1108, 0x1108, 0x2088, 0x208E, 0x2088, 0x2088, 0x2088, 0x1108, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000  } ,
"와", {0x0000, 0x0008, 0x0E08, 0x1108, 0x2088, 0x2088, 0x2088, 0x110E, 0x0E08, 0x0408, 0x0408, 0x0408, 0x7FE8, 0x0008, 0x0008, 0x0000  } ,
"사", {0x0000, 0x0008, 0x0408, 0x0408, 0x0408, 0x0408, 0x040E, 0x0A08, 0x0A08, 0x1108, 0x1108, 0x2088, 0x4048, 0x0008, 0x0008, 0x0000  } ,
"랑", {0x0000, 0x3F88, 0x0048, 0x0048, 0x1F8E, 0x2008, 0x2038, 0x1FC8, 0x0008, 0x03C0, 0x0C30, 0x1008, 0x1008, 0x0C30, 0x03C0, 0x0000  } ,
"만", {0x0000, 0x3F88, 0x2088, 0x2088, 0x2088, 0x208E, 0x2088, 0x2088, 0x3F88, 0x0008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"남", {0x0000, 0x2008, 0x2008, 0x2008, 0x200E, 0x2008, 0x2068, 0x1F88, 0x0008, 0x0000, 0x1FF8, 0x1008, 0x1008, 0x1008, 0x0FF0, 0x0000  } ,
"기", {0x0000, 0x0008, 0x3F08, 0x0088, 0x0088, 0x0088, 0x0088, 0x0088, 0x0108, 0x0108, 0x0208, 0x0C08, 0x7008, 0x0008, 0x0008, 0x0000  } ,
"고", {0x0000, 0x0000, 0x1FF8, 0x0004, 0x0004, 0x0004, 0x0004, 0x0104, 0x0104, 0x0108, 0x0108, 0x0108, 0x0100, 0x3FFE, 0x0000, 0x0000  } ,
"간", {0x0000, 0x3F08, 0x0088, 0x0088, 0x0088, 0x008E, 0x0108, 0x0208, 0x0C08, 0x7008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"너", {0x0000, 0x0008, 0x2008, 0x2008, 0x2008, 0x20F8, 0x2008, 0x2008, 0x2008, 0x2008, 0x2068, 0x1F88, 0x0008, 0x0008, 0x0008, 0x0000  } ,
"하", {0x0000, 0x1F08, 0x0008, 0x0008, 0x7FC8, 0x0008, 0x0E0E, 0x1108, 0x2088, 0x2088, 0x2088, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000  } ,
"루", {0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x1000, 0x0FFC, 0x0000, 0x3FFE, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000  } ,
"가", {0x0000, 0x0008, 0x3F08, 0x0088, 0x0088, 0x0088, 0x008E, 0x0088, 0x0108, 0x0108, 0x0208, 0x0C08, 0x7008, 0x0008, 0x0008, 0x0000  } ,
"지", {0x0000, 0x0008, 0x3FC8, 0x0408, 0x0408, 0x0408, 0x0408, 0x0A08, 0x0908, 0x1088, 0x1088, 0x2048, 0x4048, 0x0008, 0x0008, 0x0000  } ,
"나", {0x0000, 0x0008, 0x2008, 0x2008, 0x2008, 0x2008, 0x200E, 0x2008, 0x2008, 0x2008, 0x2068, 0x1F88, 0x0008, 0x0008, 0x0008, 0x0000  } ,
"몇", {0x0000, 0x3F88, 0x20F8, 0x2088, 0x2088, 0x20F8, 0x2088, 0x3F88, 0x0008, 0x07E0, 0x0000, 0x1FF8, 0x0180, 0x0660, 0x381C, 0x0000  } ,
"해", {0x0000, 0x1E24, 0x0024, 0x0024, 0x7FA4, 0x0024, 0x0C24, 0x123C, 0x2124, 0x2124, 0x2124, 0x1224, 0x0C24, 0x0024, 0x0024, 0x0000  } ,
"흘", {0x0000, 0x03E0, 0x0000, 0x3FFE, 0x0410, 0x0808, 0x07F0, 0x0000, 0x3FFE, 0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x0FFC, 0x0000  } ,
"러", {0x0000, 0x0008, 0x3E08, 0x0108, 0x0108, 0x0108, 0x0108, 0x1E78, 0x2008, 0x2008, 0x2008, 0x2008, 0x1FC8, 0x0008, 0x0008, 0x0000  } ,
"도", {0x0000, 0x0000, 0x0FFC, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0080, 0x0080, 0x0080, 0x0080, 0x3FFE, 0x0000, 0x0000  } ,
"무", {0x0000, 0x1FFC, 0x1004, 0x1004, 0x1004, 0x1FFC, 0x0000, 0x0000, 0x3FFE, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000  } ,
"소", {0x0000, 0x0000, 0x0080, 0x0080, 0x0080, 0x0140, 0x0220, 0x0C18, 0x3006, 0x0080, 0x0080, 0x0080, 0x0080, 0x3FFE, 0x0000, 0x0000  } ,
"식", {0x0000, 0x0408, 0x0408, 0x0C08, 0x0A08, 0x1108, 0x2088, 0x4048, 0x0008, 0x0000, 0x1FF0, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000  } ,
"없", {0x0000, 0x0E08, 0x1108, 0x2088, 0x20F8, 0x2088, 0x1108, 0x0E08, 0x0000, 0x2110, 0x2110, 0x3F10, 0x2110, 0x2128, 0x1EC6, 0x0000  } ,
"는", {0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000, 0x0000, 0x3FFE, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"데", {0x0000, 0x0024, 0x1F24, 0x2024, 0x2024, 0x2024, 0x21E4, 0x2024, 0x2024, 0x2024, 0x2024, 0x2024, 0x1FA4, 0x0024, 0x0024, 0x0000  } ,
"세", {0x0000, 0x0824, 0x0824, 0x0824, 0x0824, 0x1424, 0x15E4, 0x1424, 0x2224, 0x2224, 0x4124, 0x4124, 0x0024, 0x0024, 0x0024, 0x0000  } ,
"월", {0x0000, 0x0F88, 0x1048, 0x1048, 0x0F88, 0x0008, 0x3FE8, 0x0208, 0x0278, 0x0208, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x0FF8, 0x0000  } ,
"에", {0x0000, 0x0024, 0x0C24, 0x1224, 0x1224, 0x2124, 0x21E4, 0x2124, 0x2124, 0x2124, 0x1224, 0x1224, 0x0C24, 0x0024, 0x0024, 0x0000  } ,
"변", {0x0000, 0x2088, 0x20F8, 0x2088, 0x3F88, 0x2088, 0x20F8, 0x2088, 0x1F08, 0x0008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"버", {0x0000, 0x0008, 0x2088, 0x2088, 0x2088, 0x2088, 0x3FF8, 0x2088, 0x2088, 0x2088, 0x2088, 0x2088, 0x1F08, 0x0008, 0x0008, 0x0000  } ,
"린", {0x0000, 0x3F88, 0x0048, 0x0048, 0x1F88, 0x2008, 0x2008, 0x2038, 0x1FC8, 0x0008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"보", {0x0000, 0x0000, 0x1004, 0x1004, 0x1FFC, 0x1004, 0x1004, 0x1004, 0x0FF8, 0x0080, 0x0080, 0x0080, 0x0080, 0x3FFE, 0x0000, 0x0000  } ,
"며", {0x0000, 0x0008, 0x3F88, 0x2088, 0x20F8, 0x2088, 0x2088, 0x2088, 0x2088, 0x20F8, 0x2088, 0x2088, 0x3F88, 0x0008, 0x0008, 0x0000  } ,
"실", {0x0000, 0x0408, 0x0408, 0x0A08, 0x0908, 0x1108, 0x2088, 0x4088, 0x0000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"망", {0x0000, 0x3F88, 0x2088, 0x2088, 0x208E, 0x2088, 0x2088, 0x3F88, 0x0008, 0x03C0, 0x0C30, 0x1008, 0x1008, 0x0C30, 0x03C0, 0x0000  } ,
"할", {0x0000, 0x1F08, 0x0008, 0x7FC8, 0x000E, 0x1F08, 0x2088, 0x2088, 0x1F08, 0x0000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x0FF8, 0x0000  } ,
"까", {0x0000, 0x0008, 0x3B88, 0x0448, 0x0448, 0x0448, 0x044E, 0x0848, 0x0888, 0x1088, 0x2108, 0x4208, 0x0408, 0x0008, 0x0008, 0x0000  } ,
"봐", {0x0000, 0x0008, 0x2048, 0x2048, 0x3FC8, 0x2048, 0x2048, 0x204E, 0x1F88, 0x0408, 0x0408, 0x0408, 0x7FE8, 0x0008, 0x0008, 0x0000  } ,
"오", {0x0000, 0x0000, 0x03E0, 0x0C18, 0x1004, 0x1004, 0x1004, 0x0C18, 0x03E0, 0x0080, 0x0080, 0x0080, 0x0080, 0x3FFE, 0x0000, 0x0000  } ,
"늘", {0x0000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000, 0x3FFE, 0x0000, 0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"설", {0x0000, 0x0408, 0x0408, 0x0C08, 0x0A78, 0x1108, 0x2088, 0x4048, 0x0000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"레", {0x0000, 0x0024, 0x3C24, 0x0224, 0x0224, 0x0224, 0x0224, 0x1CE4, 0x2024, 0x2024, 0x2024, 0x2024, 0x1FA4, 0x0024, 0x0024, 0x0000  } ,
"이", {0x0000, 0x0008, 0x0E08, 0x1108, 0x1108, 0x2088, 0x2088, 0x2088, 0x2088, 0x2088, 0x1108, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000  } ,
"맘", {0x0000, 0x3F88, 0x2088, 0x2088, 0x208E, 0x2088, 0x2088, 0x3F88, 0x0008, 0x0000, 0x1FF8, 0x1008, 0x1008, 0x1008, 0x0FF0, 0x0000  } ,
"으", {0x0000, 0x0000, 0x03E0, 0x0C18, 0x1004, 0x1004, 0x1004, 0x0C18, 0x03E0, 0x0000, 0x0000, 0x0000, 0x0000, 0x3FFE, 0x0000, 0x0000  } ,
"로", {0x0000, 0x0000, 0x1FF8, 0x0004, 0x0004, 0x0FF8, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0080, 0x0080, 0x0080, 0x3FFE, 0x0000, 0x0000  } ,
"화", {0x0000, 0x1F08, 0x0008, 0x7FC8, 0x0008, 0x1F08, 0x2088, 0x208E, 0x2088, 0x1F08, 0x0408, 0x0408, 0x7FE8, 0x0008, 0x0008, 0x0000  } ,
"장", {0x0000, 0x3F88, 0x0408, 0x0408, 0x0A0E, 0x0908, 0x1088, 0x2048, 0x4008, 0x03C0, 0x0C30, 0x1008, 0x1008, 0x0C30, 0x03C0, 0x0000  } ,
"을", {0x0000, 0x03E0, 0x0C18, 0x1004, 0x0C18, 0x03E0, 0x0000, 0x3FFE, 0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"다", {0x0000, 0x0008, 0x1F88, 0x2008, 0x2008, 0x2008, 0x200E, 0x2008, 0x2008, 0x2008, 0x2008, 0x2068, 0x1F88, 0x0008, 0x0008, 0x0000  } ,
"시", {0x0000, 0x0008, 0x0408, 0x0408, 0x0408, 0x0408, 0x0408, 0x0A08, 0x0A08, 0x1108, 0x1108, 0x2088, 0x4048, 0x0008, 0x0008, 0x0000  } ,
"치", {0x0000, 0x1F08, 0x0008, 0x0008, 0x7FC8, 0x0408, 0x0408, 0x0408, 0x0A08, 0x0A08, 0x1108, 0x2088, 0x4048, 0x0008, 0x0008, 0x0000  } ,
"곤", {0x0000, 0x1FF8, 0x0004, 0x0004, 0x0104, 0x0104, 0x0108, 0x0100, 0x3FFE, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"것", {0x0000, 0x3F08, 0x0088, 0x0088, 0x00F8, 0x0108, 0x0608, 0x7808, 0x0008, 0x0088, 0x0080, 0x0140, 0x0220, 0x0410, 0x180C, 0x0000  } ,
"난", {0x0000, 0x2008, 0x2008, 0x2008, 0x2008, 0x200E, 0x2068, 0x1F88, 0x0008, 0x0008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"준", {0x0000, 0x1FFC, 0x0080, 0x0140, 0x0630, 0x380E, 0x0000, 0x0000, 0x3FFE, 0x0080, 0x0080, 0x1080, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"게", {0x0000, 0x0024, 0x3E24, 0x0124, 0x0124, 0x0124, 0x01E4, 0x0124, 0x0224, 0x0224, 0x0424, 0x0824, 0x7024, 0x0024, 0x0024, 0x0000  } ,
"어", {0x0000, 0x0008, 0x0E08, 0x1108, 0x1108, 0x2088, 0x20F8, 0x2088, 0x2088, 0x2088, 0x1108, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000  } ,
"받", {0x0000, 0x2088, 0x2088, 0x2088, 0x3F8E, 0x2088, 0x2088, 0x1F08, 0x0008, 0x0000, 0x0FF8, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"했", {0x0000, 0x1E24, 0x0024, 0x7FA4, 0x003C, 0x1E24, 0x2124, 0x2124, 0x1E24, 0x0000, 0x0410, 0x0410, 0x0A28, 0x1144, 0x2082, 0x0000  } ,
"뿐", {0x0000, 0x1144, 0x1F7C, 0x1144, 0x1144, 0x0E38, 0x0000, 0x0000, 0x3FFE, 0x0080, 0x0080, 0x1080, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"그", {0x0000, 0x0000, 0x1FF8, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0008, 0x0008, 0x0008, 0x0000, 0x3FFE, 0x0000, 0x0000  } ,
"래", {0x0000, 0x0024, 0x3E24, 0x0124, 0x0124, 0x0124, 0x0124, 0x1E3C, 0x2024, 0x2024, 0x2024, 0x20E4, 0x1F24, 0x0024, 0x0024, 0x0000  } ,
"서", {0x0000, 0x0008, 0x0408, 0x0408, 0x0408, 0x0408, 0x0AF8, 0x0A08, 0x1108, 0x1108, 0x2088, 0x4048, 0x0008, 0x0008, 0x0008, 0x0000  } ,
"미", {0x0000, 0x0008, 0x3F88, 0x2088, 0x2088, 0x2088, 0x2088, 0x2088, 0x2088, 0x2088, 0x2088, 0x2088, 0x3F88, 0x0008, 0x0008, 0x0000  } ,
"안", {0x0000, 0x0E08, 0x1108, 0x2088, 0x2088, 0x208E, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"같", {0x0000, 0x3F08, 0x0088, 0x0088, 0x010E, 0x0208, 0x0C08, 0x7008, 0x0000, 0x0FF8, 0x1000, 0x1FF8, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"은", {0x0000, 0x03E0, 0x0C18, 0x1004, 0x0C18, 0x03E0, 0x0000, 0x0000, 0x3FFE, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"여", {0x0000, 0x0008, 0x0E08, 0x1108, 0x11F8, 0x2088, 0x2088, 0x2088, 0x2088, 0x20F8, 0x1108, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000  } ,
"자", {0x0000, 0x0008, 0x3FC8, 0x0408, 0x0408, 0x0408, 0x040E, 0x0A08, 0x0908, 0x1088, 0x1088, 0x2048, 0x4048, 0x0008, 0x0008, 0x0000  } ,
"를", {0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x0FFC, 0x0000, 0x3FFE, 0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"왜", {0x0000, 0x0024, 0x0C24, 0x1224, 0x2124, 0x2124, 0x2124, 0x123C, 0x0C24, 0x0824, 0x0824, 0x0824, 0x7FA4, 0x0024, 0x0024, 0x0000  } ,
"떠", {0x0000, 0x0008, 0x39C8, 0x4208, 0x4208, 0x4208, 0x4238, 0x4208, 0x4208, 0x4208, 0x4208, 0x4228, 0x39C8, 0x0008, 0x0008, 0x0000  } ,
"야", {0x0000, 0x0008, 0x0E08, 0x1108, 0x110E, 0x2088, 0x2088, 0x2088, 0x2088, 0x208E, 0x1108, 0x1108, 0x0E08, 0x0008, 0x0008, 0x0000  } ,
"떻", {0x0000, 0x39C8, 0x4208, 0x4208, 0x4238, 0x4208, 0x39C8, 0x0008, 0x03E0, 0x0000, 0x1FFC, 0x0000, 0x07F0, 0x0808, 0x07F0, 0x0000  } ,
"든", {0x0000, 0x0FFC, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000, 0x0000, 0x3FFE, 0x0000, 0x0000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"살", {0x0000, 0x0408, 0x0408, 0x0C08, 0x0A0E, 0x1108, 0x2088, 0x4048, 0x0000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"널", {0x0000, 0x2008, 0x2008, 0x20F8, 0x2008, 0x2008, 0x1FC8, 0x0008, 0x0000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"면", {0x0000, 0x3F88, 0x20F8, 0x2088, 0x2088, 0x2088, 0x20F8, 0x2088, 0x3F88, 0x0008, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"모", {0x0000, 0x0000, 0x1FFC, 0x1004, 0x1004, 0x1004, 0x1004, 0x1004, 0x1FFC, 0x0080, 0x0080, 0x0080, 0x0080, 0x3FFE, 0x0000, 0x0000  } ,
"질", {0x0000, 0x3F88, 0x0408, 0x0408, 0x0A08, 0x0908, 0x1088, 0x2048, 0x4000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"따", {0x0000, 0x0008, 0x39C8, 0x4208, 0x4208, 0x4208, 0x420E, 0x4208, 0x4208, 0x4208, 0x4208, 0x4218, 0x3DE8, 0x0008, 0x0008, 0x0000  } ,
"싶", {0x0000, 0x0408, 0x0408, 0x0C08, 0x0A08, 0x1108, 0x2088, 0x4048, 0x0008, 0x0000, 0x1FF8, 0x0420, 0x0420, 0x0420, 0x1FF8, 0x0000  } ,
"힘", {0x0000, 0x1F08, 0x0008, 0x7FC8, 0x0008, 0x1F08, 0x2088, 0x2088, 0x1F08, 0x0000, 0x1FF8, 0x1008, 0x1008, 0x1008, 0x0FF0, 0x0000  } ,
"상", {0x0000, 0x0408, 0x0408, 0x0C08, 0x0A0E, 0x1108, 0x2088, 0x4048, 0x0008, 0x03C0, 0x0C30, 0x1008, 0x1008, 0x0C30, 0x03C0, 0x0000  } ,
"홀", {0x0000, 0x03E0, 0x0000, 0x3FFE, 0x0410, 0x0808, 0x07F0, 0x0080, 0x3FFE, 0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x0FFC, 0x0000  } ,
"겨", {0x0000, 0x0008, 0x3F08, 0x0088, 0x00F8, 0x0088, 0x0088, 0x0108, 0x01F8, 0x0208, 0x0408, 0x1808, 0x6008, 0x0008, 0x0008, 0x0000  } ,
"두", {0x0000, 0x0FFC, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000, 0x0000, 0x3FFE, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0000  } ,
"락", {0x0000, 0x3F08, 0x0088, 0x0088, 0x1F0E, 0x2008, 0x2038, 0x1FC8, 0x0008, 0x0000, 0x1FF0, 0x0008, 0x0008, 0x0008, 0x0008, 0x0000  } ,
"한", {0x0000, 0x1F08, 0x0008, 0x7FC8, 0x0008, 0x1F0E, 0x2088, 0x2088, 0x2088, 0x1F08, 0x0008, 0x1000, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"번", {0x0000, 0x2088, 0x2088, 0x2088, 0x3FF8, 0x2088, 0x2088, 0x2088, 0x1F08, 0x0008, 0x0008, 0x1008, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"었", {0x0000, 0x0E08, 0x1108, 0x2088, 0x20F8, 0x2088, 0x1108, 0x0E08, 0x0008, 0x0000, 0x0410, 0x0410, 0x0A28, 0x1144, 0x2082, 0x0000  } ,
"느", {0x0000, 0x0000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000, 0x0000, 0x0000, 0x0000, 0x3FFE, 0x0000, 0x0000  } ,
"냐", {0x0000, 0x0008, 0x2008, 0x2008, 0x200E, 0x2008, 0x2008, 0x2008, 0x2008, 0x200E, 0x2068, 0x1F88, 0x0008, 0x0008, 0x0008, 0x0000  } ,
"땐", {0x0000, 0x3324, 0x4424, 0x4424, 0x4424, 0x443C, 0x4424, 0x4464, 0x3BA4, 0x0024, 0x0004, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"려", {0x0000, 0x0008, 0x3E08, 0x0108, 0x0108, 0x0178, 0x0108, 0x1E08, 0x2008, 0x2078, 0x2008, 0x2008, 0x1FC8, 0x0008, 0x0008, 0x0000  } ,
"몰", {0x0000, 0x1FFC, 0x1004, 0x1004, 0x1FFC, 0x0080, 0x0080, 0x3FFE, 0x0000, 0x1FF8, 0x0004, 0x0FF8, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"랐", {0x0000, 0x3F08, 0x0088, 0x0088, 0x1F0E, 0x2008, 0x2038, 0x1FC8, 0x0008, 0x0000, 0x0410, 0x0410, 0x0A28, 0x1144, 0x2082, 0x0000  } ,
"던", {0x0000, 0x1F88, 0x2008, 0x2008, 0x20F8, 0x2008, 0x2008, 0x2008, 0x1FC8, 0x0008, 0x0008, 0x1008, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"제", {0x0000, 0x0024, 0x7F24, 0x0824, 0x0824, 0x0824, 0x09E4, 0x0824, 0x1424, 0x1224, 0x2224, 0x2124, 0x4124, 0x0024, 0x0024, 0x0000  } ,
"알", {0x0000, 0x0E08, 0x1108, 0x2088, 0x208E, 0x1108, 0x0E08, 0x0008, 0x0000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"겠", {0x0000, 0x3E24, 0x0124, 0x0124, 0x01E4, 0x0224, 0x0C24, 0x7024, 0x0024, 0x0000, 0x0410, 0x0410, 0x0A28, 0x1144, 0x2082, 0x0000  } ,
"잘", {0x0000, 0x3FC8, 0x0408, 0x0408, 0x0A0E, 0x0908, 0x1088, 0x2048, 0x4000, 0x1FF0, 0x0008, 0x0FF0, 0x1000, 0x1000, 0x0FF8, 0x0000  } ,
"위", {0x0000, 0x0708, 0x0888, 0x1048, 0x1048, 0x0888, 0x0708, 0x0008, 0x7FF8, 0x0208, 0x0208, 0x0208, 0x0208, 0x0408, 0x0008, 0x0000  } ,
"둔", {0x0000, 0x0FFC, 0x1000, 0x1000, 0x1000, 0x0FFC, 0x0000, 0x0000, 0x3FFE, 0x0080, 0x0080, 0x1080, 0x1000, 0x1000, 0x0FFC, 0x0000  } ,
"내", {0x0000, 0x0024, 0x2024, 0x2024, 0x2024, 0x2024, 0x2024, 0x203C, 0x2024, 0x2024, 0x21A4, 0x1E24, 0x0024, 0x0024, 0x0024, 0x0000  } ,
"줘", {0x0000, 0x7FC8, 0x0408, 0x0A08, 0x1108, 0x60C8, 0x0008, 0x0008, 0x7FE8, 0x0408, 0x0408, 0x04F8, 0x0408, 0x0808, 0x0008, 0x0000  }
 };

//--------------------------------------------------


#define   _TFTLCD_      myLcd              // TFT LCD 이름 정의/                          
#include  "D:\\Program Files (x86)\\Arduino\\myHeader\\Hangul_Direct.H"    

HanGul_TFT  ht;     // 한글출력 클래스

void setup()
{
  ht.start();       

  myLcd.InitLCD();            
  myLcd.setRotation(3);   //3 가로 480x320  //2 세로   320x480
  myLcd.clrScr();      
  int y=-16;  
  ht.color(cWhite,cBlack);      
  ht.print(F("우연히 날 찾아와 사랑만 남기고 간 너"),0,y+=16);
  ht.print(F("하루가 지나 몇해가 흘러도 아무 소식도 없는데"),0,y+=16);
  ht.print(F("세월에 변해버린 날 보며 실망할까봐"),0,y+=16);
  ht.print(F("오늘도 나는 설레이는 맘으로 화장을 다시 고치곤 해"),0,y+=16);
  ht.print(F("아무것도 난 해준게 없어 받기만 했을뿐 그래서 미안해"),0,y+=16);
  ht.print(F("나같은 여자를 왜 사랑했는지 왜 떠나야 했는지"),0,y+=16);  
  ht.print(F("어떻게든 우린 다시 사랑해야해"),0,y+=16); 
  ht.print(F("살다가 널 만나면 모질게 따지고 싶어"),0,y+=16); 
  ht.print(F("힘든 세상에 나홀로 남겨두고 왜 연락한번 없었느냐고"),0,y+=16); 
  ht.print(F("아무것도 난 해준게 없어 받기만 했을뿐 그래서 미안해"),0,y+=16); 
  ht.print(F("나같은 여자를 왜 사랑했는지 왜 떠나야 했는지"),0,y+=16); 
  ht.print(F("어떻게든 우린 다시 사랑해야 해"),0,y+=16); 
  ht.print(F("그땐 너무 어려서 몰랐던 사랑을 이제야 알겠어"),0,y+=16); 
  ht.print(F("보잘것 없지만 널위해 남겨둔 내 사랑을 받아줘"),0,y+=16); 
  ht.print(F("어떻게든 우린 다시 사랑해야해"),0,y+=16); 
}

void loop()
{

}


Hangul_Direct.H
 
//        Hangul_Direct.H    ver 1.0     아두이노용 한글 출력 클래스
//
//         제작자  :  신 옥 진
//          
//          재배포는  금지, 그냥 링크를 사용 하세요.  
//          
               

#ifndef _Hangul_Direct_          
#define _Hangul_Direct_      
                           
#include <Adafruit_GFX.h>                                          
#include <UTFTGLUE.h>

#ifndef _MY_COLOR_               //  Color 정의
#define _MY_COLOR_
#define cBlack        0x0000
#define cWhite        0xFFFF
#define cRed          0xF800      
#define cGreen        0x0400
#define cBlue         0x001F
#define cSilver       0xC618
#define cGray         0x8410
#define cMaroon       0x8000
#define cYellow       0xFFE0
#define cOlive        0x8400
#define cLime         0x07E0
#define cAqua         0x07FF
#define cTeal         0x0410
#define cNavy         0x0010
#define cFuchsia      0xF81F
#define cPurple       0x8010
#define cTransparent  0xFFFFFFFF
#endif

UTFTGLUE  _TFTLCD_(0x9488,A2,A1,A3,A4,A0);  

/*
String readLine(    File  inf  )
{
  char buff[50];
  int idx=0;
 
  while(true)
  {
     byte b,b2;

         b=inf.read();        
        if( b == 0x0d )
        {
            b2=  inf.read();          
            if( b2 == 0x0a )
            {            
               buff[idx]= 0;
               return( String( buff ) );
            }
            buff[idx++] = b;
            buff[idx++] = b2;
        }
        else buff[idx++] =b;        
  }
}
*/


struct Box               // 문자열의 사각형 좌표
{
   int x,y,x2,y2;  
} ;

class HanGul_TFT
{
  private:
      unsigned short _HANGUL_FONT[16];               // 폰트 저장변수        
      int  _color=cWhite;                  // 폰트색상
      int  _bkColor = cBlack;              // 폰트배경색      

  public:  
    Box  box;    
 
    void start();
    void color(int _c ) ;           // 글자색
    void color(int _c ,int _bk);    // 글자색,  배경색
    void fill(int _c);              // 바로 앞에 출력한 문자열을 _c 색으로 채우기
    void fill() ;                   // 배경색으로 채우기
    void rect(int _c);              // 바로 앞에 출력한 문자열에 _c 색으로 테두리 그리기
    void rect();                    // 문자색으로 테두리 그리기
    void under(int _c);             // 바로 앞에 출력한 문자열에 문자색으로 밑줄 그리기
    void under();                   // 문자색으로 밑줄 그리기
    void print( String s, int x, int y , int mx, int my );  // x,y좌표에 가로 mx배 ,세로 my배로 문장 출력
    void print( String s,int  x, int y  );                  //  1배
    void print( String s,int  x, int y ,int m  );           //  m배
   
  private:
    void _setDot_Func( int col, int row, int x, int y,int mx,int my ,int c );  //폰트의 1bit에 해당하는 점 그리기
    void _drawFont_Func( int x, int y,  int mx , int my);    
    bool _memFont( long code );
    #ifdef _INDEX_2_
    void getFont( long code );
    #endif    
};


void HanGul_TFT::start()
{  
    pinMode(A0, OUTPUT);                  
    digitalWrite(A0, HIGH);               //  TFT LCD 시작  
}

void HanGul_TFT::color(int _c )
{
  _color=_c;    
}

void HanGul_TFT::color(int _c ,int _bk)
{
  _color=_c;
  _bkColor=_bk;

}

void HanGul_TFT::fill(int _c)                 // 문자열을  _c색상으로 채우기
{
    _TFTLCD_.setColor( _c  );    
    _TFTLCD_.fillRect(box.x,box.y,box.x2,box.y2);    

}

void HanGul_TFT::fill() { fill(_bkColor); }   // 문자열을  배경색상으로 채우기  // 문자열 지우기에 이용

void HanGul_TFT::rect(int _c)                 // _c색상으로 문자열의 외곽선 그리기
{
    _TFTLCD_.setColor( _c );
    _TFTLCD_.drawRect(box.x,box.y,box.x2,box.y2);    
}

void HanGul_TFT::rect() { rect(_color); }       // 문자색상으로 문자열의 외곽선 그리기

void HanGul_TFT::under(int _c)                  // 문자열에 _c색상으로 밑줄
{
    _TFTLCD_.setColor( _c );
    _TFTLCD_.fillRect(box.x, box.y2-2,box.x2,box.y2+1);    
}
void HanGul_TFT::under(){ under(_color); }                               // 문자열에 문자색상으로 밑줄

void HanGul_TFT::print( String s,int  x, int y  ) {  print( s, x, y , 1 ,1 ); }

void HanGul_TFT::print( String s,int  x, int y ,int m  ) { print( s, x, y , m, m  );  }



void HanGul_TFT::_setDot_Func( int col, int row, int x, int y,int mx,int my ,int c )
{                      
    _TFTLCD_.setColor( c );  
    for(int dx=0 ; dx< mx ;dx++)      
       for( int dy=0;dy<my;dy++)  
          _TFTLCD_.drawPixel(   x+col*mx+dx   ,y+row*my+dy  );  
}

void HanGul_TFT::_drawFont_Func( int x, int y,  int mx , int my)
{                                   // 문자(1자) 그리기
   
    for( int row=0; row< 16 ; row++)    // 폰트 bit 세로방향
    {
          for(int col=0;col<16;col++)      // 폰트 bit 가로방향
          {                                    
                if( _HANGUL_FONT[row] & 0b1000000000000000 )   _setDot_Func(  col,  row, x, y, mx, my, _color);
                else      _setDot_Func(  col,  row, x, y, mx, my, _bkColor  );        
                _HANGUL_FONT[row] <<= 1;                    // bit가 1이면 점그리기 함수 호출
          }
    }
}

bool HanGul_TFT::_memFont( long code )
{
  int size=sizeof(font) /sizeof(Font);
 
  Serial.println( "---------------" );
  Serial.println( code );
  for( int f=0; f < size; f++)
  {
      long hcode =byte(font[f].s[0]);      // 3Byte 문자(UTF-8)      
      hcode = hcode << 8;    // 상위 Byte에서 하위byte로 읽어오기  
      hcode+=byte(font[f].s[1]);              
      hcode = hcode << 8;
      hcode+=byte(font[f].s[2]);        

      if( hcode == code )
      {
          Serial.println( "find" );
          for(int i=0;i<16;i++) _HANGUL_FONT[i]=font[f].f[i];
          return true;
      }
  }
  return (false);
}

void HanGul_TFT::print( String s, int x, int y , int mx, int my )
{  
    box.x=x;
    box.y=y;
    box.y2=y+16*my-1;    

    _TFTLCD_.setTextSize(my*2);            

    for( int p=0; p <s.length() ;p++)
    {                                                
        if(  isAscii(s[p])  )
        {      
            if( s[p]==0x0d )break;                                        
            _TFTLCD_.setCursor(x,y);  
            _TFTLCD_.setTextColor(_color,_bkColor);                                                                                                    
            _TFTLCD_.println(s[p]);          
            if( s[p]==0x20 ) x+=8*my;
            else x+=12*my;        
        }
        else
        {    
            _TFTLCD_.setColor( _color)  ;
           
                  long code =byte(s[p]);              
                  code = code << 8;
                  code+=byte(s[p+1]);              
                  code = code << 8;
                  code+=byte(s[p+2]);  
                  _memFont( code);                    
                  _drawFont_Func( x,  y, mx, my) ;
                  x+=16*mx;
                  p+=2;
                                 
         } // isASCII else
    }// p 스트링 길이 반복  
    box.x2=x-1;
}

#endif