2009. 6. 4. 15:13

[ARM7] LCD 사용자 문자 출력

텍스트형 LCD 모듈에서 사용자 정의 문자를 보내는 방법에 대해 알아보자.

보통 기본적으로 텍스트형 LCD 모듈은 LCD 콘트롤러를 내장하고 있어서, 이것의 내부에 있는 CG ROM안에는 192개(일본어형) 또는 240개(유럽형)의 기본 문자 폰트를 가지고 있어서 사용자가 화면에 표시하고자 하는 문자 코드를 DD RAM에 써주기만 하면 이것에 해당하는 폰트가 자동으로 CG ROM에서 찾아져서 화면에 디스플레이 된다.

그러나 한글과 같이 정의되어 있지 않은 문자를 출력하려면, 사용자가 문자를 정의해서 사용해야 하는데, 이와 같이 사용자 정의문자를 지정하는데 사용하는 메모리가 CG RAM이며, 이 CG RAM에는 5x7 도트를 사용하는 경우에 최대 8문자까지 정의할 수 있고, 5x10도트의 경우에는 최대 4문자까지 정의하여 사용할 수 있다.

<5x8에서 '가'를 그린 모습>


LCD 모듈의 CG RAM에 사용자 정의문자를 작성해 넣는 방법은 다음과 같다.

1. 가로가 5칸이므로 한바이트로 표현이 가능하다. 따라서 한줄을 한바이트로 정의하며, 총 8줄이므로 한글자는 8바이트가 된다.

2. 토트를 검게 표시하고 싶은 부분을 1로 하고 공백부분은 0으로 한다. 일반적으로 8번째 줄은 커서를 표시하기 위해 비우기도 한다.

3. 위의 '가'란 문자를 정의한다고 하면, 5칸으므로 8비트(1바이트)로 표시할 때 상위 3비트는 필요가 없다. 그리고 검게 표시된 부분은 2번째 비트이다. 따라서 이것을 2진수로 나타내면 xxx00010(x는 don't care)이고, 16진수로 나타내면 0x02가 된다.(don't care를 0이라 둔다면)

4. 이런식으로 8줄을 모두 정의한다.

5. 8줄을 묶어주기 위해 배열을 선언하는게 편하다. 소스로 나타내면 다음과 같을 것이다.

unsigned char font[8] = {0x02, 0x1A, 0x0A, 0x0A, 0x0B, 0x0A, 0x0A, 0x02};

이를 활용하여 한가인이라는 문자를 출력하는 프로그램을 작성하였다. (소스 일부임)

int main()
{
  InitLCD();
  SetFont();
  SendToLCD(10x80); //set ddram
  SendToLCD(00x03);  //하트
  SendToLCD(00x00);  //한
  SendToLCD(00x01);  //가
  SendToLCD(00x02);  //인
  SendToLCD(00x03);

  return 0;
}

void InitLCD()
{
  //LCD 제어 시작
  *PIO_PER = DBUS|RS|RW|EN|BL;        //병렬 입출력 활성화
  *PIO_OER = DBUS|RS|RW|EN|BL;       //  출력 활성화

  SendToLCD(10x3c);  //function set
  SendToLCD(10x06);  //Entry mode
  SendToLCD(10x1C);  //cursor shift
  SendToLCD(10x0C);  //Display On
  SendToLCD(10x01);  //Clear Display
  return;
}


void SetFont()
{
  int i;
  unsigned char font[] = {0x0a, 0x1e, 0x020x1b, 0x1a, 0x020x100x1e,  //한
                0x020x1a, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a, 0x02,   //가
                0x090x150x150x150x090x000x080x0f,  //인
                0x000x0a, 0x1b, 0x1f, 0x1f, 0x0e, 0x040x00};   //하트

  SendToLCD(10x40);
  for(i=0; i<32; ++i)
  {
    SendToLCD(0, font[i]);
  }
  return;
}



결과 화면이다.


Trackback 0 Comment 0