C2 - Teclado Matricial
MicrocontroladorPICPIC16F887MPLABX-XC8SimulIDE 2021-05-13Teclado 4x4
A interface com o operador popularmente denominada Interface Homem Máquina(IHM), costumeiramente possui a dupla display LCD e teclado matricial.
Objetivo
Implementar uma interface com um teclado matricial 4x4 para entrada de dados.
1. Circuito (Hardware)
Figura 1.1: Teclado Matricial 4x4 |
---|
![]() |
2. Programa (Firmware)
Figura 2: Árvore de diretório do projeto |
---|
![]() |
Estrutura do programa
Programa principal
/*
* File: main.c
* Author: josewrpereira
*
* Created on 15 de Agosto de 2020, 21:18:21
*
* -------------------------------------------------
* MAPA DE ENTRADAS E SAIDAS
* -------------------------------------------------
* Pinos |nº | Conexão
* ---------|-------|-------------------------------
* RD2 |21 | LCD_RS
* RD3 |22 | LCD_EN
* RD4 |27 | LCD_D4
* RD5 |28 | LCD_D5
* RD6 |29 | LCD_D6
* RD7 |30 | LCD_D7
* ---------|-------|-------------------------------
* RB0 |33 | Teclado Saída L0
* RB1 |34 | Teclado Saída L1
* RB2 |35 | Teclado Saída L2
* RB3 |36 | Teclado Saída L3
* RB4 |37 | Teclado Entrada C0
* RB5 |38 | Teclado Entrada C1
* RB6 |39 | Teclado Entrada C2
* RB7 |40 | Teclado Entrada C3
* -------------------------------------------------
* -------------------------------------------------
*/
#include "config.h"
#include <xc.h>
#include "delay.h"
#include "dispLCD4vias.h"
#include "teclado.h"
void main(void)
{
char str[] = "Tecla ";
dispLCD_init();
teclado_init();
while( 1 )
{
str[6] = teclado_scan();
if(str[6]==0)
str[6] = ' ';
dispLCD(0,0, str );
}
return;
}
Inclusão de bibliotecas
/*
* File: teclado.c
* Author: josewrpereira
*
* Created on 15 de Agosto de 2020, 21:21
*
* -------------------------------------------------
* MAPA DE ENTRADAS E SAIDAS
* -------------------------------------------------
* Pinos |nº | Conexão
* ---------|-------|-------------------------------
* RB0 |33 | Teclado Saída L0
* RB1 |34 | Teclado Saída L1
* RB2 |35 | Teclado Saída L2
* RB3 |36 | Teclado Saída L3
* RB4 |37 | Teclado Entrada C0
* RB5 |38 | Teclado Entrada C1
* RB6 |39 | Teclado Entrada C2
* RB7 |40 | Teclado Entrada C3
* -------------------------------------------------
*/
#include <xc.h>
#define NUM_COL 4
#define NUM_LIN 4
#define L0_MASK 0x01
#define C0_MASK 0x10
void teclado_init( void )
{
TRISB = 0xF0;
ANSELH = 0x00;
OPTION_REGbits.nRBPU = 0;
WPUB = 0xFF;
PORTB = 0xFF;
}
const char tecladoMatriz[4][4] = { {'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'} };
unsigned char teclado_scan( void )
{
unsigned char aux = 0;
unsigned char l,c;
for( l=0; l<NUM_LIN; l++ )
{
PORTB = ~(L0_MASK << l);
for( c=0; c<NUM_COL; c++ )
{
if( ~PORTB & (C0_MASK<<c) )
aux = tecladoMatriz[l][c];
}
}
return( aux );
}
Agora é a sua vez!
Crie o seu projeto, copie o código, execute-o, procure os erros, arrume-os, seja resiliente, leia novamente a explicação, busque outras fontes, pergunte, responda, explique, faça alterações conscientes no código, explore, divirta-se.
Ficou com alguma dúvida, entre em contato.
Bom trabalho!
« C2 - Display LCD 4 vias « C2 - Teclado 4x4 » »