Está en la página 1de 20

GUÍA RÁPIDA PARA TRABAJAR CON

LA LCD Y EL TECLADO

PROF. LUIS ZURITA


Pantalla LCD
• Conexionado:
El conexionado de la LCD viene dado en el driver respectivo, en
el caso de: ˂LCD.c˃ tenemos:
//// Example of pin access: ////
//// #define LCD_ENABLE_PIN PIN_D0 ////
//// #define LCD_RS_PIN PIN_D1 ////
//// #define LCD_RW_PIN PIN_D2 ////
//// #define LCD_DATA4 PIN_D4 ////
//// #define LCD_DATA5 PIN_D5 ////
//// #define LCD_DATA6 PIN_D6 ////
//// #define LCD_DATA7 PIN_D7 ////

Prof. Luis Zurita Microcontroladores II


Pantalla LCD
Paso 1. Incluir el driver de la LCD en la zona de
declaraciones:
#include <LCD.c>
Si se va a trabajar con teclado y LCD, especificar el
puerto con el cual se trabajará cada periférico
antes de la inclusión del driver:
#define use_PORTD_LCD true
#include <LCD.c>
Paso 2. Después de configurar los puertos como
entradas o salidas con los registros TRIS, se debe
inicializar la LCD=
lcd_init ( );
Prof. Luis Zurita Microcontroladores II
Pantalla LCD
Ejemplo:
#include <16f877.h>
#fuses XT,NOWDT,NOLVP
#use delay (clock=4000000)
#BYTE TRISD=0x88
#BYTE PORTD=0x08
#define use_PORTD_LCD true
#include <LCD.c>

