티스토리 뷰
이번 글에서는 LCD 내부에서 제공하는 글자를 사용하지 않고 프로그래머가 직접 글자 패턴을 만들어서 LCD에 출력해보는 기능에 대해서 알아보도록 하겠다.
먼저 다음과 같은 코드를 만들어 본다.
위의 코드는 500msec 마다 count 변수값을 LCD의 두번째 줄에 출력하는 코드이다. 이미 앞의 글들에서 계속 사용해 왔던 코드이다. 단지, 이번에는 두번째줄 첫번째칸에 spinner라는 배열에 있는 글자들을 한번씩 출력하는것이 추가되었다.
spinner[count & 3] 이렇게 했으므로 counter값이 1씩 증가하게 되면 실제 배열에 들어가는 값은 0,1,2,3,0,1,2,3 ... 이렇게 반복되게 된다.
따라서 LCD화면의 두번째 줄의 첫번째 칸에는 |,/,-,\이 반복되어서 출력되게 된다.
그러나 실제 LCD화면에 표시되는 글자는 다음 영상과 같이 마지막 글자가 '\'이 출력되는게 아니고 엔화 표시문자가 출력되는 것을 볼 수 있다.
이런식으로 원하는 글자가 출력되지 않거나, 프로그래머가 원하는 특정 패턴을 출력하고자 할 때, 패턴을 직접 만들어서 출력할 수 있는 기능을 HD44780 칩이 제공한다. 이 기능을 이용하여 원하는 패턴을 출력해 보도록 할 것이다.
먼저 다음 그림을 이해하여야 한다.
위의 그림 가운데 부분에 CGRAM Address라는 것을 볼 수 있다. 6비트 주소를 가지므로 최대 64바이트 값을 지정할 수 있다. CGRAM address는 다시 두 부분으로 나눌수가 있는데 상위 3비트 값이 DDRAM address에 대응되도록 되어 있다. 그리고 하위 3비트값이 하나의 글자를 구성하는 8개 줄중에 한 줄의 주소를 지정하는 것이다.
위의 그림을 예로 들면, 'R'이라는 글자를 프로그래머가 직접 만들고자 한다면 CGRAM 0x00번지에 0X1E를 쓰고, 0x01번지에는 0x11을 쓴다. 같은 방법으로 0x11, 0x1E, 0x14, 0x12, 0x11, 0x00를 CGRAM 주소에 쓴다. 이렇게 한다음 실제 이 글자를 출력하려면 DDRAM 주소를 0x00번지를 가리키면 CGRAM의 0번지에 들어있는 글자 패턴이LCD 화면에 출력되게 된다.
하나의 사용자 생성 패턴을 만드는데 CGRAM 8바이트가 필요하게 되므로, HD44780에서는 모두 8개 글자 패턴을 프로그래머가 만들어서 사용할 수 있다는 뜻이 된다.
이제 사용자 패턴을 등록하는 함수를 하나 만들어 보겠다.
lcd_register_cgram() 함수를 이용하여 프로그래머가 원하는 글자 하나를 CGRAM에 넣을 수 있다. 함수의 입력 인자로 CGRAM에서 사용가능한 8개 글자중에 몇번째 주소에 넣을지 선택하는 주소와, 여기에 들어갈 패턴 데이터의 포인터가 있다.
패턴 데이터를 입력하기 전에 먼저 CGRAM에 들어갈 데이터라는 것을 알려준다. 그 다음 한바이트씩 차례로 패턴을 입력한다. 이 한바이트 값이 한 글자의 제일 위줄에서부터 차례로 한줄씩 내려오는 패턴이 되는것이다.
패턴 입력이 끝났으면 HOME 명령어를 이용하여 CGRAM에 데이터를 기록하는 작업을 끝내도록 만들었다. 굳이 HOME 명령이 아니더라도 상관없다.
다시 프로젝트로 돌아와서 엔화 표시대신 들어갈 back slash(\) 패턴을 만들어 보도록 하겠다.
인터넷에서 HD44780 user defined character라고 검색하면 패턴을 그리면 그에 따른 값들을 자동으로 만들어주는 곳이 있다. 이런 사이트를 활용하면 쉽게 패턴 생성에 필요한 값들을 얻을수 있다.
'\'를 표시하기 위한 패턴을 헥사 값으로 표현하면 0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00이 되는것을 알 수 있다.
이제 이값을 CGRAM에 등록하고 실제로 이 글자를 LCD에 표시해 보도록 하겠다.
위의 코드 5번 줄에서 0번지에 back_slash 패턴을 등록하였다. 그리고 11번 줄에 spinner[] 배열의 마지막 값을 0을 입력하였다. 0번지에 등록된 back slash 패턴을 사용한다는 의미이다.
코드를 수정하여 보드에서 동작시켜 보면 다음과 같은 영상처럼 동작할 것이다.
이제 원래 프로그래머가 원했던 글자가 LCD 화면에 출력되는 것을 볼 수 있다.
'프로젝트 > LCD1602' 카테고리의 다른 글
LCD1602 - VU meter (0) | 2016.07.17 |
---|---|
LCD1602 - ADC 출력 (2) | 2016.07.16 |
LCD1602 드라이버 코드 - 4비트 모드(2) (0) | 2016.07.14 |
LCD1602 드라이버 코드 - 4비트 모드 (4) | 2016.07.14 |
LCD1602 드라이버 코드 - 8비트 모드 (4) | 2016.07.10 |