Ir ao conteúdo
  • Cadastre-se

teclado matricial com o pic 18f4520 no mplab


Posts recomendados

preciso fazer um teclado matricial cuja o LED1  pisque o numero de vezes que o numero do teclado for acionado (ex se aperta o numero 4 o led deve aperta 4 vezes e assim por diante)

devo usar o time 1 e não delay mais sempre que vou compilar ele aparece erro alguém ai pode me ajudar.egue meu código abaixo:

#include<adc.h>
#include <p18f4520.h>                        //Biblioteca do PIC18F4550
#include <stdlib.h>                            //Biblioteca geral C
#include <stdio.h>                            //Biblioteca geral entradas e saídas
#include <timers.h>                            //Adiciona a biblioteca de função de TIMER
#include <delays.h>

#pragma config OSC = HS                        //Oscilador a cristal 20MHz
#pragma config PWRT = ON                    //Power-UP timer enable
#pragma config WDT = OFF                    //Watchdog Timer disable
#pragma config PBADEN = OFF                    //RB0: RB4 I/O Digital
#pragma config LVP = OFF                    //ICSP. Low Power Programming Disable
#pragma config BOREN = SBORDIS                //Brown-out Reset (BOREN) Habilitado somente no hardware
#pragma config BORV = 1                        //tensão do BOR é 4,33v
#pragma config LPT1OSC = ON                    //TIMER1 programado para operar no modo low-power

char lcd[17];

#define S1 PORTBbits.RB0
#define S2 PORTCbits.RC0  
#define LED1 PORTDbits.RD1

#define col_1 PORTBbits.RB1
#define col_2 PORTBbits.RB2
#define col_3 PORTBbits.RB3
#define row_A PORTBbits.RB4
#define row_B PORTBbits.RB5
#define row_C PORTBbits.RB6
#define row_D PORTBbits.RB7
 
 void pulser (unsigned char number);              // Funçao para pulsar led1                                                            
unsigned char control = 0x01;

void ISR_alta_prioridade(void);             //Protótipo da função de interrupção

#pragma code int_alta = 0x08                //Vetor de interrupçao de alta prioridade
void int_alta(void)
{
    _asm goto ISR_alta_prioridade _endasm    //Desvia o programa para a função ISR_alta_prioridade
}
#pragma code
#pragma interrupt ISR_alta_prioridade
void ISR_alta_prioridade(void){
    
    //Note que o TMRL1 não é alterado o que permite que ele continue incremetando
    WriteTimer0(0X6C); // Carrega o valor de 40535 para dentro do registro TMR1H
    if(INTCONbits.TMR0IF){
        INTCONbits.TMR0IF=0;    //T0IE_bit = 0x01;
    }
    WriteTimer0(0X6C);
    if(col_1 && control ==1){             //coluna em nivel alto? control igual a 1?
       control = 0x02;                    //sim
       col_1 = 0x00;                      //apenas a coluna 2 em nivel baixo
       col_2 = 0x01;
       col_3 = 0x01; 
       if(!row_A){
        pulse(1); 
       }  
       if(!row_B){
        pulse(4);
     } 
       if(!row_C){
        pulse(7);
    }
       if(!row_D){
        pulse (11);
      }
    }
      if (col_2&& control ==2){          //coluna 2 em nivel alto? control igual a 2 ? 
          control = 0x03;                  //sim... 
        col_1 = 0x01;
        col_2 = 0x00;                   //apenas a coluna 2 em nivel baixo
        col_3 = 0x01;
     }   
        if(col_3 && control==3){       //coluna 3 em nivel alto? control igual a 1?
        control = 0x01;                //sim...
        col_1 = 0x01;
        col_2 = 0x01;
        col_3 = 0x00;                  //apenas coluna 3 em nivel baix0
     }    
}       
 
void pulse( unsigned char number){              //desenvolver a funçao
  unsigned char i;                             //variavel de interaçao
  for(i=0;i<number;i++){
      LED1 = 0x01;
      Delay10KTCYx(255);
      LED1 = 0x00;
      Delay10KTCYx(255); 
  }
}  
void main(void){
    CMCON = 0x07;

    OpenTimer0(    TIMER_INT_ON
                &T0_8BIT
                &T0_SOURCE_INT
                &T0_PS_1_128);

    INTCONbits.GIE = 1;
    INTCONbits.PEIE=1;
    INTCONbits.TMR0IE=1;
    INTCONbits.TMR0IF=0;
    
    TRISA = 0x3;               //Entrada em RA0 e RA1
    TRISB = 0xF0;              //Mais significativo entrada
    TRISC = 0x00;              
    TRISD = 0x00;
    ADCON1 = 0x0F;
    PORTB = 0xFF;             //mais significativo nivel alto
   while(1){
       
  
             
    }

}

e ajudar ,segue meu codigo abaixo

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