Ir ao conteúdo
  • Cadastre-se

Teclado_matriz


Posts recomendados

Olá amigos, gostaria de tirar uma duvida, atualmente estou tentando fazer um teclado matriz.

 

Eu fiz o seguinte procedimento, configurei as coluna como saída e as linhas como entrada, sendo assim, logo em seguida coloquei a coluna 1 um em modo pulsante liguei direto na linha 1, porém o microcontrolador não reconhece essa transição, ele só reconhece quando deixo a coluna 1 ligada de forma direta.

 

veja o exemplo:

FOTO.png

/*
 * File:   Main.c
 * Author: lucas
 *
 * Created on 12 de Outubro de 2016, 17:40
 */

#include <stdio.h>
#include <stdlib.h>
#include <pic16f628a.h>
#include <xc.h>


// PIC16F628A Configuration Bit Settings

// 'C' source line config statements

// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = ON       // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
#pragma config BOREN = OFF       // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)


//Definição para tempo
#define _XTAL_FREQ 4000000         // cristal de 4 Mhz
#define delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))
#define delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))

//Definição para colunas  do teclado
#define X1 PORTAbits.RA0
#define X2 PORTAbits.RA1
#define X3 PORTAbits.RA2
#define X4 PORTAbits.RA3

//Definições para linha do teclado
#define Y1 PORTBbits.RB4
#define Y2 PORTBbits.RB5
#define Y3 PORTBbits.RB6
#define Y4 PORTBbits.RB7

void bank(char num);


int main()
{
    
    bank(1);
    TRISA = 0x00;
    TRISB = 0b11110000;
    
    bank(0);
    CMCON = 0x07;       //Desable CCP
    PORTB = 0x00;
    PORTA = 0x00;
    
 
    while(1)
    {
         X1 = 1;
         delay_ms(1000);
         X1 = 0;
         delay_ms(1000);
         
        if(X1 == 1 && Y1 == 1)
        {
            PORTBbits.RB0 = 1;
        }
     
    }
    
}


void bank(char num)
{
    //Banco 0
    if(num == 0)
    {
        RP0 = 0, RP1 = 0;
    }
    //Banco 1
    else if(num == 1)
    {
        RP0 = 0, RP1 = 1;
    }
    //Banco 2
    else if(num == 2)
    {
        RP0 = 1, RP1 = 0;
    }
    //Banco 3
    else if(num == 3)
    {
        RP0 = 1, RP1 = 1;
    }
}

adicionado 48 minutos depois
47 minutos atrás, Lucas Pereira de Souza disse:

X1 = 1;
         delay

kkkkkkkkkk, descobri o erro, foi um coisa tão besta que fiquei com vontade de dar um tiro na minha cabeça.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

assim você mata sua vontade. E se arrependimento matasse, o suicida morreria duas vezes! (c).

 

Seguinte digito on line mas veja uma maneira de se ler um teclado 4x4 com um port
 

unsigned char tecla()
{
unsigned char tec;
TRISB=0b00001111;
PORTB=0b11110000;
tec=PORTB;
TRISB=0b11110000;
PORTB=0b00001111;
tec|=PORTB;
return tec;
}

Ou algo do gênero. A ideia é fazer um nibble como saída e capturar no outro que é entrada e depois somar os dois

Como disse digitei online. Se eu achar que devo , algum dia faço alguma simulação e corrijo se for o caso. Se você achar que deve, fique a vontade...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...