PROGRAMACIÓN EN UNA PANTALLA LCD.
- conocer el display LCD y su funcionamiento.
- programar eficientemente el LCD
- programar HMI para proyecto actual.
materiales y equipos .
- CCS compiler
- entrenador de pics
- pantalla LCD
- PIC 16F877A
- PC de sotfware de simulacion
marco teorico.
¿Que es un display LCD ?
es un display alafa numerico de matrix de puntos formado por una pantalla de cristal liquido ,sobre la cual se pueden mostrar mensajes formado por distintos caracteres.
conexiones LCD.
fácilmente con una placa Arduino o un PIC en este caso con el PIC 16F877A y con muy pocas líneas de código. Para ello veamos sus pines para saber como se conectan:
-Pin 1 - Vss: GND o tierra.
-Pin 2 - Vdd: Alimentación Vcc o + 5V.
(Algunos pueden alimentarse a 3 Vcc)
-Pin 3 - V0: Control del contraste del display, conectamos este pin al terminal variable de un potenciómetro conectado a Vcc y Masa en sus terminales extremos.
-Pin 4 - RS: Selección de Registro.
0 lógico: Registro de comandos (escritura),
1 lógico: Registro de datos (escritura, lectura)
-Pin 5 - R / W:
0 lógico: Escritura del LCD.
1 Lógico: Lectura del LCD.
-Pin 6 - Habilitar: El famoso Habilitar de casi todos los componentes de la electrónica digital. Un 1 lógico señala el inicio de la escritura o lectura del LCD, un 0 lógico, desactiva todas las funciones.
-Pin 7-10 - D0 / D3: Pines correspondientes al bus de datos.
D0 corresponde al bit menos significativo.
Estos pines no se utilizan para realizar operaciones sobre el LCD de 4 bits.
-Pin 11-14 - D4 / D7: Pines correspondientes al bus de datos.
D7 corresponde al bit más significativo y se puede utilizar como “Busy Flag”,
Si lees sobre este pin, un archivo lógico nos indica que el LCD está ocupado, no está permitido realizar ninguna operación hasta que se deshabilita.
En la tabla no aparecen, ya que no todas las pantallas disponen de los pinos 15 y 16, se ha modificado la imagen para añadirlos, y son simplemente:
-Pin 15 - Ánodo de la retroiluminación: R + 5V.
-Pin 16 - Cátodo de la retroiluminación: GND.
En el código es necesario incluir la librería del LCD para una correcta programación
Evidencia de la tarea en el laboratorio .
problema planteado por el profesor .
Se dispone de una pantalla LCD. Elaborar un programa que INCREMENTE un número en 150 unidades cada vez que se presione un pulsador y DECREMENTE dicho número en 25 unidades cada vez que se presione otro pulsador.
Si el valor del número supera 1000 unidades, mostrar en la pantalla LCD en la primera línea: “FULL”. Si el valor llega a ser menor o igual a 10, mostrar “VALOR MINIMO”. En ambos casos el valor del número no debe incrementarse ni decrementarse.
el nuevo código realizado
#include <16f877a.h>
#use delay (clock=20M)
#fuses HS, NOPROTECT, NOWDT
#define LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser
#define LCD_RS_PIN PIN_D2 //pantalla LCD
#define LCD_RW_PIN PIN_A0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c> // Incluimos librería para manejar Pantalla LCD
int16 dato;
void main ()
{
lcd_init (); // Inicializamos pantalla LCD
dato = 60; // Damos valor inicial para empezar la cuenta
printf (lcd_putc, " CONTADOR ") ; // Mandamos mensaje por única vez
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (true)
{
IF (!input (PIN_D0)) // Rutina para INCREMENTAR dato
{
dato = dato + 150;
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " CONTADOR ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
IF (dato>=1000) {
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " FULL ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (true)
{
IF (!input (PIN_D1))
{
dato=dato - 25;
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " CONTADOR ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (!input (PIN_D1)) // Rutina ANTIRREBOTE por software
{}
}
if (dato<1000)
{
break;
}
}
}
WHILE (!input (PIN_D0)) // Rutina ANTIRREBOTE por software
{}
}
IF (!input (PIN_D1))
{
dato = dato - 25;
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " CONTADOR ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
IF (dato<=10) {
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " VALOR MINIMO ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (true)
{dato = 0;
IF (!input (PIN_D0))
{
dato = 0;
break;
}
}
}
WHILE (!input (PIN_D1)) // Rutina ANTIRREBOTE por software
{}
}
}
}
el codigo en ccs c compoler.
¿Que es un display LCD ?
es un display alafa numerico de matrix de puntos formado por una pantalla de cristal liquido ,sobre la cual se pueden mostrar mensajes formado por distintos caracteres.
conexiones LCD.
fácilmente con una placa Arduino o un PIC en este caso con el PIC 16F877A y con muy pocas líneas de código. Para ello veamos sus pines para saber como se conectan:
-Pin 1 - Vss: GND o tierra.
-Pin 2 - Vdd: Alimentación Vcc o + 5V.
(Algunos pueden alimentarse a 3 Vcc)
-Pin 3 - V0: Control del contraste del display, conectamos este pin al terminal variable de un potenciómetro conectado a Vcc y Masa en sus terminales extremos.
-Pin 4 - RS: Selección de Registro.
0 lógico: Registro de comandos (escritura),
1 lógico: Registro de datos (escritura, lectura)
-Pin 5 - R / W:
0 lógico: Escritura del LCD.
1 Lógico: Lectura del LCD.
-Pin 6 - Habilitar: El famoso Habilitar de casi todos los componentes de la electrónica digital. Un 1 lógico señala el inicio de la escritura o lectura del LCD, un 0 lógico, desactiva todas las funciones.
-Pin 7-10 - D0 / D3: Pines correspondientes al bus de datos.
D0 corresponde al bit menos significativo.
Estos pines no se utilizan para realizar operaciones sobre el LCD de 4 bits.
-Pin 11-14 - D4 / D7: Pines correspondientes al bus de datos.
D7 corresponde al bit más significativo y se puede utilizar como “Busy Flag”,
Si lees sobre este pin, un archivo lógico nos indica que el LCD está ocupado, no está permitido realizar ninguna operación hasta que se deshabilita.
En la tabla no aparecen, ya que no todas las pantallas disponen de los pinos 15 y 16, se ha modificado la imagen para añadirlos, y son simplemente:
-Pin 15 - Ánodo de la retroiluminación: R + 5V.
-Pin 16 - Cátodo de la retroiluminación: GND.
En el código es necesario incluir la librería del LCD para una correcta programación
Evidencia de la tarea en el laboratorio .
problema planteado por el profesor .
Se dispone de una pantalla LCD. Elaborar un programa que INCREMENTE un número en 150 unidades cada vez que se presione un pulsador y DECREMENTE dicho número en 25 unidades cada vez que se presione otro pulsador.
Si el valor del número supera 1000 unidades, mostrar en la pantalla LCD en la primera línea: “FULL”. Si el valor llega a ser menor o igual a 10, mostrar “VALOR MINIMO”. En ambos casos el valor del número no debe incrementarse ni decrementarse.
el nuevo código realizado
#include <16f877a.h>
#use delay (clock=20M)
#fuses HS, NOPROTECT, NOWDT
#define LCD_ENABLE_PIN PIN_D3 //Definimos los pines a ser
#define LCD_RS_PIN PIN_D2 //pantalla LCD
#define LCD_RW_PIN PIN_A0
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c> // Incluimos librería para manejar Pantalla LCD
int16 dato;
void main ()
{
lcd_init (); // Inicializamos pantalla LCD
dato = 60; // Damos valor inicial para empezar la cuenta
printf (lcd_putc, " CONTADOR ") ; // Mandamos mensaje por única vez
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (true)
{
IF (!input (PIN_D0)) // Rutina para INCREMENTAR dato
{
dato = dato + 150;
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " CONTADOR ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
IF (dato>=1000) {
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " FULL ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (true)
{
IF (!input (PIN_D1))
{
dato=dato - 25;
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " CONTADOR ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (!input (PIN_D1)) // Rutina ANTIRREBOTE por software
{}
}
if (dato<1000)
{
break;
}
}
}
WHILE (!input (PIN_D0)) // Rutina ANTIRREBOTE por software
{}
}
IF (!input (PIN_D1))
{
dato = dato - 25;
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " CONTADOR ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
IF (dato<=10) {
lcd_gotoxy (1, 1) ;
printf (lcd_putc, " VALOR MINIMO ") ;
lcd_gotoxy (1, 2) ;
printf (lcd_putc, "Valor: %4lu", dato) ;
WHILE (true)
{dato = 0;
IF (!input (PIN_D0))
{
dato = 0;
break;
}
}
}
WHILE (!input (PIN_D1)) // Rutina ANTIRREBOTE por software
{}
}
}
}
el codigo en ccs c compoler.
Guardado del archivo programado (comf) para su ejecucion en proteus
explicacion de su funcionamiento en proteus
nuestro contador empieza con el valor de 60.
al presionar presionar una vez D0 nuestro contador debe aumentar en 150.
al presionar nuevamente D0 nuestro contador debe aumenta en 150.
cuando nuestro contador supere los 1000 debe paracer FULL en la pantalla LCD
cuando presionamos D1 nuestro contador debe disminuir en 25.iniciamos con el contador en 60
cuando es igual o menor que 10 en nuestra pantalla LCD de aparecer valor minimo
FUNCIONAMIENTO.
OBSERVACIONES .
- observamos que para el correcto funcionamiento de la programador teníamos que incluir la librería del LCD para poder evitar errores en el programa.
- se observo que en el LCD podemos visulizar y mostrar numero ,textos ,etc .Pero estos son limitados por el caracteres del LCD (16 caracteres horizontales y 2 lineal verticales ).
- observamos que la funcion PRITF nos permite ver o visualizar los caracteres del LCD como por ejemplo numeros ,textos ,etc.
- observamos para que hayga un orden en el LDC usamos lo siguente "lcd_gotoxy(1,1) nos numero que se encuentran dentro no sirve para seleccionar la posocion.
CONCLUSIONES .
- se concluyo que para hacer las programaciones nosotros tenemos que saber el funcionamiento de cada uno de los funciones como ejemplo IF, ELSE,WHILE.
- concluimos que en el presente trabajo realizado usamos bastante las condiciones y bucles dentro de una misma condicion.
- concluimos que para programar teníamos que sacar una nueva la carpeta del LCD, y asi programar en nuestro lcd. y así lograr los objetivos planteado en el laboratorio.
Foto
Bibliografia y paginas web recomendada
- Marin, Francisco (2007) Diseño basado en microcontroladores . Malaga : Universidad de Malaga(004.16/M26D)
- Pereira; Fabio (2007) Microcontroladores PIC.Sao Paulo:s.n.(005.13/P43)












Revisado. El video No está disponible
ResponderEliminar