/****************************************************
EJEMPLO DE PROGRAMACION DEL MODULO LCD 44780
----------------------------------------------------
ESCUELA DE EDUCACIÓN TÉCNICA
SAN JOSÉ 8013 (ROSARIO)
****************************************************/
#pragma config FOSC = INTOSCIO, WDTE = OFF, PWRTE = OFF, MCLRE = OFF
#pragma config BOREN = OFF, LVP = OFF, CPD = OFF, CP = OFF
#include <xc.h>
#define _XTAL_FREQ 4000000
/****************************************************
ESTA FUNCION GENERA UN PULSO DE 10 microsegundos
EN LA PATA RA1 DEL PIC CADA VEZ QUE SE LA LLAMA
****************************************************/
void pulsoEnable(){
TRISA1=0; // Es equivalente a TRISA=0bxxxxxx0x
CM0=1; // Equivaler a CMCON=7
CM1=0; // desactiva los comparadores conectados
CM2=1; // a RA0, RA1, RA2 y RA#
// se genera el pulso
RA1=0;
RA1=1;
__delay_us(20);
RA1=0;
/****************************************************
ESTA FUNCION ESCRIBE UN COMMANDO EN EL 44780
****************************************************/
void escribirComando(unsigned char comando){
TRISA0=0; // RA0 EN MODO OUTPUT
TRISB=0; // PORTB EN MODO OUTPUT
RA0=0; // MODO COMANDO RA0 -> CONECTADA A RS
PORTB=comando; // se pone el byte de comando en el bus D0...D7
pulsoEnable(); // se escribe el comando en el 44780
__delay_ms(50); // se espera a que el micro 44780 termine la ejecucion
/****************************************************
ESTA FUNCION ESCRIBE UN DATO EN EL 44780
****************************************************/
void escribirDato(unsigned char comando){
TRISA0=0; // RA0 EN MODO OUTPUT
TRISB=0; // PORTB EN MODO OUTPUT
RA0=1; // MODO DATO RA0 -> CONECTADA A RS
PORTB=comando; // se pone el byte de comando en el bus D0...D7
pulsoEnable(); // se escribe el comando en el 44780
__delay_ms(50); // se espera a que el micro 44780 termine la ejecucion
}
/****************************************************
LA FUNCION MAIN
****************************************************/
void main(void){
// secuencia de inicializacion (6 instrucciones)
escribirComando(0b00110000); // secuencia de reset
escribirComando(0b00110000); // para entrar en modo
escribirComando(0b00110000); // de inicializacion
escribirComando(0b00110000); // Modo 8 bits
escribirComando(0b00111000); // modo 2 lineas y font 5x7
escribirComando(0b00001111); // display ON, Cursor ON, Blink ON
// se envia "HOLA CHICOS" caracter a caracter
escribirDato('H'); // la letra "H" como caracter
escribirDato(0b01001111); // la letra "O" en ASCII es 79 --> 79 en binario 0100 1111
escribirDato(76); // la letra "L" en ASCII es 76
escribirDato(0x41); // la letra "A" en ASCII es 65 --> 65 en hexa es 41
escribirComando(0b11000000); // pone el cursor al comienzo de la siguiente linea
escribirDato('Q');
escribirDato('U');
escribirDato('I');
escribirDato('N');
escribirDato('T');
escribirDato('O ');
__delay_ms(1000);
escribirComando(0b00000001); // borra el display
escribirDato('T');
escribirDato('P');
escribirDato('4');
escribirDato(' ');
escribirDato('L');
escribirDato('C');
escribirDato('D');
while (1){
}
}