메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

AVR 자료실
AVR128제품
2012.10.26 16:05

wat128.h 파일의 캐릭터LCD 제어 설명

조회 수 6547 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 

 

// LCD 초기화

void CLCD_Init()

{ 

        SetBit(CLCD_CONTROL_PORT_DIR,CLCD_EA);  // ENABLE 포트를출력으로설정

        SetBit(CLCD_CONTROL_PORT_DIR,CLCD_RS);  // RS 포트를출력으로설정

        SetBit(CLCD_CONTROL_PORT_DIR,CLCD_RW);  // RS 포트를출력으로설정

  // 이예제에서는READ 를하지않기때문에 RW 신호는항상LOW로둔다.

        ClearBit(CLCD_CONTROL_PORT,CLCD_RW);

        CLCD_DATA_PORT_DIR = 0xFF;              // 데이터포트를출력으로설정

        CLCD_On();                              // LCD를켜고

        CLCD_Clear();                           // LCD 화면을클리어한다.

}

  // LCD 켜기

void CLCD_On()

{

        CLCD_Command(0x38);

        CLCD_Command(0x0C );

        CLCD_Command(0x01);

        CLCD_Command(0x06);

        CLCD_Command(0x01);

        DelayMS(2);

}

 

// LCD 화면클리어

void CLCD_Clear()

{

  CLCD_Command(1);

  DelayMS(1);

  CLCD_Command(2);

  DelayMS(1);       

}

 

BYTE CLCD_BusyCheck()

{

  // Charater LCD 딜레이함수

  // 일정시간기다린다.

        DelayUS(200);

        DelayUS(200);

        DelayUS(200);

        DelayUS(200);

        DelayUS(200);

        DelayUS(200);

        DelayUS(200);

 

 

        return (0);

 

}

 

// 원하는X,Y 좌표에문자열출력

void CLCD_PutString(BYTE x, BYTE y,  char *str)

{

        int len = 0;

 

        CLCD_XY(x,y);

 

        while(*str ){

               if(len>16) break;

               CLCD_PutChar(*str++);

               len++;

        }

 

}

 

// 한문자출력

void CLCD_PutChar(BYTE data)

{

        while(CLCD_BusyCheck());

        ClearBit(CLCD_CONTROL_PORT,CLCD_EA);

        SetBit(CLCD_CONTROL_PORT,CLCD_RS);

        DelayUS(2);

        CLCD_DATA_PORT= data;

        DelayUS(50);

        SetBit(CLCD_CONTROL_PORT,CLCD_EA);

        DelayUS(50);

        ClearBit(CLCD_CONTROL_PORT,CLCD_EA);

}

 

 

// 원하는좌표로이동

void CLCD_XY(BYTE x, BYTE y)

{

        BYTE position = 0;

        if(x>16) x = 0;

        switch(y)

        {

        case 0 :

               position = 0x80;

               break;

        case 1 :

               position = 0xC0;

               break;

        }

        CLCD_Command(position + x);

}

 

// 데이터보내기

void CLCD_Data(BYTE data)

{

        while(CLCD_BusyCheck()){}

        ClearBit(CLCD_CONTROL_PORT,CLCD_RS);

        ClearBit(CLCD_CONTROL_PORT,CLCD_EA);

        DelayUS(1);

        CLCD_DATA_PORT= data;

        DelayUS(50);

        SetBit(CLCD_CONTROL_PORT,CLCD_EA);

        DelayUS(20);

        ClearBit(CLCD_CONTROL_PORT,CLCD_EA);

        DelayUS(50);

}

 

// 코맨드보내기

void CLCD_Command(BYTE data)

{

        while(CLCD_BusyCheck()){}

        ClearBit(CLCD_CONTROL_PORT,CLCD_RS);

        ClearBit(CLCD_CONTROL_PORT,CLCD_EA);

        DelayUS(1);

        CLCD_DATA_PORT= data;

        DelayUS(50);

        SetBit(CLCD_CONTROL_PORT,CLCD_EA);

        DelayUS(20);

        ClearBit(CLCD_CONTROL_PORT,CLCD_EA);

        DelayUS(50);

}

?