void GLCD_Init() /* GLCD Initialization function */
{
Ctrl_dir = 0; /* Make Control pin as output */
Data_dir = 0; /* Make Data pin as output */
OSCCON = 0x72; /* Internal 8MHz OSC Frequency */
RST = 1; /* Make reset pin High */
CS1 = 1; CS2 = 1;/* Select Left half of display */
MSdelay(20);
GLCD_Command(0x3E); /* Display OFF */
GLCD_Command(0x40); /* Set Y address (column=0) */
GLCD_Command(0xB8); /* Set x address (page=0) */
GLCD_Command(0xC0); /* Set z address (start line=0) */
GLCD_Command(0x3F); /* Display ON */
}
void GLCD_Command(char cmd)/* GLCD Command function */
{
LCD_data = cmd; /* Copy command on data pin */
RS = 0; /* Make RS LOW for command register*/
EN = 1; /* Make HIGH-LOW transition on Enable */
NOP();
NOP();
EN = 0;
NOP();
NOP();
}
void GLCD_Char(char data)/* GLCD Data function */
{
LCD_data = data; /* Copy Data on data pin */
RS = 1; /* Make RS HIGH for data register */
EN = 1; /* Make HIGH-LOW transition on Enable */
NOP();
NOP();
EN = 0;
NOP();
NOP();
}
void GLCD_String(char page_no, char *str)/* GLCD string write function */
{
unsigned int i,column,Page=((0xB8)+page_no),Y_address=0;
float Page_inc=0.5;
CS1 = 1; CS2 = 0; /* Select Left half of display */
GLCD_Command(Page);
for(i=0;str[i]!=0;i++) /* Print char in string till null */
{
if (Y_address>(1024-(((page_no)*128)+5)))
break;
if (str[i]!=32)
{
for (column=1;column<=5;column++)
{
if ((Y_address+column)==(128*((int)(Page_inc+0.5))))
{
if (column==5)
break;
GLCD_Command(0x40);
Y_address = Y_address+column;
CS1 = ~CS1; CS2 = ~CS2;
GLCD_Command((Page+Page_inc));
Page_inc=Page_inc+0.5;
}
}
}
if (Y_address>(1024-(((page_no)*128)+5)))
break;
if((font[((str[i]-32)*5)+4])==0 || str[i]==32)
{
for(column=0;column<5;column++)
{
GLCD_Char(font[str[i]-32][column]);
if((Y_address+1)%64==0)
{
CS1 = ~CS1; CS2 = ~CS2;
GLCD_Command((Page+Page_inc));
Page_inc=Page_inc+0.5;
}
Y_address++;
}
}
else
{
for(column=0;column<5;column++)
{
GLCD_Char(font[str[i]-32][column]);
if((Y_address+1)%64==0)
{
CS1 = ~CS1; CS2 = ~CS2;
GLCD_Command((Page+Page_inc));
Page_inc=Page_inc+0.5;
}
Y_address++;
}
GLCD_Char(0);
Y_address++;
if((Y_address)%64==0)
{
CS1 = ~CS1; CS2 = ~CS2;
GLCD_Command((Page+Page_inc));
Page_inc=Page_inc+0.5;
}
}
}
GLCD_Command(0x40);
}
void GLCD_Clear()
{
int i,j;
CS1 = 1; CS2 = 1;
for(i=0;i<8;i++)
{
GLCD_Command((0xB8)+i);
for(j=0;j<64;j++)
{
GLCD_Char(0);
}
}
GLCD_Command(0x40);
GLCD_Command(0xB8);
}
/*****************************Delay Function*****************************/
void MSdelay(unsigned int val)
{
unsigned int i,j;
for(i=0;i<=val;i++)
for(j=0;j<165;j++);
}