// 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);
}