Last active
December 24, 2015 01:19
-
-
Save jerivas/6722690 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Archivo de cabecera para configuración y uso de módulo LCD | |
//con el PIC18F4550 en el puerto D y E. | |
#include "p18f4550.h" //Cabecera de Núcleo | |
#include "xc.h" | |
#include "delays.h" | |
#include "stdlib.h" | |
//Prototipos de las funciones | |
void LCD_Retardo_Corto(); | |
void LCD_Retardo_Largo(); | |
void LCD_Inicializar(); | |
void LCD_Limpiar(); | |
void LCD_Posicion(unsigned char x, unsigned char y); | |
void LCD_Caracter(unsigned char Caracter); | |
void LCD_display(unsigned char Caracter); | |
void LCD_Cadena(unsigned char *Cadena); | |
//Definiciones de pines de la LCD para referencia simplificada | |
#define LCD_RS LATE0 | |
#define LCD_RW LATE1 | |
#define LCD_E LATE2 | |
#define LCD_DATA LATD | |
//******************************************************** | |
//Funcion usada para generar los retardos de la linea E de la pantalla LCD | |
void LCD_Retardo_Corto() { | |
Delay10TCYx(150); | |
} | |
//Funcion usada para generar los retardos de la inicializacion de la LCD | |
void LCD_Retardo_Largo() { | |
Delay10TCYx(250); | |
Delay10TCYx(250); | |
} | |
//Funcion de inicializacion de la pantalla LCD | |
void LCD_Inicializar() { | |
//Permite un cierto tiempo para que la pantalla inicialice internamente | |
LCD_Retardo_Largo(); | |
//Envia el comando de inicializacion que establece el modo de 8 bits | |
LCD_RS = 0; | |
//Se enviara un comando | |
LCD_RW = 0; | |
//La operacion es de escritura | |
LCD_DATA = 0b00110000; //Comando que establece la interfase de 8 bits | |
LCD_E = 1; | |
LCD_Retardo_Corto(); //Pulsa la linea de Enable brevemente | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
//Espera a que la LCD procese el comando | |
LCD_Retardo_Largo(); | |
//Envia el mismo comando por segunda vez | |
//(los puertos retienen sus valores anteriores) | |
LCD_E = 1; | |
LCD_Retardo_Corto(); | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
//Espera nuevamente | |
LCD_Retardo_Largo(); | |
//Envia el mismo comando por tercera vez | |
LCD_E = 1; | |
LCD_Retardo_Corto(); | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
//Espera nuevamente | |
LCD_Retardo_Largo(); | |
//Envia el comando que activa las 2 filas y establece la fuente grande | |
LCD_DATA = 0b00111100; | |
LCD_E = 1; | |
LCD_Retardo_Corto(); | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
//El siguiente comando enciende el display completo y el cursor parpadeante | |
LCD_DATA = 0b00001111; | |
LCD_E = 1; | |
LCD_Retardo_Corto(); | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
//Este comando indica al LCD que escriba hacia la derecha y que no desplace | |
//el texto al ir escribiendo | |
LCD_DATA = 0b00000110; | |
LCD_E = 1; | |
LCD_Retardo_Corto(); | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
//Al final se limpia toda la pantalla | |
LCD_Limpiar(); | |
} | |
//Funcion de limpieza de la pantalla LCD | |
void LCD_Limpiar() { | |
//Envia el comando que hace la operacion de limpieza | |
LCD_RS = 0; | |
//Se enviara un comando | |
LCD_RW = 0; | |
//La operacion es de escritura | |
LCD_DATA = 0b00000001; | |
LCD_E = 1; | |
LCD_Retardo_Corto(); | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
} | |
//Funcion para establecer la posicion de escritura en la pantalla | |
void LCD_Posicion(unsigned char x, unsigned char y) { | |
unsigned char Direccion_DDRAM; | |
//Determina la direccion base de la DDRAM de acuerdo a la coordenada y | |
if (y == 0) Direccion_DDRAM = 0x00; //La fila 0 comienza en la direccion 0 | |
else Direccion_DDRAM = 0x40; //La fila 1 comienza en la direccion 0x40 | |
//Suma la coordenada x a la direccion base (aplica mascara) | |
Direccion_DDRAM += x & 0x0F; | |
//Una vez encontrada la direccion se envia el comando a la pantalla | |
LCD_RS = 0; | |
//Se enviara un comando | |
LCD_RW = 0; | |
//La operacion es de escritura | |
LCD_DATA = 0b10000000 | Direccion_DDRAM; | |
LCD_E = 1; | |
LCD_Retardo_Corto(); | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
} | |
//Funcion de impresion de un caracter simple en la pantalla | |
void LCD_Caracter(unsigned char Caracter) { | |
LCD_RS = 1; | |
//Se enviara un dato | |
LCD_RW = 0; | |
//La operacion es de escritura | |
LCD_DATA = Caracter; //Coloca el caracter en el bus | |
LCD_E = 1; | |
LCD_Retardo_Corto(); //Provoca una pulsacion del enable | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
} | |
//Funcion de impresion de cadenas en pantalla LCD | |
void LCD_Cadena(unsigned char *Cadena) { | |
unsigned char i; | |
//Para imprimir una cadena simplemente se envian los caracteres de uno en | |
//uno hasta que se encuentra el cero terminador | |
for (i = 0; Cadena[i] != 0; i++) | |
LCD_Caracter(Cadena[i]); | |
} | |
//Funcion de impresion de un caracter simple en la pantalla | |
void LCD_display(unsigned char Caracter) { | |
LCD_RS = 1; | |
//Se enviara un dato | |
LCD_RW = 0; | |
//La operacion es de escritura | |
LCD_DATA = Caracter + 0x30; //Coloca el caracter en el bus | |
LCD_E = 1; | |
LCD_Retardo_Corto(); //Provoca una pulsacion del enable | |
LCD_E = 0; | |
LCD_Retardo_Corto(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment