Retour
Page Précédente
Page Suivante

Comment interfacer un afficheur LCD issus d'un écran de GSM
Nokia type 2600, 2650, 3100, 3200, 5100, 6030, 6100, , 6220, 6610, 7250, 7250


En décriptant le Datasheet du contôleur PC8833, on arrive à reproduire le protocole de communication et les séquences d'initialisations.
C'est la partie, qui à mon avis, est la plus interressante, car une fois, cette bataille remportée ! Il ne reste plus qu'à implémenter les différentes fonctions pour effacer l'écran, tracer un trait, un cercle, afficher une image ou encore écrire un texte.

Exemple de transmission d'un octet à l'afficheur, en mode série. L'utilisation d'une boucle n'est pas appropriée car le traitement est beaucoup plus long et du coup l'affichage très ralenti.

void glcd_write_dorc(char byteforglcd)
{
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x80);
output_high(glcd_sclk);
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x40);
output_high(glcd_sclk);
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x20);
output_high(glcd_sclk);
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x10);
output_high(glcd_sclk);
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x08);
output_high(glcd_sclk);
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x04);
output_high(glcd_sclk);
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x02);
output_high(glcd_sclk);
output_low(glcd_sclk);
output_bit(glcd_sdata,byteforglcd&0x01);
output_high(glcd_sclk);
}

Exemple de transmission d'un octet de commande à l'afficheur, en mode série.

void glcd_write_command(char byteforglcd_command)
{
output_bit(glcd_sclk,FALSE);
output_bit(glcd_cs,FALSE);

output_bit(glcd_sdata,FALSE);
output_bit(glcd_sclk,TRUE);

glcd_write_dorc(byteforglcd_command);

output_bit(glcd_sclk,FALSE);
output_bit(glcd_cs,TRUE);
}

Exemple de transmission d'un octet de donnée à l'afficheur, en mode série.
void glcd_write_data(char byteforglcd_data)
{
output_bit(glcd_sclk,FALSE);
output_bit(glcd_cs,FALSE);

output_bit(glcd_sdata,TRUE);
output_bit(glcd_sclk,TRUE);

glcd_write_dorc(byteforglcd_data);

output_bit(glcd_sclk,FALSE);
output_bit(glcd_cs,TRUE);
}

Exemple d'initialisation de l'afficheur en mode 65K couleurs.
void glcd_init(void)
{
delay_ms(65);

output_bit(glcd_cs,FALSE); // GLCD ENABLED
output_bit(glcd_res,FALSE);
delay_ms(10);
output_bit(glcd_res,TRUE);
output_bit(glcd_sclk,TRUE);
output_bit(glcd_sdata,TRUE);
output_bit(glcd_cs,TRUE);

glcd_write_command(SOFT_RESET); // Reset
glcd_write_command(SLEEP_OUT); // Sleep Out
glcd_write_command(BOOSTER_ON); // Booster ON
glcd_write_command(COLMOD);

glcd_write_data(COLOR_16_BIT);

glcd_write_command(MEM_CONTROL); // Mode adresse
glcd_write_data(0b00000000); // pixels

output_bit(glcd_cs,FALSE);
glcd_write_command(SETCON); // Contraste
glcd_write_data(65);
output_bit(glcd_cs,TRUE);

glcd_write_command(DISPLAY_ON); // Display ON

}

© ACTION 2003 - Janvier 2007