(Problema de lenguaje C) Problema de programación del controlador LCD que descarta dígitos RGB
Es principalmente un problema de conversión de desplazamiento de bits.
Por ejemplo: un RGB de color de 24 bits (0x50, 0x60, 0x70) se convierte a 565 de 16 bits:
r = R amp; 0xF8 = (01010000 amp; 11111000 ) = 01010000 (los primeros 5 dígitos son válidos)
g = G amp 0xFC = (01100000 amp; 11111100) = 01100000 (los primeros 6 dígitos son válidos)
b = B amp; 0xF8 = (01110000 amp; 11111000) = 01110000 (los primeros 5 bits son válidos)
El color es un tipo int corto de 16 bits y los 8 bits altos están compuestos por los 5 bits de r y los primeros 3 bits de g.
Alto se puede escribir así: alto = r | (glt; lt; 5)? Debe ser alto = r | (ggt; gt; 5)
alto = r | (ggt; gt; 5) = 01010000 | (01100000gt; gt; 5) = 01010000 | p>
bajo = (glt;lt;3) | (bgt;gt;3) = (01100000lt;lt;3) | (01110000gt;gt;3) = 0000000 | >Todos los bits bajos y altos combinados son color=(high lt; lt; 8) | low=(00000000 01010011lt; lt; 8) | (00000000 00001110) = (01010011 000000000)|(00000000 00001110) = 0101001 1 0001110 = 01010 011000 01110 (565) (Este resultado es tomar los primeros 5 dígitos de r, los primeros 6 dígitos de g y los primeros 5 dígitos de b)
La definición de macro para convertir 888 a 565 en La microventana es la siguiente: comprender mejor algunos
/* crear píxeles de formato 5/6/5 de 16 bits a partir de colorval RGB (0x00BBGGRR)*/*///c es un valor largo sin firmar, 0x00BBGGRR
/* En este formato, se ignora alfa #define COLOR2PIXEL565(c) \
((((c) amp; 0xf8) lt; lt; 8) | (((c) amplificador; 0xfc00) gt; gt; 5) | (((c) amplificador; 0xf80000) gt; 19))