1602A 커스텀 글꼴 사용
문자 출력을 기반으로 한 LCD 이거나 그래픽 출력을 기반으로 한 LCD 라이브러리이거나 알파벳과 숫자 폰트는 포함하고 있어서 손쉽게 출력이 가능하다.
앞 서 배운 1602A 디스플레이는 16글자 X두줄의 문자를 디스플레이하도록 구성된 LCD 패널이다.
2004A 디스플레이는 20글자 X 네 줄의 문자를 디스플레이하도록 되어 있다. 패널의 이름에 들어간 4자리의 숫자는 한 줄의 글자 수와 줄 수를 표시하는 것을 알 수 있다. 그런데 이때의 문자는 알파벳을 포함한 키보드에서 입력이 가능한 영숫자 들이다.
한글이나 한자는 기본으로 출력할 수 있는 글자들이 아니다.
알파벳을 기반으로 한 국가에서 만들어진 이유도 있겠지만, 한글이나 한자 폰트의 사이즈가 워낙 큰 것도 한 이유가 될 것이다.
그래서 한글을 출력하기 위해서는 그 폰트 파일을 프로그램에 포함하고 있거나, 필요한 글자만을 커스텀 글자로 만들어 등록하여야 한다.
전체 글자를 가지고 이야기하면 좋겠지만 필요한 커스텀 글자를 몇 자 등록하여 필요할 때 만 사용하는 것도 한 방법일 듯하여 이를 설명하도록 하겠다.
1602A 디스플레이를 자세히 보면 아래와 같이 가로 5, 세로 8의 작은 점들이 모여서 하나의 글자를 만드는 모습을 볼 수가 있다.
이러한 구조를 잘 이해한다면 다음과 같이 글자를 등록하면 된다.
byte BChar [] = {
B11110,
B10001,
B10001,
B11110,
B10001,
B10001,
B10001,
B11110
};
이 코드는 위의 글자를 등록하는 코드이다.
글자의 검은 부분은 1, 아무것도 없는 부분은 0으로 표시된 것을 알 수 있다.
C 프로그램에서 B는 Binary 데이터를 표시하는 첫 문자이고 그 뒤에 따라오는 글자는 1과 0의 조합으로, 하나의 숫자 B11110이 위의 글자 한 줄을 표현하는 것이다.
이와 비슷한 방법으로
한글 ㄱ, ㅏ, ㅁ, ㅅ 4개의 글자를 등록해 보자.
byte Giyuk [] = {
B11111,
B00001,
B00001,
B00001,
B00001,
B00001,
B00001,
B00001
};
byte Ah [] = {
B00100,
B00100,
B00100,
B00111,
B00100,
B00100,
B00100,
B00100
};
byte Mium []={
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B11111
};
byte Siot [] = {
B00100,
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001
};
이 4개의 글자를 등록하고 디스플레이하는 방법은 다음과 같다.
글자의 위치와 해당 글자 이름을 아래와 같은 명령어에 넣으면 등록이 된다.
lcd.createChar(0, Giyuk);
lcd.createChar(1, Ah);
lcd.createChar(2, Mium);
lcd.createChar(3, Siot);
이제 ㄱ,ㅏ,ㅁ,ㅅ 이 0,1,2,3번에 등록이 되었다.
이를 디스플레이하는 방법은 영문과 조금 다르다.
만일 ㄱ을 첫 번째 줄 두 번째 칸에 쓰려고 하면 아래와 같이 하면 된다.
lcd.setCursor(1,0);
lcd.write(0); // 0번에 등록된 글자 출력
전체 코드를 아래와 같이 만들고 실행하면 결과는 사진과 같이 된다.
원하는 글자를 디자인하고 이를 편하게 코드로 등록하려면 아래의 사이트를 방문하면 된다.
https://maxpromer.github.io/LCD-Character-Creator/
이번 강좌에서 설명한 내용을 확장하여 2,350자의 한글 완성자 모두를 등록하거나, 조합형 꼴을 만들어 11,172자의 모든 조합 한글을 만들 수 있다면 LCD 패널에서 모든 한글이 구현되는 시스템을 만들 수 있다.
그러나 5X8의 구조에 글자를 끼워 넣는 텍스트 기반의 LCD가 아니라 자유롭게 글꼴을 디자인하여 표현할 수 있는 그래픽 디스플레이가 필요하다.
이 문제는 차후에 그래픽 LCD 패널을 사용할 때 다시 한번 이야기하도록 하겠다.