Академический Документы
Профессиональный Документы
Культура Документы
/******************************************************************
* FileName:
main.c
* Purpose:
LCD - Visualizacin de texto
*******************************************************************/
#include "avr_compiler.h"
#include "lcd.h"
void delay_ms(unsigned int t)
{
while(t--)
delay_us(1000);
}
int main(void)
{
lcd_init();
// Inicializar LCD
//
//
//
//
// Pausa de 600 ms
// Limpiar pantalla
// ...
}
}
La funcin lcd_puts recibe como parmetro un array de tipo char, que en su forma ms
usada sera una cadena texto.
Para visualizar nmeros en el LCD primero debemos convertirlos en cadenas de
texto.
La conocida funcin sprintf (acrnimo de string print formatted) puede formatear cadenas y
nmeros en diferentes bases y colocarlas en el array que recibe como primer parmetro.
Sprintf est basada en printf, as que tiene las mismas caractersticas y limitaciones. En este
programa solo se convierten nmeros enteros.
Pero si deseas utilizar nmeros de punto flotante tendrs que habilitar el uso de la librera que
contiene printf en versin completa.
Para ms informacin puedes revisar la seccin Configuracin de printf del captulo Atmel
Studio 6 y WinAVR.
2
// Inicializar LCD
// Cursor a fila 1 posicin 4
for(;;)
{
sprintf(buff, "%2d:%02d:%02d ", hor, min, seg); // Formatear
lcd_gotorc(2,5);
// Cursor a fila 2 posicin 5
lcd_puts(buff);
// Enviar buffer a LCD
if(++seg > 59)
{
seg = 0;
if(++min > 59)
{
min = 0;
if(++hor > 12)
hor = 1;
}
}
delay_ms(998);
}
}
El Cdigo fuente
/********************************************************************
* FileName:
main.c
* Purpose:
LCD - Textos en desplazamiento
*******************************************************************/
#include "avr_compiler.h"
#include "lcd.h"
#define
LCD_LEN
16
// ndice relativo
// ndice base
lcd_init();
lcd_puts(" Scrolling text ");
while(1)
{
PRACTICA4
La creacin de caracteres grficos puede ser un tema superfluo. Aun as, suponiendo
que no faltarn algunas personas obsesivas como yo, que siempre quieren probarlo
todo, he preparado esta prctica para ir cerrando el captulo.
Hagamos un poco de memoria. Cuando enviamos el cdigo de un carcter
alfanumrico a la DDRAM del LCD, su chip interno buscar en la CGROM el patrn
correspondiente y luego lo visualizar en la pantalla. As se escriben todos textos (y
as hemos trabajado hasta ahora).
Ahora bien, si el cdigo enviado vale entre 0x00 y 0x07 (o 0x08 y 0x0F), el chip interno
buscar su patrn de visualizacin en la CGRAM. Siendo sta una RAM de
lectura/escritura, podemos programar en ella los diseos que se nos ocurran.
Por ejemplo, la figura de arriba indica que se han rellenado los dos primeros bloques
con los patrones de dos pacman. Hasta ah solo se han creado dos nuevos caracteres.
Para mostrarlos en el LCD habra que escribir un cdigo as:
lcd_data(0x00); // Visualizar primer pacman
lcd_data(0x01); // Visualizar segundo pacman
Esquema
El cdigo fuente
/*******************************************************************
* FileName:
main.c
* Purpose:
LCD - Creacin de caracteres grficos personalizados
********************************************************************/
#include "avr_compiler.h"
#include "lcd.h"
#define LCD_LEN
16
// Para LCD de 216
/* Identificadores de los nuevos caracteres */
#define PacR1
0x00
#define PacR2
0x01
#define PacL1
0x02
#define PacL2
0x03
Solo debemos tener un poco de paciencia para elaborar los arrays de los patrones.
Ahora que si no la tienes o prefieres un atajo, puedes utilizar una de las tantas
herramientas que abundan (me gusta la flexibilidad de LCD Font Creator). Inclusive los
mismos compiladores como CodeVisionAVR o MikroC proveen los suyos. Abajo se ve
cmo el generador de caracteres de MikroC nos cambia el descifrado de cdigo
binario por simples clics. El cdigo generado incluye una funcin que crea y visualiza
el nuevo carcter, pero a m solo me interesa el array.
9
10