Ir ao conteúdo
  • Cadastre-se

Ligando e testando teclado no pic


madmaxalves77

Posts recomendados

Olá,

Preciso usar um teclado de telefone com um microcontrolador 16f877A. Sou novo na eletrônica. Estou programando em C, usando o CCS. Como devo ligar o teclado no pic? Meu teclado tem 8 fios. Sei que os fios significam linhas e colunas. Por exemplo, linha 1 e coluna1 ( cada um deles é um fio) quando altos representam o botão 1. O fio extra é o comum ou o terra? Tenho que colocar resistência no meu teclado pra ligá-lo no PIC? Como saber o valor da resistência a colocar?

Obrigado.

Link para o comentário
Compartilhar em outros sites

tecladomatricialdetelef.jpg

Esta configuração é conhecida como "Teclado Matricial" e esta é a ligação interna do teclado. Como você havia dito, há 8 fios e um extra, que é A MESMA TENSÂO DE ALIMENTAÇÂO DO MICROCONTROLADOR, provavalmente 5V. Os resistores são de 10k, externos, valor padrão, que serve simplesmente de pull-up; o valor não influencia. A única maneira de diferenciar os botões, nesta configuração, é injetar 0V numa coluna e 5V nas outras. Assim, quando um botão daquela coluna for pressionado, acusará bit 0. Se nenhum botão desta coluna for pressionado, troque a coluna com 0V até achar, ou não. Sendo assim, esta é a função:

unsigned int8 teclado (void){

output_low(col1);

output_high(col2);

output_high(col3);

output_high(col4);

delay_ms(10);

if(lin1==0){

return 0;

}else if(lin2==0){

return 0;

}else if(lin3==0){

return 0;

}else if(lin4==0){

return 0;

}

output_high(col1);

output_low(col2);

output_high(col3);

output_high(col4);

delay_ms(10);

if(lin1==0){

return 0;

}else if(lin2==0){

return 0;

}else if(lin3==0){

return 0;

}else if(lin4==0){

return 0;

}

output_high(col1);

output_high(col2);

output_low(col3);

output_high(col4);

delay_ms(10);

if(lin1==0){

return 0;

}else if(lin2==0){

return 0;

}else if(lin3==0){

return 0;

}else if(lin4==0){

return 0;

}

output_high(col1);

output_high(col2);

output_high(col3);

output_low(col4);

delay_ms(10);

if(lin1==0){

return 0;

}else if(lin2==0){

return 0;

}else if(lin3==0){

return 0;

}else if(lin4==0){

return 0;

}

return 255;

}

O return equivale à tecla que foi pressionada. Eu não conheço o teclado específico que você possui, então eu coloquei tudo zero para que você possa alterar. NÃO altere o zero por #, por exemplo, porque não funciona. Coloque qualquer outro número no lugar. o return 255 equivale a nenhuma tecla pressionada.

Para utilizar esta função, crie uma variável tipo unsigned int8 nome_da_variável e escreva esta linha dentro da main:

nome_da_variável=teclado();

A variável assumirá o valor do return, que é qual botão foi pressionado.

Qualquer dúvida fale.

Link para o comentário
Compartilhar em outros sites

Meu caro,

estou tentando fazer exatamente o que você postou. O pessoal me passou os seguintes links sobre o assunto:

Algumas referências:

http://orion.ipt.pt/projecto/trinco9...matricial.html

http://correrianaesquina.wikidot.com/interface-8051

http://forum.clubedohardware.com.br/...53#post3659653

em inglês:

http://www.google.com.br/search?hl=p...esquisar&meta=

__________________

Francisco

http://www.projekit.com

Por favor, se você conseguir alguma coisa entre em contato porque estou com o mesmo problema.

Abraços.

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!