1. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
3.7. GLCD - Display de Cristal Liquido Gráfico
Objetivos
1. Configurar el ATMEGA128 para controlar un GLCD.
3.7.1. Esquemático
PE0/RXD0/PDI 2
PE1/TXD0/PDO 3
PE2/XCK0/AIN0 4
PE3/OC3A/AIN1 5
PE4/OC3B/INT4 6
PE5/OC3C/INT5 7
PE6/T3/INT6 8
PE7/ICP3/INT7 9
PB0/SS10
PB1/SCK11
PB2/MOSI12
PB3/MISO13
PB4/OC014
PB5/OC1A15
PB6/OC1B16
PB7/OC2/OC1C17
PG3/TOSC2 18
PG4/TOSC1 19
RESET20
XTAL223
XTAL124
PD0/SCL/INT0 25
PD1/SDA/INT1 26
PD2/RXD1/INT2 27
PD3/TXD1/INT3 28
PD4/ICP1 29
PD5/XCK1 30
PD6/T1 31
PD7/T2 32
PG0/WR 33
PG1/RD 34
PC0/A835
PC1/A936
PC2/A1037
PC3/A1138
PC4/A1239
PC5/A1340
PC6/A1441
PC7/A1542
PG2/ALE 43
PA7/AD744
PA6/AD645
PA5/AD546
PA4/AD447
PA3/AD348
PA2/AD249
PA1/AD150
PA0/AD051
PF7/ADC7/TDI 54
PF6/ADC6/TDO 55
PF5/ADC5/TMS 56
PF4/ADC4/TCK 57
PF3/ADC3 58
PF2/ADC2 59
PF1/ADC1 60
PF0/ADC0 61
AREF62
AVCC64 PEN 1
ATMEGA128
CS11
CS22
GND3
VCC4
V05
RS6
R/W7
E8
DB09
DB110
DB211
DB312
DB413
DB514
DB615
DB716
RST17
-Vout18
LCD1
AMPIRE128X64
Figura 3.1: Pantalla LCD
Observaciones:
En el Puerto B están conectados las lineas de Control del GLCD.
En el Puerto C están conectados las lineas de Datos del GLCD.
El GLCD que utilizaremos tiene 128x64 pixeles.
Pedro Ramírez <pedroramirez22@gmail.com> 1
2. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
3.7.2. Librería
Descargar carpeta de la librería GLCD del Dropbox y copiar los archivos dentro de la
ruta del Proyecto creado con el ATMEL STUDIO.
ks0108.h - Tiene las configuraciones de los Puertos.
//PUERTO DE CONTROL (J734)
#define LCD_CMD_PORT PORTB // Command Output Register
#define LCD_CMD_DIR DDRB // Data Direction Register for Command Port
//PUERTO DE DATOS (J731)
#define LCD_DATA_IN PINC // Data Input Register
#define LCD_DATA_OUT PORTC // Data Output Register
#define LCD_DATA_DIR DDRC // Data Direction Register for Data Port
ks0108.c - Tiene todas las funciones de las librería
1. void ks0108Init(uint8_t invert)
Inicializa el GLCD Inicializa el GLCD y el background.
a) invert - Activa o desactiva los pixeles del fondo del GLCD.
0 - disable
1 - enable
2. void ks0108SelectFont(const char* font, ks0108FontCallback callback,
uint8_t color)
Selecciona la fuente a utilizar.
a) font Selecciona la fuente a mostrar.
Arial_Bold_14
Corsiva_12
b) callback La acción a realizar.
ks0108ReadFontData
c) color El color de las letras a mostrar.
WHITE
BLACK
Pedro Ramírez <pedroramirez22@gmail.com> 2
3. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
3. void ks0108GotoXY(uint8_t x, uint8_t y)
Posiciona el cursor en la coordenada indicada.
a) x - Valor en x (horizontal hasta 127) desde la parte superior izquierda.
b) y - Valor en y (vertical hasta 63) desde la parte superior izquierda.
4. int ks0108PutChar(char c)
Muestra un char en pantalla. Retorna 1 si hubo error, 0 caso contrario.
a) c Valor ASCII a mostrar.
5. void ks0108Puts_P(PGM_P str)
Muestra un texto estático en la Pantalla (entre comillas).
a) str una cadena de texto que se desea mostrar del tipo PGM_P.
6. void ks0108Puts(char* str)
Muestra un texto dinámico en la Pantalla (buffer).
a) str una cadena de texto que se desea mostrar del tipo char.
7. void ks0108SetDot(uint8_t x, uint8_t y, uint8_t color)
Dibuja un punto en la pantalla.
a) x Valor en x (horizontal hasta 127) contando desde la parte superior izquierda.
b) y Valor en y (vertical hasta 63) contando desde la parte superior izquierda.
c) color color a mostrar (BLACK/WHITE dependiendo del background)
8. void ks0108DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2,
uint8_t color)
Dibuja una linea recta.
a) x1 posición x inicial.
b) y1 posición y inicial.
c) x2 posición x final.
d) y2 posición y final.
e) color color a mostrar (BLACK/WHITE dependiendo del background).
9. void ks0108DrawRect(uint8_t x, uint8_t y, uint8_t width, uint8_t
height, uint8_t color)
Dibuja un rectángulo con bordes rectos.
a) x posición en (hasta 127) vértice superior izquierdo del rectángulo.
b) y posición en (hasta 63) vértice superior izquierdo del rectángulo.
Pedro Ramírez <pedroramirez22@gmail.com> 3
4. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
c) width ancho del rectángulo. (eje x)
d) height altura del rectángulo. (eje y)
e) color color a mostrar (BLACK/WHITE dependiendo del background)
10. void ks0108DrawRoundRect(uint8_t x, uint8_t y, uint8_t width, uint8_t
height, uint8_t radius, uint8_t color)
Dibuja un rectángulo con bordes redondeados.
a) x posición en (hasta 127) vértice superior izquierdo del rectángulo.
b) y posición en (hasta 63) vértice superior izquierdo del rectángulo.
c) width ancho del rectángulo. (eje x)
d) height altura del rectángulo. (eje y)
e) radius radio de los bordes. (pixeles que toma para hacer el borde)
f ) color color a mostrar (BLACK/WHITE dependiendo del background)
Pedro Ramírez <pedroramirez22@gmail.com> 4
5. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
3.8. Uso 1- Texto y Rectangulo
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <math.h>
#include "ks0108.h"
#include "ks0108.c"
#include "arial_bold_14.h"
#include "corsiva_12.h"
int main(void) {
_delay_ms(1000); //Esperar el inicio del GLCD
ks0108Init(0); // Initialize the LCD
//Seleccionar una fuente
ks0108SelectFont(Arial_Bold_14, ks0108ReadFontData, BLACK);
ks0108GotoXY(15,10);//Ir a la posicion
ks0108Puts_P(PSTR("MECATRONICA"));//Imprimir algun texto
ks0108DrawRoundRect(5, 5, 117, 20, 8, BLACK);//un lindo rectangulo
//Seleccionar una fuente
ks0108SelectFont(Corsiva_12, ks0108ReadFontData, BLACK);
ks0108GotoXY(5,30);//Ir a la posicion
//Imprimir algun texto
ks0108Puts_P(PSTR(" Centro Tecnologico n de Avanzada"));
while(1);//LOOP INFINITO
}
Pedro Ramírez <pedroramirez22@gmail.com> 5
6. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
3.8.1. Uso 2 - Grafica señal Senoidal
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <math.h>
#include "ks0108.h"
#include "ks0108.c"
int main(void) {
int x,y;
//Esperar el inicio del GLCD
_delay_ms(1000);
// Initialize the LCD
ks0108Init(0);
for (x=0;x<128;x++)
{
//en x=128 tenemos wt=2PI
y = (int)32*sin(2*M_PI/128*x)+32;
ks0108SetDot(x, y, BLACK);
}
while(1);//LOOP INFINITO
}
Pedro Ramírez <pedroramirez22@gmail.com> 6
7. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
3.8.2. Práctica
1. Interpretar el siguiente código, cargarlo en el Proteus y probarlo. Explicar que
realiza.
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <string.h>
#include <stdlib.h>
#include "ks0108.h"
#include "ks0108.c"
#include "arial_bold_14.h"
#include "corsiva_12.h"
int main(void) {
unsigned char count;
char buffer[5];
//Esperar el inicio del GLCD
_delay_ms(1000);
// Initialize the LCD
ks0108Init(0);
//Seleccionar una fuente
ks0108SelectFont(Arial_Bold_14, ks0108ReadFontData, BLACK);
//Ir a la poscion
ks0108GotoXY(0,0);
//Imprimir algun texto
ks0108Puts_P(PSTR("VALOR="));
while(1)//LOOP INFINITO
{
for (count=0; count < 15; count++)
{
ks0108GotoXY(60,0);//se posiciona
itoa(count,buffer,10);//convierte int a string
ks0108Puts(buffer);//imprime el valor
_delay_ms(1000);//espera
}
ks0108GotoXY(60,0);//se posiciona
ks0108Puts_P(PSTR(" "));;//borra las cifras
}
}
2. Realizar el código necesario para que en el GLCD muestre un contador de 0 a 999
Pedro Ramírez <pedroramirez22@gmail.com> 7
8. CENTRO TECNOLÓGICO DE AVANZADA
AREA DE MECATRÓNICA
Código: M07 MICROCONTROLADORES II
Laboratorio: D-19
Duración: 3 Hs DISPLAY CONTROL
3. Realizar el código necesario para que en el GLCD muestre la cadena de texto Soy
un Mario centrado en la pantalla.
4. Realizar el código necesario para que en el GLCD muestre la cadena de texto Linea
12-1 en la primera fila, Terminal en la segunda fila y Diferencial en la tercera.
5. Realizar el código necesario para que en el GLCD muestre un cuadrado y un triángulo.
6. Realizar el código necesario para que en el GLCD muestre un circulo (x2 + y2 = r2).
7. Realizar el código necesario para que en el GLCD muestre un dos periodos de una
señal senoidal.
8. Realizar el código necesario para que en el GLCD muestre una cara feliz :].
9. Descargar de la carpeta Librerías del Dropbox el programa BMP_GLCD.exe y el
archivo de imagen snpp.bmp1. Generar el mapa de bits para el GLCD 128x64 con el
programa anterior, Luego realizar el código necesario para mostrar el mapa de bits
generado en el GLCD.
3.8.3. Conclusión
1
La imagen tiene que ser guardada en Paint como BMP monocromático.
Pedro Ramírez <pedroramirez22@gmail.com> 8