Iniciação ao Teclado 4×4

Olá!

 

Um dispositivo bastante útil é o teclado, com um inconveniente, ocupa 1 porto inteiro ( 8 bits ).

Neste post, vou mostrar como utilizar um teclado para introduzir uma password de acesso a um dispositivo qualquer.

Este trabalho utiliza também o LCD para visualizarmos o que vai sendo digitado, omitiu-se caracteres que usam um teclado de 4×4, utilizando apenas os números de 0-9, mais 1 para OK e outro para LIMPAR.

A Logica do funcionamento consta na tabela anexa.

 

Linhas bits Colunas KEYPRESS Numero
0 4 0 0
0 4 1 1 9
0 4 2 2 8
0 4 3 3 7
1 4 0 4 ok
1 4 1 5 6
1 4 2 6 5
1 4 3 7 4
2 4 0 8 Limpa
2 4 1 9 3
2 4 2 10 2
2 4 3 11 1
3 4 0 12
3 4 1 13
3 4 2 14 0
3 4 3 15

 

– No video demonstrativo abaixo, consta a matrix do teclado, em outros teclados pode não corresponder a ordem dos números,por exemplo para obtermos o digito 1, é o mesmo que activar a 2 Linha e 3 Coluna, corresponde ao código 11 (decimal).

O que o programa faz é estar a “barrer” 4 bits das colunas sucessivamente, quando uma tecla é pressionada o estado desse bit altera o nível logico do bit da linha correspondente da matriz.

Disponibilizo o simulador em PROTEUS a pedido por e-mail, no entanto disponibilizo o código fonte para poderem praticar e colocar as vossas duvidas.

Divirtam-se!

/*
 * teclado.c
 *
 * Created: 02-12-2016 13:52:29
 *  Author: User
 */ 
#include <avr/io.h>
#include <inttypes.h>
#define F_CPU 8000000UL
#include <util/delay.h>

#include "teclado.h"
#define KEYPAD_PORT PORTB
#define KEYPAD_DDR   DDRB
#define KEYPAD_PIN   PINB

uint8_t GetKeyPressed()
{
	
	KEYPAD_PORT|= 0X0F;
	
	for(uint8_t i=0;i<4;i++)
	{
		KEYPAD_DDR&=~(0XFF);
		KEYPAD_DDR|=(0X80>>i);
		_delay_us(5);  		  	 		  //delay for port o/p settling
		for(uint8_t j=0;j<4;j++)
		{
			if(!(KEYPAD_PIN & (0X08>>j)))
			{
				return (j*4+i);
			}
		}
	}
	return 255; //Nenhum botão foi pressionado
}

/*
 * Codigo_Teclado.c
 *
 * Created: 02-12-2016 13:49:07
 *  Author: User
 */ 
#include <inttypes.h>
#include <avr/io.h>
#include "lcd_lib.h"
#include "user_interface.h"
#include "teclado.h"
#define F_CPU 8000000UL
#include <util/delay.h>
uint8_t BemVindo[] = "Bem Vindo!";



int main(void)
{	
	LCDinit();//init LCD bit, dual line, cursor right
	LCDclr();
	LCDGotoXY(3,0);
	LCDstring(BemVindo,10);
	uint16_t password;
    while(1)
    {
        password=InputNumber("Enter Password");

        //Match Password
        if(password==1234)
        {
	        LCDclr();
	        LCDstring("Access OK",9);
	        _delay_ms(200);
	        //Now wait for any key
	        while(GetKeyPressed()==255)
	        {
		        _delay_loop_2(10);
	        }
        }
    }
}
  • Aqui têm o video da simulação em Proteus.

1 comentário

    • Jonas on 30 Novembro, 2017 at 19:06
    • Responder

    Por favor pode disponibilizar-me o simulador Proteus?
    Agradecido.

Deixe uma resposta

Your email address will not be published.

www.000webhost.com