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 */

 }  

}