Buenas tardes, me llamo Enrique soy estudiante y hace poco empece con el tema de micronotorladores, estoy viendo los lcd graficos. Encontre en internet un libreria en la cual tengo cual es el funcionamiento del algunas lineas de la funcion "GLCD_String" lo demas como el tema de la inicialicion, envios de camando, etc lo entendi con la hoja de datos.
Espero de su ayuda y desde ya muchas gracias
Les pongo las lineas que no entido de diferentes partes de la funcion:
float Page_inc=0.5;
if (Y_address>(1024-(((page_no)*128)+5)))
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;
}
GLCD_Char(font[str-32][column])
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++);
}