Descripción
Esta pantalla, usada en algunos de los legendarios móviles Nokia, es un modelo gráfico monocromo fácil de usar con Arduino. Es una pantalla matricial de 84×48 píxeles de 1,5″ sin grandes prestaciones, pero con aire «retro» irresistible. Además, su consumo es muy reducido, algo de interés en aplicaciones alimentadas desde batería.
Utiliza el controlador PCD8544, que permite el control individual de cada píxel, facilitando el trazado de gráficos. Dispone de retroiluminación para mejorar la visualización.
Este módulo se alimenta a 3,3V, aunque las líneas de datos son compatibles con 5V, lo que posibilita su conexión directa a Arduino.
Conexiones:
- GND de la pantalla: a GND de Arduino
- Vcc de la pantalla: a 3,3V de Arduino
- BL/Light de la pantalla: a 3,3V de Arduino ( se puede regular la intensidad de la retroiluminación realizando PWM sobre este pin, o bien bajando su tensión con un potenciómetro (I=20mA).
- Pin CLK de la pantalla: a D7 de Arduino
- Pin IN/DIN de la pantalla: a D6 de Arduino
- Pin DC de la pantalla: a D5 de Arduino
- Pin CE de la pantalla: a D4 de Arduino
- Pin RST de la pantalla: a D3 de Arduino
En caso de tener problemas, probar a añadir una resistencia de 1k en cada línea de datos entre Arduino y la pantalla (aunque no suele ser necesario).
Dimensiones: 43.6 x 43.1 mm
En caso de querer usar librería, se recomienda usar la PCD8544 5110 LCD Library, que incluye algunos ejemplos (atención al consumo de memoria usando esta librería).
Código de ejemplo (sin librería):
const int PIN_RESET = 3; // Pin Reset const int PIN_SCE = 4; // Pin Chip Select const int PIN_DC = 5; // Pin Dat/Command const int PIN_SDIN = 6; // Pin Data in const int PIN_SCLK = 7; // Pin Clk // Invertir para conseguir blanco sobre negro/negro sobre blanco const int LCD_C = LOW; const int LCD_D = HIGH; const int LCD_X = 84; // Dimensiones de la pantalla const int LCD_Y = 48; const int LCD_CMD = 0; // Tabla para visualizar caracteres Ascii static const byte ASCII[][5] = { { 0x00, 0x00, 0x00, 0x00, 0x00 } // 20 ,{ 0x00, 0x00, 0x5f, 0x00, 0x00 } // 21 ! ,{ 0x00, 0x07, 0x00, 0x07, 0x00 } // 22 " ,{ 0x14, 0x7f, 0x14, 0x7f, 0x14 } // 23 # ,{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 } // 24 $ ,{ 0x23, 0x13, 0x08, 0x64, 0x62 } // 25 % ,{ 0x36, 0x49, 0x55, 0x22, 0x50 } // 26 & ,{ 0x00, 0x05, 0x03, 0x00, 0x00 } // 27 ' ,{ 0x00, 0x1c, 0x22, 0x41, 0x00 } // 28 ( ,{ 0x00, 0x41, 0x22, 0x1c, 0x00 } // 29 ) ,{ 0x14, 0x08, 0x3e, 0x08, 0x14 } // 2a * ,{ 0x08, 0x08, 0x3e, 0x08, 0x08 } // 2b + ,{ 0x00, 0x50, 0x30, 0x00, 0x00 } // 2c , ,{ 0x08, 0x08, 0x08, 0x08, 0x08 } // 2d - ,{ 0x00, 0x60, 0x60, 0x00, 0x00 } // 2e . ,{ 0x20, 0x10, 0x08, 0x04, 0x02 } // 2f / ,{ 0x3e, 0x51, 0x49, 0x45, 0x3e } // 30 0 ,{ 0x00, 0x42, 0x7f, 0x40, 0x00 } // 31 1 ,{ 0x42, 0x61, 0x51, 0x49, 0x46 } // 32 2 ,{ 0x21, 0x41, 0x45, 0x4b, 0x31 } // 33 3 ,{ 0x18, 0x14, 0x12, 0x7f, 0x10 } // 34 4 ,{ 0x27, 0x45, 0x45, 0x45, 0x39 } // 35 5 ,{ 0x3c, 0x4a, 0x49, 0x49, 0x30 } // 36 6 ,{ 0x01, 0x71, 0x09, 0x05, 0x03 } // 37 7 ,{ 0x36, 0x49, 0x49, 0x49, 0x36 } // 38 8 ,{ 0x06, 0x49, 0x49, 0x29, 0x1e } // 39 9 ,{ 0x00, 0x36, 0x36, 0x00, 0x00 } // 3a : ,{ 0x00, 0x56, 0x36, 0x00, 0x00 } // 3b ; ,{ 0x08, 0x14, 0x22, 0x41, 0x00 } // 3c < ,{ 0x14, 0x14, 0x14, 0x14, 0x14 } // 3d = ,{ 0x00, 0x41, 0x22, 0x14, 0x08 } // 3e > ,{ 0x02, 0x01, 0x51, 0x09, 0x06 } // 3f ? ,{ 0x32, 0x49, 0x79, 0x41, 0x3e } // 40 @ ,{ 0x7e, 0x11, 0x11, 0x11, 0x7e } // 41 A ,{ 0x7f, 0x49, 0x49, 0x49, 0x36 } // 42 B ,{ 0x3e, 0x41, 0x41, 0x41, 0x22 } // 43 C ,{ 0x7f, 0x41, 0x41, 0x22, 0x1c } // 44 D ,{ 0x7f, 0x49, 0x49, 0x49, 0x41 } // 45 E ,{ 0x7f, 0x09, 0x09, 0x09, 0x01 } // 46 F ,{ 0x3e, 0x41, 0x49, 0x49, 0x7a } // 47 G ,{ 0x7f, 0x08, 0x08, 0x08, 0x7f } // 48 H ,{ 0x00, 0x41, 0x7f, 0x41, 0x00 } // 49 I ,{ 0x20, 0x40, 0x41, 0x3f, 0x01 } // 4a J ,{ 0x7f, 0x08, 0x14, 0x22, 0x41 } // 4b K ,{ 0x7f, 0x40, 0x40, 0x40, 0x40 } // 4c L ,{ 0x7f, 0x02, 0x0c, 0x02, 0x7f } // 4d M ,{ 0x7f, 0x04, 0x08, 0x10, 0x7f } // 4e N ,{ 0x3e, 0x41, 0x41, 0x41, 0x3e } // 4f O ,{ 0x7f, 0x09, 0x09, 0x09, 0x06 } // 50 P ,{ 0x3e, 0x41, 0x51, 0x21, 0x5e } // 51 Q ,{ 0x7f, 0x09, 0x19, 0x29, 0x46 } // 52 R ,{ 0x46, 0x49, 0x49, 0x49, 0x31 } // 53 S ,{ 0x01, 0x01, 0x7f, 0x01, 0x01 } // 54 T ,{ 0x3f, 0x40, 0x40, 0x40, 0x3f } // 55 U ,{ 0x1f, 0x20, 0x40, 0x20, 0x1f } // 56 V ,{ 0x3f, 0x40, 0x38, 0x40, 0x3f } // 57 W ,{ 0x63, 0x14, 0x08, 0x14, 0x63 } // 58 X ,{ 0x07, 0x08, 0x70, 0x08, 0x07 } // 59 Y ,{ 0x61, 0x51, 0x49, 0x45, 0x43 } // 5a Z ,{ 0x00, 0x7f, 0x41, 0x41, 0x00 } // 5b [ ,{ 0x02, 0x04, 0x08, 0x10, 0x20 } // 5c ¥ ,{ 0x00, 0x41, 0x41, 0x7f, 0x00 } // 5d ] ,{ 0x04, 0x02, 0x01, 0x02, 0x04 } // 5e ^ ,{ 0x40, 0x40, 0x40, 0x40, 0x40 } // 5f _ ,{ 0x00, 0x01, 0x02, 0x04, 0x00 } // 60 ` ,{ 0x20, 0x54, 0x54, 0x54, 0x78 } // 61 a ,{ 0x7f, 0x48, 0x44, 0x44, 0x38 } // 62 b ,{ 0x38, 0x44, 0x44, 0x44, 0x20 } // 63 c ,{ 0x38, 0x44, 0x44, 0x48, 0x7f } // 64 d ,{ 0x38, 0x54, 0x54, 0x54, 0x18 } // 65 e ,{ 0x08, 0x7e, 0x09, 0x01, 0x02 } // 66 f ,{ 0x0c, 0x52, 0x52, 0x52, 0x3e } // 67 g ,{ 0x7f, 0x08, 0x04, 0x04, 0x78 } // 68 h ,{ 0x00, 0x44, 0x7d, 0x40, 0x00 } // 69 i ,{ 0x20, 0x40, 0x44, 0x3d, 0x00 } // 6a j ,{ 0x7f, 0x10, 0x28, 0x44, 0x00 } // 6b k ,{ 0x00, 0x41, 0x7f, 0x40, 0x00 } // 6c l ,{ 0x7c, 0x04, 0x18, 0x04, 0x78 } // 6d m ,{ 0x7c, 0x08, 0x04, 0x04, 0x78 } // 6e n ,{ 0x38, 0x44, 0x44, 0x44, 0x38 } // 6f o ,{ 0x7c, 0x14, 0x14, 0x14, 0x08 } // 70 p ,{ 0x08, 0x14, 0x14, 0x18, 0x7c } // 71 q ,{ 0x7c, 0x08, 0x04, 0x04, 0x08 } // 72 r ,{ 0x48, 0x54, 0x54, 0x54, 0x20 } // 73 s ,{ 0x04, 0x3f, 0x44, 0x40, 0x20 } // 74 t ,{ 0x3c, 0x40, 0x40, 0x20, 0x7c } // 75 u ,{ 0x1c, 0x20, 0x40, 0x20, 0x1c } // 76 v ,{ 0x3c, 0x40, 0x30, 0x40, 0x3c } // 77 w ,{ 0x44, 0x28, 0x10, 0x28, 0x44 } // 78 x ,{ 0x0c, 0x50, 0x50, 0x50, 0x3c } // 79 y ,{ 0x44, 0x64, 0x54, 0x4c, 0x44 } // 7a z ,{ 0x00, 0x08, 0x36, 0x41, 0x00 } // 7b { ,{ 0x00, 0x00, 0x7f, 0x00, 0x00 } // 7c | ,{ 0x00, 0x41, 0x36, 0x08, 0x00 } // 7d } ,{ 0x10, 0x08, 0x08, 0x10, 0x08 } // 7e ? ,{ 0x00, 0x06, 0x09, 0x09, 0x06 } // 7f ? }; void LcdInitialise(void) { // Función para inicializar la pantalla pinMode(PIN_SCE, OUTPUT); pinMode(PIN_RESET, OUTPUT); pinMode(PIN_DC, OUTPUT); pinMode(PIN_SDIN, OUTPUT); pinMode(PIN_SCLK, OUTPUT); digitalWrite(PIN_RESET, LOW); digitalWrite(PIN_RESET, HIGH); LcdWrite(LCD_CMD, 0x21); // LCD Extended Commands. LcdWrite(LCD_CMD, 0xBf); // Set LCD Vop (Contrast). //B1 LcdWrite(LCD_CMD, 0x04); // Set Temp coefficent. //0x04 LcdWrite(LCD_CMD, 0x14); // LCD bias mode 1:48. //0x13 LcdWrite(LCD_CMD, 0x0C); // LCD in normal mode. 0x0d for inverse LcdWrite(LCD_C, 0x20); LcdWrite(LCD_C, 0x0C); } void LcdWrite(byte dc, byte data){ //Función para enviar un dato a 5110 digitalWrite(PIN_DC, dc); digitalWrite(PIN_SCE, LOW); shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data); digitalWrite(PIN_SCE, HIGH); } void gotoXY(int x, int y){ // Ubicar cursor... LcdWrite(0, 0x80 | x); // Columna LcdWrite(0, 0x40 | y); // Fila } void LcdClear(void) {// Borra pantalla for (int index = 0; index < LCD_X * LCD_Y / 8; index++){ LcdWrite(LCD_D, 0x00); } } void LcdCharacter(char character){ // Mostrar caracter por pantalla LcdWrite(LCD_D, 0x00); for (int index = 0; index < 5; index++) { LcdWrite(LCD_D, ASCII[character - 0x20][index]); } LcdWrite(LCD_D, 0x00); } void LcdString(char *characters){ // Mostar string while (*characters) { LcdCharacter(*characters++); } } void DrawBox() { // Dibujar caja (dos lineas horizontales y dos verticales) unsigned char j; for (j = 0; j<84; j++){ // top gotoXY(j, 0); LcdWrite(1, 0x01); } for (j = 0; j<84; j++){ //Bottom gotoXY(j, 5); LcdWrite(1, 0x80); } for (j = 0; j<6; j++){ // Right gotoXY(83, j); LcdWrite(1, 0xff); } for (j = 0; j<6; j++){ // Left gotoXY(0, j); LcdWrite(1, 0xff); } } // *** CONFIGURACIÓN *** void setup() { LcdInitialise(); LcdClear(); } // *** CÓDIGO PRINCIPAL *** void loop() { int a, b; char Str[15]; for (b = 1000; b > 0; b--) { DrawBox(); // Dibuja una caja for (a = 0; a <= 5; a++) { gotoXY(4, 1); LcdString("TestDisplay");// Texto en la caja gotoXY(24, 3); LcdCharacter('H'); LcdCharacter('E'); LcdCharacter('L'); LcdCharacter('L'); LcdCharacter('O'); LcdCharacter(' '); LcdCharacter('='); // Draw + at this position gotoXY(10, 3); LcdCharacter('='); delay(500); gotoXY(24, 3); LcdCharacter('h'); LcdCharacter('e'); LcdCharacter('l'); LcdCharacter('l'); LcdCharacter('o'); LcdCharacter(' '); LcdCharacter('-'); // Draw - at this position gotoXY(10, 3); LcdCharacter('-'); delay(500); } } }
TFT, LCD, pantalla, screen
Valoraciones
No hay valoraciones aún.