Módulo para utilizar el lcd gráfico de la placa Mikroe EASY8051B


1. Introducción
2. Características y conexion del glcd
3. Módulo software
3.1. Incorporación del módulo al proyecto
3.2. Ejemplo de uso
3.3. Dibujando
3.4. Mostrando texto
3.5. Utilizando la función printf()
3.6. Mostrando imágenes
4. Agradecimientos

1. Introducción

El objeto del módulo software que se presenta aquí, es poder utilizar el lcd gráfico (glcd en adelante) incluido en la placa Mikroe EASY8051B para mostrar gráficos sencillos e información textual.

Para hacerse una idea de la capacidad del glcd, la siguiente imagen muestra la ejecución del programa de test que se incluye con el módulo.

Figure 1. El glcd funcionando

El glcd funcionando

2. Características y conexion del glcd

El glcd de esta placa es un GDM12864B con controlador S6B0108 de la empresa xmocular.

Lo que importa a la hora de poder explotar un glcd es conocer el tipo de controlador que usa (hardware que gestiona la pantalla y hace de interfaz con el micro). En este caso, se trata de un controlador compatible Samsung KS0108 o Hitachi HD61202, y tiene una resolución de 128x64 pixels monocromo (2 colores). También incluye un sistema de retroiluminación.

En Hantronix se puede encontrar informacin técnica buena sobre este y otros lcd.

Para su conexión al microcontrolador, se emplea el puerto P0 como bus de datos y la parte baja de P2 (P2.0 ... P2.5) para las señales de control.

El siguiente esquema, extraido del manual de la placa, muestra el conexionado con el puerto.

Figure 2. Conexionado del glcd al microcontrolador

Conexionado del glcd al microcontrolador

3. Módulo software

Descargar el módulo.

3.1. Incorporación del módulo al proyecto

Para poder utilizar fácilmente el glcd, basta con añadir el mdulo a nuestro proyecto siguiendo estos pasos:

  • descargar el módulo.

  • descomprimirlo en el directorio del proyecto.

  • añadir al proyecto el módulo ks0108.c

  • si se desea mostrar texto en el glcd, añadir el módulo font5x7.c

  • si se desea que la función printf() muestre la salida en el glcd, añadir el módulo glcd_putchar.c

  • en el módulo que utiliza el glcd será necesario incluir la cabecera glcd.h y llamar a la funcion glcd_inicializar()

3.2. Ejemplo de uso

A continuación tienes un ejemplo de programa que usa el módulo y muestra la imagen que tienes al principio de la página.

// Fichero: test_glcd.c
// Ejemplo de uso del módulo glcd de la placa Mikroe
// Angel Perles 2009/03/25

#include "glcd.h"
#include <stdio.h>

// Incorporar en el codigo una image en formato xbm
// ... y una triquiñuela para hacer que la imagen se guarde en el segmento CODE
#define char char code
#include "med_sim2.xbm"
#undef char

void pausa(long i);

//----------------------------------------------------------------------------
void main(void) {

   int i;
   unsigned char x,y;

   glcd_inicializar(); // preparar el hardware

   glcd_putxbitmap(1,1,0,med_sim2); // mostrar una imagen en las coordenadas (1,1)

   // apagar y encender la pantalla
   pausa(20000);
   glcd_display_off();
   pausa(20000); 
   glcd_display_on();

   // hacer un triangulo a base de pixels
   for (y=0;y<10;y++) {
      for (x=0;x<y;x++) {
         glcd_putpixel(92+x,y,1);
         glcd_putpixel(92-x,y,1);
         glcd_putpixel(92+x,63-y,1);
         glcd_putpixel(92-x,63-y,1);
      }
   }

   // sacar un texto con el font por defecto
   glcd_font_puts(&font5x7,57,20,"Hola GLCD!");

   // dibujar un par de rectángulos
   glcd_rectangle(50,30,120,50,1);
   glcd_rectangle(55,35,115,45,1);

   // probar la redirección de printf()
   glcd_putchar_setxy(57,37);
   printf("Cont=");

   while (1) {
      for(i=0;i<10000;i++) {
         glcd_putchar_setxy(90,37);
         printf("%04d",i);
      }
   }
}

