Guía rápidalcd y teclado

20
GUÍA RÁPIDA PARA TRABAJAR CON LA LCD Y EL TECLADO PROF. LUIS ZURITA

Transcript of Guía rápidalcd y teclado

Page 1: Guía rápidalcd y teclado

GUÍA RÁPIDA PARA TRABAJAR CONLA LCD Y EL TECLADO

GUÍA RÁPIDA PARA TRABAJAR CONLA LCD Y EL TECLADO

PROF. LUIS ZURITA

Page 2: Guía rápidalcd y teclado

Pantalla LCD• Conexionado:

El conexionado de la LCD viene dado en el driver respectivo, enel 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

Page 3: Guía rápidalcd y teclado

Pantalla LCD

Paso 1. Incluir el driver de la LCD en la zona dedeclaraciones:

#include <LCD.c>

Si se va a trabajar con teclado y LCD, especificar elpuerto con el cual se trabajará cada periféricoantes de la inclusión del driver:antes de la inclusión del driver:

#define use_PORTD_LCD true

#include <LCD.c>

Paso 2. Después de configurar los puertos comoentradas o salidas con los registros TRIS, se debeinicializar la LCD=

lcd_init ( );

Prof. Luis Zurita Microcontroladores II

Page 4: Guía rápidalcd y teclado

Pantalla LCD

Ejemplo:#include <16f877.h>#fuses XT,NOWDT,NOLVP#use delay (clock=4000000)#BYTE TRISD=0x88#BYTE PORTD=0x08#BYTE PORTD=0x08#define use_PORTD_LCD true#include <LCD.c>

