0% encontró este documento útil (0 votos)
24 vistas3 páginas

LCD C Lib

El documento describe las funciones utilizadas para programar un LCD, incluyendo funciones para inicializar el LCD, enviar comandos, posicionar el cursor y mostrar cadenas y caracteres.

Cargado por

John Vicuña
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
24 vistas3 páginas

LCD C Lib

El documento describe las funciones utilizadas para programar un LCD, incluyendo funciones para inicializar el LCD, enviar comandos, posicionar el cursor y mostrar cadenas y caracteres.

Cargado por

John Vicuña
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

#include <xc.

h>
#include "LCD_Lib.h"
#include "Config.h"
/****************************************************************
***************************************************************
AQUI EST�S FUNCIONES QUE SE UTILIZAR�N EN EL PROGRAMA PRINCIPAL
SE DESCRIBE LA PROGRAMACI�N DE CADA UNO DE ELLOS
****************************************************************
*****************************************************************/

//*****FUNCI�N INICIO: Configuraci�n seg�n el Datasheet LCD HITACHI*****


void LCD_inicio(void){
//configuraci�n de puertos de entrada y salida
//4bits -> RD0 RD3
LCD_PORT = LCD_PORT & 0xf0; //(asignamos los puertos a usar como salida)
/* RD7 RD0
* 1111 0000
* 0
*/
LCD_TRIS &= 0xf0; //LCD_TRIS = LCD_TRIS & 0xf0;

RW_TRIS = 0;
RS_TRIS = 0;
E_TRIS = 0;

RW_PIN = 0;
RS_PIN = 0;
E_PIN = 0;

__delay_ms(15); //Segun datasheet

LCD_Comando(0x30);
__delay_ms(5);
LCD_Comando(0x30);
__delay_us(100);
LCD_Comando(0x32);
__delay_us(100);

//4 bits configuracion:


__delay_us(100);
LCD_Comando(0x28); //Lineas y caracteres
__delay_us(100);
LCD_Comando(0x08); //Display cursor y parpadero: apagado
__delay_us(100);
LCD_Comando(0x0f); //Display cursor y parpadero: enciende
__delay_us(100);
LCD_Comando(0x01); //Limpiar LCD
__delay_us(100);
LCD_Comando(0x04);
__delay_us(100);

__delay_us(100);
LCD_Comando(0x06); //Display
LCD_Comando(0x0C); //Incremento y no se mueve
return;

//Es una funci�n auxiliar que permite realizar la configuraci�n del LCD
//seg�n los valores indicados por el datasheet del LCD (pag46)
//ENTRADA: comando (valor a trabajar en el LCD)
//�Qu� hace?: Seg�n el valor del "comando" realiza la configuraci�n
void LCD_Comando(unsigned char comando){
//30 = 0011 0000
LCD_PORT &= 0xf0;
LCD_TRIS &= 0xf0;

//30 -> + significativo 3


LCD_PORT = LCD_PORT | ((comando>>4)&0x0f);
/* 30= 0011 0000
* >>4= 0000 0011
* &0f= 0000 1111
* = 0 0011
*/
//Configuraci�n
RW_PIN = 0; //Modo Escritura
RS_PIN = 0; //Modo Comando
__delay_us(5); //18TCY -> 20MHZ: 18*TCY = 18*(4/20MHZ) = 3.6uS
E_PIN = 1; //Habilita LCD
__delay_us(5);
E_PIN = 0; //Deshabilita LCD

//30 -> - significativo 0


LCD_PORT &= 0xf0;
LCD_PORT |= comando&0x0f;
__delay_us(5); //18TCY -> 20MHZ: 18*TCY = 18*(4/20MHZ) = 3.6uS
E_PIN = 1; //Habilita LCD
__delay_us(5);
E_PIN = 0; //Deshabilita LCD

LCD_TRIS |= 0x0f;

return;
}

//***** Esta funci�n


//ENTRADA: X, Y
//�Qu� hace?: Ubica el puntero de inicio seg�n X (columna) Y (fila)
void LCD_posicion_XY(int x,int y){
if(x>0){
LCD_Comando(0xC0+y);
}
else{
LCD_Comando(0x80+y);
}
}

void LCD_muestra_cadena(const char *dato){


while(*dato){
__delay_us(100);
LCD_muestra_un_caracter(*dato);
dato++;
}
}

void LCD_muestra_un_caracter(char data){


__delay_us(100);
LCD_PORT &= 0xf0;
LCD_TRIS &= 0xf0;

LCD_PORT = LCD_PORT | ((data>>4)&0x0f);


//Configuraci�n
RW_PIN = 0; //Modo Escritura
RS_PIN = 1; //Modo Caracter
__delay_us(5); //18TCY -> 20MHZ: 18*TCY = 18*(4/20MHZ) = 3.6uS
E_PIN = 1; //Habilita LCD
__delay_us(5);
E_PIN = 0; //Deshabilita LCD

LCD_PORT &= 0xf0;


LCD_PORT |= data&0x0f;

__delay_us(5); //18TCY -> 20MHZ: 18*TCY = 18*(4/20MHZ) = 3.6uS


E_PIN = 1; //Habilita LCD
__delay_us(5);
E_PIN = 0; //Deshabilita LCD

LCD_TRIS |= 0x0f;

return;

También podría gustarte