Étude du Display LCD EADOGS102 : j'ai implanté ce modèle de display sur le projet "Minuteur", principalement pour sa faible consommation et ses dimensions.
Le principe de fonctionnement : une manière d'utiliser ce display est de créer un buffer en mémoire RAM représentant tous les pixels du display (1 byte = 8 bits), soit 102 x 8 = 816 bytes.
Le registre SET_COM_Direction et SET_SEG_Direction permet de placer l'origine x et y selon la position du LCD (attention : dans le cas 12 o'clock, la coordonnée en x débute à 30 et non pas à zéro).
Set Scroll line | 0x40, |
Set SEG Direction | 0xA0, |
Set COM Direction | 0xC0, |
Set ALL Pixel | 0xA4, |
Set Invers Display | 0xA6, |
Set LCD Bias Ratio | 0xA2, |
Set Power Control | 0x2F, |
Set VCLD Resistor Ratio | 0x27, |
Set Electronic Volume MSB | 0x81, |
Set Electronic Volume LSB | 0x10, |
Set Adv. Program control0 msb | 0xFA, |
Set Adv. Program control0 lsb | 0x90, |
Set Display Enable | 0xAF, |
Les polices de caractères (fonts) sont représentées sous forme d'un tableau de bytes.
Un caractère peut avoir une largeur différente, par exemple, la lettre "I" sera moins
large que la lettre "W". Si nous choisissons un espacement constant, l'écriture n'est
pas très agréable. C'est pourquoi nous utilisons deux tableaux : le premier, "font"
(police de caractères), qui définit chaque caractère, et le deuxième tableau,
le descripteur, qui définit la largeur en pixels et la position ou le décalage dans
le tableau font.
Prenons un exemple pour mieux comprendre : la lettre "D" majuscule dans le tableau font
Arial16pt. La police utilisée est Arial16, pour inclure tous les caractères, y
compris les minuscules et les jambages, cette police est définie avec une hauteur de 21 pixels.
fichier "font.c" | ||
---|---|---|
@1260 'D' (12 pixels wide) | ||
0x00, | 0x00, | // ............ |
0xFF, | 0x00, | // ########.... |
0xFF, | 0xC0, | // ##########.. |
0xC0, | 0xE0, | // ##.....###.. |
0xC0, | 0xE0, | // ##......##.. |
0xC0, | 0xE0, | // ##.......##. |
0xC0, | 0xE0, | // ##.......##. |
0xC0, | 0xE0, | // ##.......##. |
0xC0, | 0xE0, | // ##.......##. |
0xC0, | 0xE0, | // ##.......##. |
0xC0, | 0xE0, | // ##.......##. |
0xC0, | 0xE0, | // ##.......##. |
0xC0, | 0xE0, | // ##......##.. |
0xC0, | 0xE0, | // ##.....###.. |
0xFF, | 0xC0, | // ##########.. |
0xFF, | 0x00, | // ########.... |
0x00, | 0x00, | // ............ |
0x00, | 0x00, | // ............ |
0x00, | 0x00, | // ............ |
0x00, | 0x00, | // ............ |
0x00, | 0x00, | // ............ |
{ 11, 1176 }, | // B |
{ 13, 1218 }, | // C |
{ 12, 1260 }, | // D |
{ 11, 1302 }, | // E |
{ 10, 1344 }, | // F |
{ 14, 1386 }, | // G |
Le tableau de description (descripteur) définit la position du caractère dans le tableau font.c.
Dans cet exemple, la lettre "D" commence à l'adresse 1260, elle occupe 42 octets et le nombre de bits
pour la largeur de la lettre est de 12 bits. On remarque que les quatre derniers bits du deuxième octet sont
toujours égaux à zéro puisqu'ils ne sont pas utilisés.
Le décalage dans le tableau font.c est toujours un multiple de 21, puisque c'est la hauteur des lettres.