Ir ao conteúdo

Outro Teclado matricial 4x4, escrever sequencialmente <>


Ir à solução Resolvido por .if,

Posts recomendados

Postado

olá, estou recém aprendendo c, recebi  um código praticamente pronto, faltando apenas configurar um teclado matricial, vou botar o que já tenho aqui que consegui com ajuda, o que eu queria era fazer uma sequencia das teclas, por exemplo, eu aperto o 1, ele leva ao display o 1, quando clico outra tecla ele somente substitui no display, porém gostaria de escrever ''132" por exemplo, se alguém puder me ajudar agradeço.

void teclado_matricial(void)
{
    port_b_dir.bit_2=input;
    
    port_b_dir.bit_3=input;
    
    port_b_dir.bit_4=input;
    
    port_b_dir.bit_5=input;
    
    
    port_e_dir.bit_6=output;
    port_e_out.bit_6=0;
    
    port_e_dir.bit_7=input;
    
    port_b_dir.bit_0=input;
    
    port_b_dir.bit_1=input;
    
    delay_us(100);
    
    if (port_b_in.bit_2==0) key_virgula=1;
    else key_virgula=0;
    
    if (port_b_in.bit_3==0) key_7=1;
    else key_7=0;
    
    if (port_b_in.bit_4==0) key_4=1;
    else key_4=0;
    
    if (port_b_in.bit_5==0) key_1=1;
    else key_1=0;
    
    
    port_e_dir.bit_7=output;
    port_e_out.bit_7=0;
    
    port_e_dir.bit_6=input;
    
    delay_us(100);
    
    if (port_b_in.bit_2==0) key_zero=1;
    else key_zero=0;
    
    if (port_b_in.bit_3==0) key_8=1;
    else key_8=0;
    
    if (port_b_in.bit_4==0) key_5=1;
    else key_5=0;
    
    if (port_b_in.bit_5==0) key_2=1;
    else key_2=0;
    
    
    port_b_dir.bit_0=output;
    port_b_out.bit_0=0;
    
    port_e_dir.bit_7=input;
    
    delay_us(100);
    
    if (port_b_in.bit_2==0) key_10k=1;
    else key_10k=0;
    
    if (port_b_in.bit_3==0) key_9=1;
    else key_9=0;
    
    if (port_b_in.bit_4==0) key_6=1;
    else key_6=0;
    
    if (port_b_in.bit_5==0) key_3=1;
    else key_3=0;
    
    
    port_b_dir.bit_1=output;
    port_b_out.bit_1=0;
    
    port_b_dir.bit_0=input;
    
    delay_us(100);
    
    if (port_b_in.bit_2==0) key_30k=1;
    else key_30k=0;
    
    if (port_b_in.bit_3==0) key_milhao=1;
    else key_milhao=0;
    
    if (port_b_in.bit_4==0) key_k=1;
    else key_k=0;
    
    if (port_b_in.bit_5==0) key_r=1;
    else key_r=0;
}



lcd_write("\r resistencia:  \n     ");

        lcd_write_value(1,resistencia);

        lcd_write(" ohms     ");
        
        e_resistor(resistencia);



        if (key_1) resistencia=1;
        if (key_2) resistencia=2;
        if (key_3) resistencia=3;
        if (key_4) resistencia=4;
        if (key_5) resistencia=5;
        if (key_6) resistencia=6;
        if (key_7) resistencia=7;
        if (key_8) resistencia=8;
        if (key_9) resistencia=9;

 

 

  • Membro VIP
  • Solução
Postado

Ler teclado matricial com mc é relativamente simples. Olha que algoritmo fofo que elaborei há alguns anos pra um 8051:

char tecla()
{
char tec;
P1=0b11110000;
tec=P1;
P1=0b00001111;
tec|=P1;
return tec;
}

Este mc não precisa configurar ports como entrada ou saída. Basta ler ou escrever. Pra pic e similares, aí sim tem que controlar o registro de direção. Sim já fiz isso mas to com preguiça de procurar ou digitar aqui e agora pra você.

Postado

Consegui resolver a questão da sequência usando alocações de memoria em série, mas agora surgiu um novo problema eu tenho uma tecla que é a "virgula", em C se usa ponto, ok, mas eu queria saber como faço pra virgula de fato separar as casas e tornar o número um decimal

Postado
Em 13/05/2021 às 09:32, .if disse:

Ler teclado matricial com mc é relativamente simples. Olha que algoritmo fofo que elaborei há alguns anos pra um 8051:


char tecla()
{
char tec;
P1=0b11110000;
tec=P1;
P1=0b00001111;
tec|=P1;
return tec;
}

Este mc não precisa configurar ports como entrada ou saída. Basta ler ou escrever. Pra pic e similares, aí sim tem que controlar o registro de direção. Sim já fiz isso mas to com preguiça de procurar ou digitar aqui e agora pra você.

 

Alguém aí falou em 8051? :wub:  Fiquei interessada!!!!!!!!!!

Não sei o que é isso (código) mas vou copiar para analisar e descobrir o que é.:huh: :hehehe:-_-:tw_thumbsup:

  • Haha 1
  • Membro VIP
Postado

Nunca fiz mas penso que o algoritmo seria algo como:

-vai entrando os números sequencialmente e multiplicando o anterior por 10 e somando ao atual

-após detectar a vírgula continua entrando dividindo o anterior por 10 e... ? ..?? 🤪 me deu um nó. Outra hora penso melhor.. ou não 😜

O importante é o sistema identificar a saída de seu teclado como dado numerico. Pesquise por calculadora em c

 

 

 

9 minutos atrás, Maria Cristina Oliveira disse:

Não sei o que é isso (código)

kk .. o cód sozinho é uma alma sem corpo. Pra simular você tem que conectar a matriz 4x4 nos 8 pinos do 51 ok? P.ex. horizontal nos 4MSB e vertical nos 4LSB. Qualquer dia eu testo também 😁

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!