void main (){


TRISD=0b00000000;
lcd_init();
Prof. Luis Zurita Microcontroladores II
Paso 3. Crear mensaje estático
• Tipo función
void MENSAJE( ) {
lcd_gotoxy (1,1); //Línea 1
printf (lcd_putc, “AQUI COLOCO”);
lcd_gotoxy (1,2); //Línea 2
printf (lcd_putc, “MI MENSAJE”);
}
Luego durante el programa se llama a la función
creada. Ejemplo:
BOMBA=0; Nota= los mensajes en cada línea no deben pasar
MENSAJE ( ); de la cantidad de caracteres que tiene la lcd, en el
BOMBA=1; caso de una LCD 16x2, el número de caracteres por
línea es de 16. Si es mayor a este número se
Prof. Luis Zurita truncará a 16. Microcontroladores II
Paso 3. Crear mensaje estático
• Tipo Procedimiento
Se crea el mensaje con instrucciones normales.
Ejemplo:
BOMBA=0;
lcd_gotoxy (1,1); //Línea 1
printf (lcd_putc, “AQUI COLOCO”);
lcd_gotoxy (1,2); //Línea 2
printf (lcd_putc, “MI MENSAJE”);
BOMBA=1;

Prof. Luis Zurita Microcontroladores II


¿Cuándo y cómo limpiar la LCD?

• Se recomienda limpiar la LCD antes de mostrar un


mensaje diferente al que se esté mostrando, para
borrar cualquier carácter residual del mensaje
anterior. Se puede limpiar con \f en el nuevo
mensaje de la primera línea. (El símbolo \ se
obtiene con Alt+92). Ejemplo:
lcd_gotoxy (1,1); //Línea 1
printf (lcd_putc, “\fAQUI COLOCO”);
o enviar sólo el comando (\f):
lcd_putc ( \f );

Prof. Luis Zurita Microcontroladores II


Paso 3. Crear mensaje dinámico
• Tipo función
void MENSAJE( ) {
lcd_gotoxy (1,1); //Línea 1
printf (lcd_putc, “VISITA=%d”,CONTA1);
lcd_gotoxy (1,2); //Línea 2 Registros a mostrar
printf (lcd_putc, “LOCAL=%Lu”,CONTA2);
}

Define el formato según se haya


declarado el registro a mostrar. Ejemplo:
%d= Registro tipo entero con signo
%Ld= Registro tipo entero largo con signo

Prof. Luis Zurita Microcontroladores II


Paso 3. Crear mensaje dinámico

void mostrar(){
lcd_gotoxy(1,1); Registros a mostrar

printf(lcd_putc,"%02u : %02u %02u",hr,min,dia);


lcd_gotoxy(1,2);
printf(lcd_putc,"%02u/%02u / %02u",diasem,mes,annio);
}
Define el formato según se haya
declarado el registro a mostrar. Ejemplo:
%u= Registro tipo entero sin signo
02 indica la cantidad de dígitos que se
van a mostrar.
Prof. Luis Zurita Microcontroladores II
TECLADO MATRICIAL
• Conexionado:
El conexionado del teclado viene dado en el
driver respectivo, en el caso de utilizar un teclado
4x3 con el driver ˂KDB.c˃ tenemos:
#define COL0 (1 << 5)
#define COL1 (1 << 6)
#define COL2 (1 << 7)
#define ROW0 (1 << 1)
#define ROW1 (1 << 2)
#define ROW2 (1 << 3)
#define ROW3 (1 << 4)

Prof. Luis Zurita Microcontroladores II


TECLADO MATRICIAL
• Conexionado:
El conexionado del teclado viene dado en el driver respectivo, en el caso de
utilizar un teclado 4x4 con el driver ˂KDB4x4d.c˃, facilitado en clases
tenemos:
#define COL0 (1 << 0)
#define COL1 (1 << 1)
#define COL2 (1 << 2)
#define COL3 (1 << 3)
#define ROW0 (1 << 4)
#define ROW1 (1 << 5)
#define ROW2 (1 << 6)
#define ROW3 (1 << 7)
No existe un teclado 4x4 comercial en el simulador Proteus, sin embargo el
componente KEYPAD-SMALLCALC, nos puede ayudar a simular el teclado
4x4. Independientemente de cómo sea colocado, se deben respetar las
conexiones mostradas anteriormente en cuanto al orden de las columnas
(COL) (1,2,3,4) y de las filas (ROW) (A,B,C,D), y las teclas se corresponderán
al orden mostrado en el recuadro azul.
Prof. Luis Zurita Microcontroladores II
TECLADO MATRICIAL
Paso 1. Incluir el driver del teclado en la zona de
declaraciones:
#include <KBD.c> // Opción A. Para teclado 4x3 ó
#include <KBD4x4d.c> // Opción B. Para teclado 4x4
Si se va a trabajar con LCD y teclado, especificar el puerto con
el cual se trabajará cada periférico antes de la inclusión del
driver:
#define use_PORTD_LCD true
#define use_PORTB_KBD true
#include <LCD.c>
#include <KBD4x4d.c> //ó <KBD.c> Para teclado 4x3
Paso 2. Configurar el puerto B, con RB7-RB4 como entradas y
RB3-RB0 como salidas y habilitar las resistencias “Pull-Ups”:
TRISB=0xF0;
port_b_pullups(TRUE);
Prof. Luis Zurita Microcontroladores II
TECLADO MATRICIAL
Paso 3. Después de configurar los puertos como
entradas o salidas con los registros TRIS, y las
resistencias “Pull-Ups”, se debe inicializar el
teclado=
kbd_init ( );
Paso 4. Leer el teclado y obtener la tecla
pulsada.
Con la función kbd_getc ( ); logramos
fácilmente esta tarea:
TECLA= kbd_getc ( );
Prof. Luis Zurita Microcontroladores II
TECLADO MATRICIAL
Paso 4. Leer el teclado y obtener la tecla pulsada.
TECLA= kbd_getc ( );
El registro “TECLA” se debe declarar tipo char al inicio
del programa.
Puede declararse un registro adicional, por ejemplo x
tipo int o byte para obtener la tecla en decimal, previa
conversión:
x= TECLA – 48, con lo que se convierte el dato del
código ASCII a decimal.
Es importante destacar que esta función kbd_getc(); no
aplica la interrupción RB4-RB7, sino que realiza un
escaneo de las teclas, por lo que se debe estar
llamando cada vez que se desee leer el teclado.

Prof. Luis Zurita Microcontroladores II


Ejemplo 1. Leer Tecla y mostrarla en LCD
#INCLUDE <16F877.h>
#FUSES XT,NOWDT,NOLVP
#USE DELAY(CLOCK=4000000)
#BYTE TRISB=0X86
#BYTE TRISD=0X88
#BYTE PORTB=0X06
#BYTE PORTD=0X08
#define use_PORTD_LCD true //Puerto D controlará la LCD
#define use_PORTB_KBD true //Puerto B controlará el teclado 4x3
#include <LCD.c> //Driver de la LCD
#include <KBD.c> //Driver del Teclado 4x3
int x; //Variable para guardar la tecla en decimal
Char k; // Variable para guardar la tecla en carácter
void MOSTRAR( ) { //función para visualizar la tecla en LCD
lcd_gotoxy(1,1);
printf(lcd_putc,"TECLADO 4x3=");
lcd_gotoxy(1,2);
printf(lcd_putc," %d ",x); //La tecla se visualizará en formato char
}
Prof. Luis Zurita Microcontroladores II
Ejemplo 1. Leer Tecla y mostrarla en LCD
void main(){
TRISB=0xF0; //Configuración del PORTB
TRISD=0;
port_b_pullups(TRUE); //Activamos las resistencias “Pullups”
lcd_init(); //Inicializamos la LCD
kbd_init(); //Inicializamos el teclado

while (true){
k=kbd_getc(); //Escaneamos a ver si se ha pulsado una tecla
x=k-48; //Se lleva k de ASCII a decimal
if ((k!=0)&&(x<=9)){ //Si k es distinto de cero, se ha pulsado una tecla
// Con estas condiciones se visualizará del 0 al 9 únicamente
MOSTRAR(); //Visualizamos la tecla en la LCD
}
}//true //Seguimos escaneando el teclado
}//main
Prof. Luis Zurita Microcontroladores II
Ejemplo 1. Leer Tecla y mostrarla en LCD

Prof. Luis Zurita Microcontroladores II


Ejemplo 2. Leer Tecla y mostrarla en LCD
#INCLUDE <16F877.h>
#FUSES XT,NOWDT,NOLVP
#USE DELAY(CLOCK=4000000)
#BYTE TRISB=0X86
#BYTE TRISD=0X88
#BYTE PORTB=0X06
#BYTE PORTD=0X08
#define use_PORTD_LCD true //Puerto D controlará la LCD
#define use_PORTB_KBD true //Puerto B controlará el teclado 4x4
#include <LCD.c> //Driver de la LCD
#include <KBD4x4d.c> //Driver del Teclado 4x4
int x; //Variable para guardar la tecla en decimal
Char k; // Variable para guardar la tecla en carácter
void MOSTRAR( ) { //función para visualizar la tecla en LCD
lcd_gotoxy(1,1);
printf(lcd_putc,"TECLADO 4x4=");
lcd_gotoxy(1,2);
printf(lcd_putc," %c ",k); //La tecla se visualizará en formato char
}
Prof. Luis Zurita Microcontroladores II
Ejemplo 2. Leer Tecla y mostrarla en LCD
void main(){
TRISB=0xF0; //Configuración del PORTB
TRISD=0;
port_b_pullups(TRUE); //Activamos las resistencias “Pullups”
lcd_init(); //Inicializamos la LCD
kbd_init(); //Inicializamos el teclado

while (true){
k=kbd_getc(); //Escaneamos a ver si se ha pulsado una tecla
x=k-48; //Se lleva k de ASCII a decimal
if (k!=0){ //Si k es distinto de cero, se ha pulsado una tecla
MOSTRAR(); //Visualizamos la tecla en la LCD
}
}//true //Seguimos escaneando el teclado
}//main

Prof. Luis Zurita Microcontroladores II


Ejemplo 2. Leer Tecla y mostrarla en LCD

Nota: El driver KBD4x4d.c lo puedes descargar


en la carpeta de archivos del blog.

Prof. Luis Zurita Microcontroladores II

También podría gustarte