click para descargar

Anuncio
PIC 18F45XX
EL CONTROL DEL LCD
1. Driver <xlcd.h>
Microchip proporciona un driver <xlcd.h> que contine todas las
funciones para controlar un LCD genérico con controlador Hitachi
HD44780.
El archivo se encuentra situado en:
c:\Archivos de programa\Microchip\mplabc18\3.40\h
El driver necesita que las siguientes funciones de retardo estén
declaradas y programadas correctamente:
* DelayFor18TCY()
* DelayPORXLCD()
* DelayXLCD()
1Tcy=4/Fosc, para Xtal de 20Mhz 1Tcy=0.2us
2
2. Funciones de retardo
FUNCIONES DE RETARDO OBLIGATORIAS PARA PROGRAMAR
EL LCD. Retardos calculados para Xtal=20Mhz
void DelayFor18TCY(void)
{
Delay10TCYx(3); // Retardo de al menos 18 TCy
}
void DelayXLCD(void)
{
Delay1KTCYx(30); // Retardo de al menos 5ms
}
void DelayPORXLCD(void)
{
Delay1KTCYx(90); // Retardo de al menos 15ms
}
3
4. Funciones básicas de control (I)
void OpenXLCD(unsigned char lcdtype);
Sirve para configurar el tipo de LCD y el tamaño de la matriz de puntos,
generalmente 5x7.
Es la primera función a ejecutar para poder utilizar el LCD.
OpenXLCD(FOUR_BIT & LINES_5X7);
unsigned char BusyXLCD(void);
Devuelve un cero cuando el lcd está listo para recibir datos.
void WriteCmdXLCD(unsigned char cmd);
Envía un comando al lcd. Los comandos básicos son:
0b00001111
0b00001011
0b00001111
0b00001101
0b00001111
0b00001110
0b00000001
0b11000000
// Display on
// Display off
// Cursor on
// Cursor off
// Cursor Blink
// Cursor No Blink
// Borrar lcd
// Cambio de línea
4
4. Funciones básicas de control (II)
void SetCGRamAddr(unsigned char Cgaddr);
Selecciona el generador de caracteres. Los datos se guardan en la
CGRam.
void SetDDRamAddr(unsigned char Ddaddr);
Selecciona la ram de datos. Los datos se muestran en el lcd.
void WriteDataXLCD(char data);
Envía un byte de datos al lcd (DDRam o CGRam en función de la
selección).
void putsXLCD(char *buffer);
Envía una cadena de caracteres
void putrsXLCD(const rom char *buffer);
Envía una cadena de caracteres en rom
5
5. Funciones de usuario (I)
Además de las funciones básicas que proporciona el driver podemos añadir nuevas
funciones de control personalizadas.
void lcd_init(void) // Configura el lcd y lo prepara para recibir datos/comandos
{
OpenXLCD(FOUR_BIT & LINES_5X7); // Interface 4Bits con matriz 5x7 ptos.
while(BusyXLCD());
// Esperar lcd=listo
WriteCmdXLCD(0x01);
// Clear display
while(BusyXLCD());
// Esperar lcd=listo
WriteCmdXLCD(DON&CURSOR_OFF&BLINK_OFF);
while(BusyXLCD());
// Esperar lcd=listo
WriteCmdXLCD(0x02);
// Comando home
Delay10KTCYx(1);
// Retardo de seguridad
}
void borrar_lcd(void) // Borra el contenido del lcd
{
while(BusyXLCD());
// Esperar lcd=listoLCD busy
WriteCmdXLCD(0x01); // Borrar lcd
}
6
5. Funciones de usuario (II)
void cambio_linea(void) // Situa cursor en pos cero de la línea 2
{
while(BusyXLCD());
WriteCmdXLCD(0xC0);
}
void gotoxy(unsigned char col , unsigned char fil) // Situa cursor en x,y
{
if(fil == 0) {
while(BusyXLCD());
WriteCmdXLCD(0x80 | col); // Cursor en linea 1
}
else {
while(BusyXLCD());
WriteCmdXLCD(0xC0 | col); // Cursor en linea 2
}
}
7
6. Funciones de usuario (III)
void escribe_caracter(char car) // Envía un carácter
{
while(BusyXLCD());
WriteDataXLCD(car);
}
void escribe_digito(unsigned char dato8bits) // Muestra un dígito 0-9
{
char tabla[10]={'0','1','2','3','4','5','6','7','8','9'};
escribe_caracter(tabla[dato8bits]);
}
void escribe_entero(int valor_entero) // Muestra un número entero
{
char txt_int[16];
itoa(valor_entero,txt_int); // Convertir int a cadena
putsXLCD(txt_int);
// Mostrar cadena en lcd
}
8
7. Creación de un carácter especial (I)
El lcd puede mostrar en pantalla cualquiera de los caracteres de la siguiente tabla:
9
7. Creación de un carácter especial (II)
Para mostrar en el lcd el carácter 'H' (código 0x48) podemos usar la función:
WriteDataXLCD(0x48); o bien WriteDataXLCD('H');
Pero el lcd dispone de 16 posiciones de memoria interna para el generador
de caracteres (CGRAM).
Para generar un carácter especial hay que enviar al lcd el comando que
permite escribir en el generador de caracteres (comando 0x40). Cada
carácter ocupa 8 posiciones de memoria, una por cada línea según la tabla
siguiente:
CGRAM
Inicio<>Fin
====================
0x00
0x40<>0x47
0x01
0x48<>0x4F
0x02
0x50<>0x57
0x03
0x58<>0x5F
“
0x0F
“
“
0xB8<>0xBF
10
7. Creación de un carácter especial (III)
Para crear un carácter de una cara sonriente en la posición 0x00 hay que
escribir en la cgram los 8 datos que componen el carácter según se indica en
la figura:
La función anterior carga el carácter en la cgram pero para poder verlo en el
lcd hay que usar la función: WriteDataXLCD(0);
11
8. Ejemplo de programación
Realizar un programa que muestre en el LCD el texto “I.E.S Luis
de Lucena”. Al pulsar RA3 el texto debe cambiar a “D.P.E Curso
2012/2013” durante dos seguntos y volver a mostrar el mensaje
inicial.
RA3 =>
12
Solución (1/2)
13
Solución (2/2)
14
Simulación
15
Descargar