Librería para Display de Nokia 3310 con C30 y dsPIC

Proyecto realizado con un dsPIC y C30.
Se proveen funciones para Texto, Puntos, Líneas, Cuadrados, Círculos y Bitmaps.
Con Buffer de memoria para la composición de la pantalla en segundo plano.


Los displays gráficos de los teléfonos Nokia 3310 se caracterizan por tener una magnífica relación calidad / precio, ya que por un módico precio puedes disfrutar de una resolución de 84 x 48 pixels, con controlador integrado, y con un contraste y velocidad de respuesta bastante aceptables. Además, para usarlos sólo son necesarios 5 pines del microcontrolador, incluso menos que los LCD tradicionales de modo texto.

En vista de todas estas virtudes, y utilizando como base la librería escrita por mi amigo Cucaracha para manejar un display de Nokia 3310 con PIC, me dispuse a escribir una librería para dsPIC en C30. Y una vez puestos, he implementado diversas funciones que la completan y facilitan bastante la realización de todo tipo de gráficos.

CONEXIONES

 

Recomiendo visitar la web de Cucaracha y descargar el zócalo que él diseñó para conectar el display cómodamente, sin necesidad de soldar sobre sus pequeñas pistas.

En cualquier caso, las patillas de conexión del display con el micro son:

  • sclk
  • sda
  • dc
  • cs
  • res

Las otras tres son de alimentación:

  • Vdd a 5V
  • Vss a GND
  • Vo con un condensador de 10uF a GND

FUNCIONES

Función de inicialización

void lcd_init(void)

Esta función debe ser llamada en el main() de tu programa, en la fase de arranque, para que configure los parámetros básicos del Display.

Funciones internas

int write(int handle, void *buffer, unsigned int len)
void nokia_envia_bits(char byte_dato)
void nokia_envia_dato(char byte_dato)
void nokia_envia_comando(char byte_comando)
float arcocoseno (perimetro,radio)

Estas cinco funciones son necesarias para el funcionamiento interno de la librería y no son útiles para el usuario.

Funciones de escritura directa en Pantalla

void nokia_imprime_caracter(int *caracter)
void nokia_gotoxy(char xnokia, char ynokia)
void nokia_borra_pantalla(void)

Este grupo de funciones permite escribir directamente sobre la pantalla, sin usar ningún buffer intermedio. Para ello, pondremos el cursor en la posición donde queremos escribir (nokia_gotoxy) y luego enviamos la cadena de caracteres (nokia_imprime_caracter). También podemos borrar la pantalla (nokia_borra_pantalla).

Funciones de escritura a través de memoria de video

void nokia_borra_memoria(void)
void nokia_imprime_memoria(void)
void nokia_punto (char x, char y, char color)
void nokia_linea (char x1, char y1, char x2, char y2, char color)
void nokia_rectangulo (char x1, char y1, char x2, char y2, char estilo, char color)
void nokia_circulo (char x, char y, char radio, char estilo, char color)
void nokia_bitmap (char x, char y, const char *bitmap, char ancho, char alto)
void nokia_texto(char x, char y, char fuente, char *caracter)

Este grupo de funciones permite realizar distintas actividades gráficas sobre una memoria de video, que posteriormente puede ser volcada al display de una tacada.

Para la gestión de dicha memoria de vídeo se utilizan las funciones nokia_borra_memoria() y nokia_imprime_memoria(). Cabe destacar que la segunda no vacía la memoria, por lo que si seguimos dibujando, en la siguiente impresión que se haga seguirá estando lo que había; es como si se dibuja encima.

El resto de funciones no tiene mucha historia:

    • nokia_punto: dibuja un punto en las coordenadas x,y de color NEGRO o BLANCO.
    • nokia_linea: dibuja una línea desde x1,y1 hasta x2,y2 de color NEGRO o BLANCO.

  • nokia_rectangulo: dibuja un rectángulo desde el vértice x1,y1 hasta el vértice x2,y2 de color NEGRO o BLANCO. Si el estilo es TRANSPARENTE sólo se dibujará el perímetro; si es OPACO se dibujará completamente.
  • nokia_circulo: dibuja un círculo con centro en x,y con un radio determinado, de color BLANCO o NEGRO, y con estilo TRANSPARENTE u OPACO.
  • nokia_bitmap: dibuja el bitmap que se envíe en un string en las coordenadas x e y. Hay que indicar el ancho y el alto. Los bytes que formen el bitmap tienen que estár orientados en vertical y barriendo de izquierda a derecha.
  • nokia_texto: escribe la frase que se envíe en las coordenadas x,y usando la fuente NORMAL , NEGRITA o COMPRIMIDA.

Os dejo aquí un video del resultado, y en el área de Descargas encontraréis la librería junto con un programa de pruebas:

AMPLIACIÓN: controlando LCD NOKIA 1100 con PIC 16F

El amigo Alberto Casatti me ha pasado su librería para controlar un display de Nokia 1100 con un PIC 16F en MikroC.

Tanto la librería como el esquema están disponibles en el área de Descargas, aquí: Librería para Display Nokia 1100 con MikroC para 16F

Doy las gracias a Alberto y espero que la disfrutéis.

Share