Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio N°14
TECLADO MATRICIAL Y LCD 16X2 CON
XC8 PIC18F4550
Integrantes:
2023 - 1
Lab. N° 14 TECLADO MATRICIAL Y LCD 16X2 CON XC8 PIC18F4550
Introducción
Teclado Matricial 4x4
El funcionamiento básico del teclado matricial consiste en rastrear la unión entre una fila
y una columna, mediante un algoritmo que descifra cual tecla fue presionada.
Preparación
Para la realización de este laboratorio se requiere la lectura previa de la información proporcionada
para el curso, como el texto y el manual del fabricante.
Equipos y Materiales
● Computadora
● Software de desarrollo MPLAB X IDE Última versión.
● Proyector multimedia
● Texto del curso
● Manual del fabricante Datasheet
Seguridad
Trabajar con Seguridad evita que las personas sufran daños, y provee un ambiente satisfactorio de
trabajo.
1. Al ingresar, inspeccione:
Las vías de acceso.
Orden y limpieza.
/*
File: teclado_lib.c
Author: Ing. César Ciriaco Martinez
fila1--> RB0--> 1 2 3 A
fila2--> RB1--> 4 5 6 B
fila3--> RB2--> 7 8 9 C
fila4--> RB3--> * 0 # D
| | | |
RB4 RB5 RB6 RB7
COL1 COL2 COL3 COL4
*/
#include <xc.h>
#include "fusibles.h"
#include "teclado_lib.h"
void Teclado_Init(void){
LATB0=1;LATB1=0;LATB2=1;LATB3=1;
__delay_us(100);
if(RB4==0 && RB5==1 && RB6==1 && RB7==1){letra=4;}
if(RB4==1 && RB5==0 && RB6==1 && RB7==1){letra=5;}
if(RB4==1 && RB5==1 && RB6==0 && RB7==1){letra=6;}
if(RB4==1 && RB5==1 && RB6==1 && RB7==0){letra=11;}
LATB0=1;LATB1=1;LATB2=0;LATB3=1;
__delay_us(100);
if(RB4==0 && RB5==1 && RB6==1 && RB7==1){letra=7;}
if(RB4==1 && RB5==0 && RB6==1 && RB7==1){letra=8;}
if(RB4==1 && RB5==1 && RB6==0 && RB7==1){letra=9;}
if(RB4==1 && RB5==1 && RB6==1 && RB7==0){letra=12;}
LATB0=1;LATB1=1;LATB2=1;LATB3=0;
__delay_us(100);
if(RB4==0 && RB5==1 && RB6==1 && RB7==1){letra=13;}
if(RB4==1 && RB5==0 && RB6==1 && RB7==1){letra=0;}
if(RB4==1 && RB5==1 && RB6==0 && RB7==1){letra=14;}
if(RB4==1 && RB5==1 && RB6==1 && RB7==0){letra=15;}
return letra;
}
pá g. 4 Ing. César Ciriaco Martinez
Lab. N° 14 TECLADO MATRICIAL Y LCD 16X2 CON XC8 PIC18F4550
Programa principal:
/*
* File: teclado_lcd_1.c
* Author: Ing. César Ciriaco Martinez
*/
#include <xc.h>
#include <stdio.h> // Standard I/O - required for printf() function
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h> //pow(numero,exponente) pow(2,3) sqrt(4)
#include "fusibles.h"
#include "teclado_lib.h"
#include "xlcd.h"
uint8_t tecla_pulsada=0;
char string_tecla[5];
void main(void) {
TRISD=0;
Teclado_Init();
XLCDInit();
XLCDgotoXY(0,0);
putrsXLCD("TECLA PULSADA");
XLCDgotoXY(1,0);
putrsXLCD(" --> : ");
__delay_ms(1000);
while(true){
tecla_pulsada = Teclado_getc();
__delay_ms(100);
if(tecla_pulsada !='0')
{ sprintf(string_tecla,"%u",tecla_pulsada);
XLCDgotoXY(1,7);
putsXLCD(" ");
XLCDgotoXY(1,7);
putsXLCD(string_tecla);
__delay_ms(100);
}
}
return;
}
Aplicación de lo aprendido:
void InitPort(void)
Implementar
{
un programa en C, en el cual en la pantalla LCD 16X2 se pueda escoger las siguientes 3
funciones:
ADCON1= 0x0F; // Configurando el Puerto B como I/O Digital
TRISD = 0x00; // Configurando todo el Puerto D como salida Digital para el LCD
1.} SERVOMOTOR:
El movimiento de ángulo de un servomotor, controlado por el Teclado matricial 4x4.
unsigned char bateria[8]={0x0E,0x0A,0x1B,0x11,0x11,0x1F,0x1F,0x00};
unsigned char campana[8]={0x04,0x0E,0x0E,0x0E,0x0E,0x1F,0x04,0x00};
2. MOTOR DC:
unsigned char pacman[8]={0x04,0x0E,0x1B,0x1C,0x1F,0x0E,0x04,0x00};
Insertar desde el teclado el % de duty cycle para controlar un motor dc a 4Khz.
unsigned char carita[8]={0x00,0x0A,0x00,0x11,0x0E,0x00,0x00,0x00};
void main() {
InitPort();
XLCDInit();
XLCD_WriteChr_CGRAM(&bateria,0); //datos de bateria en la zona 0 de la CGRAM
XLCD_WriteChr_CGRAM(&campana,1); //datos de campana en la zona 1 de la CGRAM
XLCD_WriteChr_CGRAM(&pacman,2); //datos de pacman en la zona 2 de la CGRAM
XLCD_WriteChr_CGRAM(&carita,3); //datos de carita en la zona 2 de la CGRAM
XLCDgotoXY(0,0); //posición 0,0 del LCD
putcXLCD('@'); //imprime un '@' en esa posición
XLCDgotoXY(0,2); //posición 0,2 del LCD
putsXLCD("car. especiales"); //imprime "car. especiales" en esa posición
XLCDgotoXY(1,0); //posición 1,0 del LCD
putcXLCD(0); // Codigo de la zona 0 de la memoria CGRAM que es la bateria
XLCDgotoXY(1,2); //posición 1,2 del LCD
putcXLCD(1); // Codigo de la zona 1 de la memoria CGRAM que es la campana
XLCDgotoXY(1,4); //posición 1,4 del LCD
putcXLCD(2); // Codigo de la zona 2 de la memoria CGRAM que es el pacman
XLCDgotoXY(1,6); //posición 1,6 del LCD
putcXLCD(3); // Codigo de la zona 3 de la memoria CGRAM que es la carita
while(true)
{
}
}}
CARACTERES MOSTRADOS
#include <xc.h>
#include <stdio.h> // Standard I/O - required for printf() function
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h> //pow(numero,exponente) pow(2,3) sqrt(4)
#include "fusibles.h"
#include "teclado_lib.h"
#include "xlcd.h"
void escribir(void);
uint8_t tecla_pulsada=0;
char string_tecla[5]; //array caracter que contiene 5 indices
// NUMERO DE DNI =75348142 (AMAYA)
int clave3[8]={7,5,3,4,8,1,4,2}; //array entero que contiene 8
int contra[8]; //array entero que contiene 8 indices
int i=0, conteo=0; //variables enteras
void main(void) {
TRISD=0;
Teclado_Init(); //inicializamos el teclado
XLCDInit(); //inicializamos el LCD
XLCDgotoXY(0,0); //movemos a la posición 0,0 en el LCD
putrsXLCD("INGRESE"); //imprimer "INGRESE" en esa posición
XLCDgotoXY(1,0); //movemos a la posición 1,0 en el LCD
putrsXLCD(" --> "); //imprimer " --> " en esa posición
__delay_ms(1000); //delay de 1 segundo
while(true){
tecla_pulsada = Teclado_getc(); //tecla_pulsada obtiene el valor de
//Teclado_getc
__delay_ms(100); //delay de 100ms
if(tecla_pulsada !='0') //solo se ejecuta si tecla_pulsada es diferente de '0'
{
contra[i]=tecla_pulsada; //contra[0]=1, contra[1]=2, contra[2]=3
conteo++; //conteo aumenta su valor en +1
i++; //i aumenta su valor en +1
escribir(); //llamamos a escribir();
}