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
}
|