Laboratorio de microprocesadores I Docente: Ing.
José Arturo Marín Thames
PRÁCTICA 06: USO DE TECLADO MATRICIAL Y PANTALLA LCD
1. Objetivo
Conocer el funcionamiento de un teclado matricial y una pantalla LCD
conectados a un microcontrolador PIC18.
Manejar las librerías que tiene Mikro C para el manejo de un teclado
matricial y también de una pantalla LCD.
Realizar programas para el PIC 18 que utilicen teclados matriciales,
pantallas LCD para procesar información del usuario en forma simple.
2. Fundamento teórico
Teclado matricial
Un teclado es un arreglo de pulsadores conectados por filas y columnas
Es común su uso como elemento de introducción de información. Existen los teclados
formados por contactos mecánicos y teclados de contactos de láminas conductoras.
Pantalla LCD
Se tiene como elemento para mostrar la información una pantalla de tipo LCD.
Una pantalla de cristal líquido o LCD (sigla del inglés liquid-crystal display) es una
pantalla delgada y plana formada por un número de píxeles en color o monocromos
colocados delante de una fuente de luz o reflectora.
Laboratorio de microprocesadores I Docente: Ing. José Arturo Marín Thames
Librerías utilizadas para el manejo del teclado y pantalla LCD
Mikro C pro for PIC entrega al programador las funciones para manejar en forma más
sencilla el teclado y la pantalla LCD. Estas librerías son un conjunto de funciones que
tienen rutinas de programación para el manejo de los periféricos sin tener que
desarrollar códigos de lenguaje ensamblador para este propósito.
Todos los LCDs alfanuméricos necesitan recibir código ASCII para que puedan
imprimir caracteres alfanuméricos, es decir que si queremos mostrar una cantidad en
el LCD primero esa cantidad se debe convertir a cadena de texto para que pueda ser
visualizado en un LCD. A continuación se presentan ejemplos de conversión de datos:
Numero: 1->0x01 123->0x7B
Carácter: ‘1’->0x31 ‘A’->0x41
Cadena de texto: “123”->0x31 0x32 0x33 0x00, 0x00 es carácter null (en C
se usa para notar el fin de cadena te texto).
Cadena de texto: “1AB@23”->0x31 0x41 0x42 0x40 0x32 0x33 0x00
En el modo de conexión de 4-bit, se requieren 6 líneas de conexión entre el
microcontrolador PIC y el LCD: 2 líneas de Control (RS: Register Select, EN:Enable)
y 4 líneas de Datos (D4,D5,D6,D7).
Para especificar la conexión física entre el microcontrolador PIC y el LCD, en el
programa se dimensionan (crean) variables que indican los bits de los puertos del PIC
correspondientes a cada una de las 6 líneas de conexión del LCD. Estos bits pueden
modificarse de acuerdo a las necesidades del diseño.
Previo al uso del LCD, se debe inicializar (una sola vez) con la instrucción:
LCD_Init(). Se pueden enviar mensajes al LCD indicando la fila (1 al 4), columna (1
al 16) y el texto (ASCII entre comillas) con la instrucción:
LCD_Out(fila,columna,”Texto”)
Laboratorio de microprocesadores I Docente: Ing. José Arturo Marín Thames
Es posible enviar desde el microcontrolador PIC18 a la pantalla LCD comandos para
el control. A continuación se presenta una tabla resumen de los comandos para el
manejo de la pantalla LCD.
Fuente: Guía de laboratorio, Ing. Guachalla
En las pantallas LCD tenemos las siguientes características de conexionado en este caso
dos filas y 16 columnas, basado en el microcontrolador Hitachi HD44780. En esta
pantalla LCD se puede visualizar todas las letras de alfabeto, letras de alfabeto griego,
signos de puntuación, símbolos matemáticos etc. También es posible visualizar símbolos
creados por el usuario.
Módulo LCD, Fuente: http://galia.fc.uaslp.mx/
Las líneas de control se especifican a continuación:
E: Cuando esta línea pasa de 1 a 0, el controlador del LCD lee el resto de líneas ya sean
de control o de datos.
R/W: Cuando esta línea está en 0 se escribe sobre el LCD. Cuando esta línea se pone en
1 se lee el LCD, especialmente útil para leer si ha finalizado la última orden indicada.
RS: Línea de selección de registro, cuando RS = 0 se manda una orden o comando sobre
el LCD. Si RS = 1 el dato que se envía es el que se mostrará en la pantalla LCD.
Laboratorio de microprocesadores I Docente: Ing. José Arturo Marín Thames
Conexión del microprocesador a la pantalla LCD, Fuente: http://galia.fc.uaslp.mx/
A continuación presentamos en forma resumida la funcionalidad de los pines de la
pantalla LCD.
3. Códigos para la prueba de pantalla LCD y teclado con el PIC18F4550
3.1 Probar el siguiente código que maneja la pantalla LCD mediante el uso del PIC18.
Laboratorio de microprocesadores I Docente: Ing. José Arturo Marín Thames
//CONEXIONES DE LA PANTALLA LCD
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// FIN DE LAS CONEXIONES DEL LCD
char txt1[] = "Buenas tardes";
char txt2[] = "estudiantes";
char txt3[] = "Laboratorio de";
char txt4[] = "micro II";
char i;
void Move_Delay() { // Función usada para mover el texto
Delay_ms(500);
}
void main(){
ADCON1 = 15; //pines del PIC18 todos discretos
CMCON = 7; //desactivar comparador ADC
INTCON = 0; //desactivar interrupciones
TRISB = 0;
Lcd_Init(); // Inicializar el Lcd
Lcd_Cmd(_LCD_CLEAR); // limpiar display
Lcd_Cmd(_LCD_CURSOR_OFF); // apagar el cursor
Lcd_Out(1,6,txt3); // escribir texto en la primera línea
Lcd_Out(2,6,txt4); // escribir texto en la segunda línea
Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // limpiar display
Lcd_Out(1,1,txt1); // escribir texto en la primera línea
Lcd_Out(2,5,txt2); // escribir texto en la segunda línea
Delay_ms(2000);
Laboratorio de microprocesadores I Docente: Ing. José Arturo Marín Thames
// Moving text
for(i=0; i<4; i++) { // Mover el texto a la derecha 4 posiciones
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
while(1) {
for(i=0; i<8; i++) { // Mover texto a la izquierda 7 veces
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}
for(i=0; i<8; i++) { // Mover texto a la derecha 7 veces
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
}
}
El esquemático para la prueba del programa es el siguiente:
3.2 Probar el siguiente código que maneja la pantalla LCD y un teclado conectados al
PIC18.
// conexiones LCD
sbit LCD_RS at LATB4_bit;
sbit LCD_EN at LATB5_bit;
sbit LCD_D4 at LATB0_bit;
sbit LCD_D5 at LATB1_bit;
sbit LCD_D6 at LATB2_bit;
sbit LCD_D7 at LATB3_bit;
Laboratorio de microprocesadores I Docente: Ing. José Arturo Marín Thames
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
unsigned short tecla;
char tecla_str[4]; //código tecla como código ASCII
char keypadPort at PORTD; //puerto de conexiones al teclado matricial
void main(){
ADCON1 =15;
CMCON =7;
INTCON =0;
Keypad_Init();
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"Tecla:");
bucle:
tecla=0;
while (tecla==0)
{
tecla=Keypad_Key_Click();
}
ByteToStr(tecla,tecla_str);
Lcd_Out(1,7,tecla_str);
goto bucle;
}
Laboratorio de microprocesadores I Docente: Ing. José Arturo Marín Thames
4. Trabajo de laboratorio
Primera firma: Realizar un programa que reciba dos valores positivos (menores a 256)
por el teclado y luego muestre en el LCD el resultado de las siguientes operaciones
seleccionadas por dos teclas:
1. Promedio de los dos números (n1+n2)/2.
2. Diferencia de ambos números (n1 – n2)
Segunda firma: Realizar un programa para que el PIC18 funcione como una calculadora.
Las teclas A, B, C y D serán asignadas a las operaciones + - x /.