티스토리 뷰
LCD12864 프로젝트의 첫번째 글에서 이미 얘기했듯이 LCD12864는 이름과 같이 가로 128개의 점과 세로 64개의 점으로 표시 가능한 그래픽 모드로 동작 시킬수 있다.
이번 글에서는 어떻게 그래픽모드로 동작 시켜 원하는 곳에 점을 표시할 수 있는지 설명하도록 하겠다.
먼저, 그래픽 모드로 설정하기 위한 코드를 만들어 보겠다.
lcd_set_graphic_mode()는 텍스트 모드에서 그래픽 모드로 전환 할 수 있다.
위의 표에서 보는바와 같이 function command에서 RE 비트값을 1로 하면 extended function set 모드가 되고, G비트값을 1로 하면 그래픽 모드로 전환되게 된다.
setup() 함수에서 lcd_set_graphic_mode()를 부르면 LCD12864는 그래픽 모드로 전환된다.
그래픽 모드로 전환되면 GDRAM 메모리 안에 있는 의미 없는 값들이 출력되기 때문에 다음과 같은 화면처럼 보일것이다.
그럼, 그래픽모드에서 그림을 그리기 위한 드라이버 코드를 만들어 보겠다.
ST7920 문서의 첫번째 페이지에 위의 내용이 나온다. 이 말은 세로64개의 줄과, 각 줄마다 256개의 가로점이 있다는 뜻이다.
GDRAM에 데이터를 쓰는 절차는 다음과 같다.
먼저 세로축(Y) 주소를 먼저 쓴다. 그 다음엔 이어서 가로축(X) 주소를 쓴다.
주소를 지정해 주었으면, 이어서 그 주소에 들어갈 데이터를 두바이트로 나누어서 쓴다. 먼저 상위 바이트값을 먼저 쓴다음 이어서 하위 바이트 값을 쓴다.
위의 그림이 실제 GDRAM의 구조를 전체적으로 보여주고 있다.
X축은 0 ~ 15까지의 주소를 가질수 있다. 하나의 주소에 16비트 데이터값을 가지므로 모두 256개의 점이 표시할수 있다는 뜻이 된다.
Y축은 0 ~ 63까지의 주소를 가질수 있으므로 모두 64개의 라인을 지정해 줄수 있다.
이제 이러한 내용을 종합적으로 분석하여 다음과 같은 코드를 만들수 있을것이다.
위의 코드를 이용하여 실제 LCD화면에 원하는 점들을 찍어 보도록 하겠다.
setup() 함수에서 LCD칩을 초기화 한 후 그래픽 모드로 전환한다. 그럼 LCD화면에 임의의 점들이 찍혀 있는데, 0~9줄까지 모두 0을 써서 LCD를 10줄 clear 시키게 된다.
위의 코드를 실행 시키면 다음과 같은 화면이 보인다.
의도했던대로 위에서부터 10줄이 깨끗하게 지워졌지만 화면의 가운데 부분의 10줄도 같이 지워진 것을 볼 수 있다.
이렇게 된 이유는 이전 글을 참조하면 왜 그런지 쉽게 이해할 수 있을것이다.
역시나 LCD12864 모듈은 가로로 256이 아닌 128개의 점만이 있고, 나머지 절만은 떼어서 아래부분에 붙여 놓았다고 보면 된다.
즉 세로축 32 ~ 63은, 원래 세로축 0 ~ 31의 가로축 8 ~ 15의 값들이 출력되도록 만들면 될것이다.
따라서 다음과 같이 draw_data() 함수를 수정해 보도록 하겠다.
draw_data()에 들어오는 y값은 0 ~ 63까지의 범위내이지만 실제로는 0~31까지밖에 표현할 수 없으므로 y값을 GDRAM에 쓸때는 0X1f로 마스킹 한다. 대신, X축에 대한 주소를 쓸때 Y의 값이 31보다 크면 X축 주소값에 8을 더하도록 만들어 준다. draw_data() 들어오는 x값은 0~7사이의 값이어야 한다.
그럼 수정한 draw_data() 함수가 잘 동작하는지 확인해 보도록 하겠다.
세로줄이 짝수일때는 0X5555데이터를 쓰고, 홀수줄일때는 0xAAAA를 쓰도록 하였다.
제일 위에서부터 차례로 체크무늬가 그려지는 것을 볼 수 있을것이다.
마지막줄까지 모두 그려지면 다음과 같은 모습이 최종적으로 보여질 것이다.
이로써 기본적인 그래픽 모드를 사용하는 방법에 대해서 살펴 보았다.
'프로젝트 > LCD12864' 카테고리의 다른 글
LCD12864 - Draw Line (0) | 2016.07.28 |
---|---|
LCD12864 - Draw dot (0) | 2016.07.26 |
LCD12864 드라이버 코드 - DDRAM의 이해 (1) | 2016.07.24 |
LCD12864 드라이버 코드 - Serial mode (0) | 2016.07.21 |
LCD12864 - UART SPI Master Mode (0) | 2016.07.20 |