void main (){TRISD=0b00000000;lcd_init();

Prof. Luis Zurita Microcontroladores II

Page 5: Guía rápidalcd y teclado

Paso 3. Crear mensaje estático

• Tipo funciónvoid MENSAJE( ) {lcd_gotoxy (1,1); //Línea 1printf (lcd_putc, “AQUI COLOCO”);lcd_gotoxy (1,2); //Línea 2printf (lcd_putc, “MI MENSAJE”);printf (lcd_putc, “MI MENSAJE”);}

Luego durante el programa se llama a la funcióncreada. Ejemplo:BOMBA=0;MENSAJE ( );BOMBA=1;

Nota= los mensajes en cada línea no deben pasarde la cantidad de caracteres que tiene la lcd, en elcaso de una LCD 16x2, el número de caracteres porlínea es de 16. Si es mayor a este número setruncará a 16.Prof. Luis Zurita Microcontroladores II

Page 6: Guía rápidalcd y teclado

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

Page 7: Guía rápidalcd y teclado

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

• Se recomienda limpiar la LCD antes de mostrar unmensaje diferente al que se esté mostrando, paraborrar cualquier carácter residual del mensajeanterior. Se puede limpiar con \f en el nuevomensaje de la primera línea. (El símbolo \ seobtiene con Alt+92). Ejemplo: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

Page 8: Guía rápidalcd y teclado

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

printf (lcd_putc, “LOCAL=%Lu”,CONTA2);

Registros a mostrar

printf (lcd_putc, “LOCAL=%Lu”,CONTA2);

}

Define el formato según se hayadeclarado el registro a mostrar. Ejemplo:%d= Registro tipo entero con signo%Ld= Registro tipo entero largo con signo

Prof. Luis Zurita Microcontroladores II

Page 9: Guía rápidalcd y teclado

Paso 3. Crear mensaje dinámico

void mostrar(){

lcd_gotoxy(1,1);

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

lcd_gotoxy(1,2);

printf(lcd_putc,"%02u/%02u / %02u",diasem,mes,annio);

Registros a mostrar

printf(lcd_putc,"%02u/%02u / %02u",diasem,mes,annio);

}

Define el formato según se hayadeclarado el registro a mostrar. Ejemplo:%u= Registro tipo entero sin signo02 indica la cantidad de dígitos que sevan a mostrar.

Prof. Luis Zurita Microcontroladores II

Page 10: Guía rápidalcd y teclado

TECLADO MATRICIAL

• Conexionado:El conexionado del teclado viene dado en eldriver respectivo, en el caso de utilizar un teclado4x3 con el driver ˂KDB.c˃ tenemos:

#define COL0 (1 << 5)#define COL1 (1 << 6)#define COL2 (1 << 7)#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

Page 11: Guía rápidalcd y teclado

TECLADO MATRICIAL• Conexionado:

El conexionado del teclado viene dado en el driver respectivo, en el caso deutilizar un teclado 4x4 con el driver ˂KDB4x4d.c˃, facilitado en clasestenemos:

#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 elcomponente KEYPAD-SMALLCALC, nos puede ayudar a simular el teclado4x4. Independientemente de cómo sea colocado, se deben respetar lasconexiones 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ánal orden mostrado en el recuadro azul.

Prof. Luis Zurita Microcontroladores II

Page 12: Guía rápidalcd y teclado

TECLADO MATRICIAL

Paso 1. Incluir el driver del teclado en la zona dedeclaraciones:#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 conel cual se trabajará cada periférico antes de la inclusión deldriver:#define use_PORTD_LCD true#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 yRB3-RB0 como salidas y habilitar las resistencias “Pull-Ups”:TRISB=0xF0;port_b_pullups(TRUE);

Prof. Luis Zurita Microcontroladores II

Page 13: Guía rápidalcd y teclado

TECLADO MATRICIAL

Paso 3. Después de configurar los puertos comoentradas o salidas con los registros TRIS, y lasresistencias “Pull-Ups”, se debe inicializar elteclado=

kbd_init ( );

Paso 4. Leer el teclado y obtener la teclapulsada.

Con la función kbd_getc ( ); logramosfácilmente esta tarea:

TECLA= kbd_getc ( );

Prof. Luis Zurita Microcontroladores II

Page 14: Guía rápidalcd y teclado

TECLADO MATRICIAL

Paso 4. Leer el teclado y obtener la tecla pulsada.

TECLA= kbd_getc ( );

El registro “TECLA” se debe declarar tipo char al iniciodel programa.

Puede declararse un registro adicional, por ejemplo xtipo int o byte para obtener la tecla en decimal, previaconversión:conversión:

x= TECLA – 48, con lo que se convierte el dato delcódigo ASCII a decimal.

Es importante destacar que esta función kbd_getc(); noaplica la interrupción RB4-RB7, sino que realiza unescaneo de las teclas, por lo que se debe estarllamando cada vez que se desee leer el teclado.

Prof. Luis Zurita Microcontroladores II

Page 15: Guía rápidalcd y teclado

#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

Ejemplo 1. Leer Tecla y mostrarla en 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 4x3int x; //Variable para guardar la tecla en decimalChar k; // Variable para guardar la tecla en caráctervoid 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

Page 16: Guía rápidalcd y teclado

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){

Ejemplo 1. Leer Tecla y mostrarla en LCD

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

Page 17: Guía rápidalcd y teclado

Ejemplo 1. Leer Tecla y mostrarla en LCD

Prof. Luis Zurita Microcontroladores II

Page 18: Guía rápidalcd y teclado

#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

Ejemplo 2. Leer Tecla y mostrarla en 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 4x4int x; //Variable para guardar la tecla en decimalChar k; // Variable para guardar la tecla en caráctervoid 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

Page 19: Guía rápidalcd y teclado

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){

Ejemplo 2. Leer Tecla y mostrarla en LCD

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

Page 20: Guía rápidalcd y teclado

Ejemplo 2. Leer Tecla y mostrarla en LCD

Nota: El driver KBD4x4d.c lo puedes descargaren la carpeta de archivos del blog.

Prof. Luis Zurita Microcontroladores II