text LCD에 사용자정의 한글 띄우기

2013. 5. 28. 09:44스마트콘트롤러/ARM


text LCD에 사용자정의 한글 띄우기


LCD모듈 datasheet에 보면 CG RAM에 주소를 넣으면 5 * 7 도트 크기의 사용자정의 글자를 8개 저장할 수 있으며,

5 * 10 크기는 4개까지 저장할 수 있다.

이를 활용해서 사용자 정의 글자를 한글로 8글자 저장해서 아래와 같은 모습을 만들었다. 

소스코드

#include <stdio.h>

void LCD_Init()
{
  PIO_OER = LCD_RS|LCD_RW|LCD_EN|LCD_BS;
  PIO_PER = LCD_RS|LCD_RW|LCD_EN|LCD_BS;
  LCD_CMD_Write(LCD_Func);  
  LCD_CMD_Write(LCD_Entry);
  LCD_CMD_Write(LCD_Cursir);
  LCD_CMD_Write(LCD_Display);
  LCD_CMD_Write(LCD_Clear);
  LCD_CMD_Write(LCD_Home);

  return;
}

void LCD_CMD_Write(unsigned char ucDATA)
{
  volatile unsigned int icnt;
  PIO_CODR = LCD_EN;                  //CODR이므로 EN을 0V로
  PIO_CODR = LCD_RS;                  //        RS를 0V로
  PIO_CODR = LCD_RW;                  //        RW를 0V로
  for(icnt = 0; icnt < LCD_delay-LCD_delay1; ++icnt);
  PIO_SODR = LCD_EN;                  //CODR이므로 EN을 3.3V로
  for(icnt = 0; icnt < LCD_delay-LCD_delay2; ++icnt);
  PIO_CODR = LCD_BS;
  PIO_SODR = ucDATA << 16;
  for(icnt = 0; icnt < LCD_delay-LCD_delay3; ++icnt);
  PIO_CODR = LCD_EN;
  for(icnt = 0; icnt < LCD_delay-LCD_delay4; ++icnt);
  
  return;
}


void LCD_DATA_Write(unsigned char ucDATA)
{
  volatile unsigned int icnt;
  PIO_CODR = LCD_EN;                  //CODR이므로 EN을 0V로
  PIO_SODR = LCD_RS;                  //        RS를 3.3V로
  PIO_CODR = LCD_RW;                  //        RW를 0V로
  for(icnt = 0; icnt < LCD_delay-LCD_delay1; ++icnt);
  PIO_SODR = LCD_EN;                  //CODR이므로 EN을 3.3V로
  for(icnt = 0; icnt < LCD_delay-LCD_delay2; ++icnt);
  PIO_CODR = LCD_BS;
  PIO_SODR = ucDATA << 16;
  for(icnt = 0; icnt < LCD_delay-LCD_delay3; ++icnt);
  PIO_CODR = LCD_EN;
  for(icnt = 0; icnt < LCD_delay-LCD_delay4; ++icnt);

  
  return;
}
void LCD_Run()
{
  volatile unsigned int iCnt;
  volatile unsigned int Han_gul[]={
    0x000x040x1f, 0x000x040x0a, 0x0a, 0x04,        //ㅎ
    0x000x080x080x080x180x080x180x08,        //ㅕ
    0x000x000x000x0e, 0x020x0e, 0x080x0e,        //ㄹ
    0x000x040x040x0a, 0x110x110x000x00,        //ㅅ
    0x000x080x080x080x0e, 0x080x080x08,        //ㅏ
    0x1f, 0x000x0e, 0x020x0e, 0x080x0e, 0x00,        //를
    0x1c, 0x040x1c, 0x100x1c, 0x000x000x00,        //ㄹ
    0x1f, 0x040x140x140x1f, 0x000x000x00};        ?//문

  LCD_Init();
  LCD_CMD_Write(0x40);
  for (iCnt = 0; iCnt < 64; ++iCnt)
  {
    LCD_DATA_Write(Han_gul[iCnt]);
  }

  // 윗줄
  LCD_CMD_Write(0x80);
  LCD_DATA_Write(0x00);     // ㅎ
  LCD_CMD_Write(0x81);
  LCD_DATA_Write(0x01);     // ㅕ
  LCD_CMD_Write(0x82);
  LCD_DATA_Write(0xbd);     // 사용자정의 아님 : ㅈ
  LCD_CMD_Write(0x83);
  LCD_DATA_Write(0x48);     // 사용자정의 아님 : H
  LCD_CMD_Write(0x84);
  LCD_DATA_Write(0x02);     // ㄹ
  LCD_CMD_Write(0x86);
  LCD_DATA_Write(0x03);     // ㅅ
  LCD_CMD_Write(0x87);
  LCD_DATA_Write(0x04);     // ㅏ
  LCD_CMD_Write(0x88);
  LCD_DATA_Write(0xbd);     // 사용자정의 아님 :
  LCD_CMD_Write(0x89);
  LCD_DATA_Write(0x04);     // ㅏ
  LCD_CMD_Write(0x8a);
  LCD_DATA_Write(0x21);     // 사용자정의 아님 : !
  LCD_CMD_Write(0x8b);
  LCD_DATA_Write(0xdb);     // 사용자정의 아님 : 
  LCD_CMD_Write(0x8c);
  LCD_DATA_Write(0x4c);     // 사용자정의 아님 : L
  LCD_CMD_Write(0x8d);
  LCD_DATA_Write(0x04);     // ㅏ
  LCD_CMD_Write(0x8e);
  LCD_DATA_Write(0xcc);     // 사용자정의 아님 : 
  LCD_CMD_Write(0x8f);
  LCD_DATA_Write(0x01);     // ㅕ

  // 아랫줄
  LCD_CMD_Write(0xc1);     
  LCD_DATA_Write(0x4c);    // 사용자정의 아님 : L
  LCD_CMD_Write(0xc4);
  LCD_DATA_Write(0x05);    // 를
  LCD_CMD_Write(0xc7);
  LCD_DATA_Write(0x06);    // ㄹ
  LCD_CMD_Write(0xcb);
  LCD_DATA_Write(0x07);    // 문
  LCD_CMD_Write(0xcd);
  LCD_DATA_Write(0xdf);    // 사용자정의 아님 : 
  LCD_CMD_Write(0xcf);
  LCD_DATA_Write(0x6f);    // 사용자정의 아님 : 
  
  

  return;
}
int main()
{
  
void LCD_Run();
  return 0;
}


'스마트콘트롤러 > ARM' 카테고리의 다른 글

[TEXT LCD 모듈]사용자정의 CG램에 HEX숫자 변환하는 엑셀  (0) 2013.05.27
[ARM]타이머 카운터와 인터럽트  (1) 2013.05.20
ARM ADC컨버터  (0) 2013.05.08
1. GNUARM 설치하기。  (0) 2013.04.11
센서 종류  (0) 2013.04.11