Ir ao conteúdo
  • Cadastre-se

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×