Questa
funzione accende o spegne un pixel alla posizione XY. Purtroppo, anche se si
scrive un solo pixel bisogna inviare al cursore un'intera word
void glcd_pixel(unsigned char
x, unsigned char y, bool color)
{
unsigned int new_val=0b0000000000000000; // 2 byte
unsigned int XX, YY;
if ((x>=0) && (x<128) && (y>=0)
&& (y<64))
{
if
(y >= 32) /* nel case le coordinate inserite
dall'utente corrispondono alla seconda metą dello schermo */
{
YY = y - 32;
XX = (x / 16) + 8; //
individuo la word sulla quale scrivere
}
else
{
YY = y;
XX = x / 16;
}
new_val
= 0b1000000000000000 >> (x % 16); // sposto l'1 a destra in
corrispondenza del pixel da accendere
if
(color) /* accendo
il pixel */
{
matrice[XX][YY] = (matrice[XX][YY])
| (new_val); }
else /* spengo il pixel */
{
matrice[XX][YY] = (matrice[XX][YY])
& (~new_val); }
glcd_write_instruction(0x80 + YY); /*
inserisco la posizione verticale */
glcd_write_instruction(0x80 + XX);
/* posizione orizzontale */
glcd_write_data(matrice[XX][YY] >> 8);
/* scrivo il byte pił significativo della word */
glcd_write_data(matrice[XX][YY]); /* scrivo il byte meno significativo della
word */
}
}