C2 - Teclado Matricial

MicrocontroladorPICPIC16F887MPLABX-XC8SimulIDE

Teclado 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
circuito

2. Programa (Firmware)

Figura 2: Árvore de diretório do projeto
circuito

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 » »


Voltar