//----------------------------------------------------------------------------
void pausa(long i) {
   while(i--);
}

3.3. Dibujando

De momento, el módulo desarrollado es capaz de dibujar puntos (pixels) y rectángulos. Algún voluntatio podría echar una mano para que dibujase líneas y círculos.

El módulo se ha implementado de manera que el sistema de coordenadas sea el mismo que el empleado en la primera parate de la asignatura para Windows. Así, la coordenada superior izquierda será (x=0,y=0) y, como la resolución es de 128x64 pixels, la coordenada inferior derecha será (x=123,y=64).

Las siguientes funciones están disponibles para dibujar:

void glcd_putpixel(unsigned char x, unsigned char y, unsigned char color);

Dibuja un punto (pixel) en las coordenadas (x,y). El valor de color puede ser 0 o 1.

void glcd_rectangle(UI_8 x1, UI_8 y1, UI_8 x2, UI_8 y2, UI_8 color);

Dibuja un rectángulo con coordenadas (x1,y1), (x2,y2). El valor de color puede ser 0 o 1.

3.4. Mostrando texto

El módulo incorpora funciones para generar texto. Para usar ésta característica, es necesario incorporar los fuentes de texto que se deseen según se indica en el apartado de uso del módulo.

Las funciones disponibles son:

void glcd_font_puts(Tfont *fnt, unsigned char x, unsigned char y, char *textp);

Dibuja el texto apuntado por texto en las coordenadas (x,y) utilizando la fuente fnt.

Ejemplo: glcd_font_puts(&font5x7,57,20,"¡Hola GLCD!");

3.5. Utilizando la función printf()

Para que la funcin printf() muestre su salida por el glcd se puede incorporar al proyecto el módulo indicado en el apartado de uso.

Para indicar la coordenada del glcd en la que saldrá el texto, se deberá usar previamente la función:

void glcd_putchar_setxy(unsigned char x, unsigned char y);

Establece las coordenadas de texto para printf en (x,y)

3.6. Mostrando imágenes

El módulo incorpora funciones para mostrar imágenes de mapa de bits en formato X BitMap(xbm). Las imágenes en este formado se pueden conseguir exportando cualquier imagen a dicho formato. En el caso del ejemplo, la imagen se ha obtenido exportando, con el programa gimp, una imagen jpeg del médico de los Simpson.

Para incorporar la imagen al programa se deberá añadir, antes de la función main():

// Incorporar en el codigo una image en formato xbm
// ... y una triquiñuela para hacer que la imagen se guarde en el segmento CODE
#define char char code
#include "med_sim2.xbm"
#undef char

Cuando se quiera mostrar la imagen en el glcd se usar la función:

void glcd_putxbitmap(unsigned char x, unsigned char y, unsigned char copy_options, unsigned char *xbm);

Donde (x,y) son las coordenadas superior izquierda donde colocar la imagen, copy_options dejarlo con un 0 (otro año será), y xmb es el puntero a la imagen.

Ejemplo: glcd_putxbitmap(1,1,0,med_sim2);

¿Por qué se ha usado este formato aparentemente desconocido?

La mayoría de las bibliotecas para uso de glcd encontradas por Internet suelen utilizar programas adicionales que convierten una imagen de tipo BMP al formato que haya ideado el que ha escrito la biblioteca.

Usar un programa y un formato específico particular es un engorro adicional, así que se ha intentado buscar una manera de incorporar imágenes directemente en los programas sin hacer conversiones. Y esto se ha logrado utilizando el formato libre para imágenes monocromas X BitMap.

Para poder visualizar estas imágenes en Guindows se puede emplear cualquier navegador de Internet que no sea Egplorer de Microplof, que ya no lo soporta.

4. Agradecimientos

A Dani Fernández por la primera versión del generador de fuentes.

A Fabian Maximilian y Stephane Rey, por sacarme del bloqueo con las )#@! de este glcd y ser la base para esta biblioteca.