Ir ao conteúdo
  • Cadastre-se

Varredura em teclado matricial (Pic+ccs)


cesarlg

Posts recomendados

Ola pessoal,como nunca mexi com teclado a questao de logica de leitura e organizaçao na programacao ta me confundindo.. ta...consegui fazer o scan do teclado e jogar no lcd para comparaçao atraves de um if. agora tentei de algumas formas fazer entrar em um "submenu" para alterar e gravar em eeprom, isso que seria uma senha

if(d_1 == 9 && d_2 == 0 && d_3 == 3 && d_4 == 2 && d_5 ==1 )
qual o caminho a seguir? ja tentei de algumas formas sem exito, anexo um trecho de meu While(true)




int d_1 = 0;
int d_2 = 0;
int d_3 = 0;
int d_4 = 0;
int d_5 = 0;





while(j == 0)
{
printf (lcd_putc, "\f CASA \n DIGITE A SENHA" );

scan1();
scan2();
scan3();
scan4();

}
BIP();
printf (lcd_putc, "\f SENHA \n * ");

d_1 = i;

delay_ms(100);
j = 1;


while(j == 1)
{
printf (lcd_putc, "\f SENHA \n * ");

scan1();
scan2();
scan3();
scan4();
}
BIP();
printf (lcd_putc, "\f SENHA \n ** ");

d_2 = i;
delay_ms(200);
j = 2;


while(j == 2)
{
printf (lcd_putc, "\f SENHA \n ** ");

scan1();
scan2();
scan3();
scan4();
}
BIP();
printf (lcd_putc, "\f SENHA \n *** ");

d_3 = i;
delay_ms(200);
j = 3;

while(j == 3)
{
printf (lcd_putc, "\f SENHA \n *** ");

scan1();
scan2();
scan3();
scan4();
}
BIP();
printf (lcd_putc, "\f SENHA \n **** ");

d_4 = i;
delay_ms(200);
j = 4;

while(j == 4)
{
printf (lcd_putc, "\f SENHA \n **** ");

scan1();
scan2();
scan3();
scan4();
}
BIP();
printf (lcd_putc, "\f SENHA \n ***** ");

d_5 = i;
delay_ms(200);
j = 5;

if( j == 5 )
{

if(d_1 == 9 && d_2 == 0 && d_3 == 3 && d_4 == 2 && d_5 ==1 )
{
printf (lcd_putc, "\f Bem vindo cesar ");
printf (lcd_putc, "\n Senha correta ");
ABRIR();
delay_ms(100);
i = 0;
j = 0;
}


else
{
printf (lcd_putc, "\fSenha incorreta");
printf (lcd_putc, "\nTente novamente");
BIP();
delay_ms(100);
BIP();
delay_ms(100);
BIP();
delay_ms(100);
BIP();
delay_ms(100);
BIP();
delay_ms(100);
BIP();
delay_ms(100);
i = 0;
j = 0;
}
d_1 = 0;
d_2 = 0;
d_3 = 0;
d_4 = 0;
d_5 = 0;

}
}}
  {

Link para o comentário
Compartilhar em outros sites

Olá, amigo...

olhando a primeira vista me parece que seu código não está guardando o valor digitado em nenhuma variável... a minha sugestão seria você usar um driver do ccs chamado kbd.c. Você vai encontrar muitos exemplos de como usá-lo.

recomendo você seguir esse projeto, tem tudo o que você precisa e mais um pouco... talvez algumas coisas que ele usou no código possa parecer um pouco complicado a primeira vista, mas vale a pena você estudar os detalhes para obter mais conhecimento do hardware e da linguagem c...

segue link:

http://blogdoastorga.wordpress.com/2012/05/16/fazendo-um-controle-simples-de-acesso-usando-o-pic-16f877a/

boa sorte..

Link para o comentário
Compartilhar em outros sites

Obrigado amigo.. li td conteudo.. o programa funciona perfeitamente, mas sinceramente nao entendi o codigo q me parece ser um pouco mais evoluida do ponto de vista do meu conhecimento.. Como sou leigo nao consegui fazer as modificaçoes necessarias.. ainda peço ajuda para complementar, ou seguir a partir no meu codigo ou então preciso de uma "traducao " deste do link..

aguardo t+

Link para o comentário
Compartilhar em outros sites

olá, cesar...

eu acredito que você não irá precisar de tantas de linhas de código para ler a senha digitada pelo usuário... vou tentar fazer um exemplo, não sei se vai servir pra você...


#define TamanhoSenha 5 //defina aqui o tamanho da sua senha

/*declara um vetor de char, como variavel global/*
char SenhaUsuario[TamanhoSenha] = {'1','2','3','4','5'};


/*
Funcao para comparar a senha digitada com a senha gravada
Entrada: Vetor de Char
Retorna 1 se o usuario digitar a senha certa e 0 se for errada
*/
int1 DigitaSenha(char *Senha)
{
char SenhaDigitada[TamanhoSenha]; //variavel local para o usuario digitar a senha
int i;

memset(&SenhaDigitada, 0x00, TamanhoSenha);
for(i=0; i<TamanhoSenha; i++) //loop para o usuario digitar todos os digitados da senha
{
while(SenhaDigitada[i] == 0x00) //aqui você esta aguardando o usuario digitar uma tecla
{
Senha[i] = kbd_getc();
}
}

for(i=0; i<TamanhoSenha; i++) //loop para comparar a senha digitada pelo usuario com a senha verdadeira
{
if(Senha[i] != SenhaDigitada[i]; //se houver algum caracter diferente da senha original retorna da funcao com valor false (0x00);
return false;

}
return true; //Se o usuario digitou a senha correta, retorna com um valor verdadeiro (0x01)
}

void main
{
//seu codigo

int1 ComparaSenha;

ComparaSenha = DigitaSenha(Senha);
if(ComparaSenha == 0)
printf (lcd_putc, "\n Senha correta ");
else
printf (lcd_putc, "\n Senha incorreta ");


}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!