Ola pessoal, não manjo muita de progrmação, mas estou fazendo um jogo e queria ajuda, quem puder ajudar agradeço.
tenho esse código abaixo, p que quero é o seguinte: quando eu digitar por exemplo a tecla 1, que no código corresponde o 0x01, que guarde esse numero, depois digito a segunda tecla, por exemplo a tecla 2 (0x02) e depois que digitei essas duas teclas, uso uma outra que sera o enter, tipo a tecla 6(0x06) e ai faz o que tá dentro do while, a parte que vai dentro do while que é acender os leds tranquilo, mas como faço pra guardar as duas teclas digitadas e finalizar com o enter, que no meu caso é a tecla 6? o teclado tá lendo certinho os numeros ja testei 1 a 1, o problema é que não sei como fazer pra guardar as duas teclas digitadas, agradeço se alguém puder me ajudar. na realidade, as primeiras 8 teclas serão Letras e o resto será numero de 1 a 5 e o 6 vai ser o enter, td bem, isso não muda nada porque o correspondente no progmen é o mesmo.
//==================================================================================== //
// LEITURA DE UM TECLADO 4x4 //
//==================================================================================== //
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
//Define macros
#define set_bit(adress,bit) (adress|=(1<<bit))
#define clr_bit(adress,bit) (adress&=~(1<<bit))
#define tst_bit(adress,bit) (adress&(1<<bit))
#define MAY_DELAY 5000
#define LIN0 PC0
#define COL0 PD0
//matriz com as informações para decodificação do teclado
const unsigned char teclado[4][4] PROGMEM = {{0x01, 0x02, 0x03, 0x0F},
{0x04, 0x05, 0x06, 0x0E},
{0x07, 0x08, 0x09, 0x0D},
{0x0A, 0x00, 0x0B, 0x0C}};
unsigned char nr;
//------------------------------------------------------------------------------------
//Sub-rotina para leitura do teclado
//------------------------------------------------------------------------------------
unsigned char ler_teclado()
{
unsigned char n, j, tecla, linha;
for(n=0;n<4;n++)
{
clr_bit(PORTB,n); //apaga o bit da coluna (varredura)
_delay_ms(10); //atraso para uma varredura mais lenta
linha = PINB>>4; //lê o valor das linhas
for(j=0;j<4;j++) //testa as linhas
{
if(!tst_bit(linha,j)) //se foi pressionada alguma tecla, decodifica
tecla = pgm_read_byte(&teclado[j][n]);
}
set_bit(PORTB,n); //seta o bit zerado anteriormente
}
return tecla; //retorna o valor pressionado
//se nenhuma tecla for pressionada, tecla tem o ultimo valor lido
//inicialização por conta do usuário
}
//------------------------------------------------------------------------------------
int main()
{
DDRB = 0b00001111; //definições das entradas e saídas para o teclado
DDRC = 0b11111111; //definições das entradas e saídas LINHAS LEDS 5
DDRD = 0b11111111; //definições das entradas e saídas COLUNAS LEDS 8
PORTB= 0xFF; //habilita os pull-ups da porta B
PORTC= 0xFF; //habilita os pull-ups da porta C LINHAAAAAAAAAAAAA
PORTD= 0x00; //habilita os pull-ups da porta B COLUNAAAAAAAAAAA
while(1)
{
nr = ler_teclado(); //Lê constantemente o teclado
//Sequencia do A
if (nr==0X01)
{
clr_bit(PORTC,LIN0);
set_bit(PORTD,COL0);
_delay_ms(MAY_DELAY);
clr_bit(PORTD,COL0);
}
}
}