Está en la página 1de 2

/*

* TecladoMatricial.c
*
* Created: 28/09/2017 23:44:28
* Author : Usuario
*/
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
uint8_t tiempo=50;
//uint8_t=tecla=0;
uint8_t c; //columnas
uint8_t f; //filas
//uint8_t cont;
DDRD&=~(15<<0); //PD0 a PD3 como 4 entradas dig
PORTD|=(15<<0); //pull up
DDRD|=(7<<4); //PD4 a PD6 como salidas dig
PORTD|=(7<<4); //PD4 a PD7 a 1
DDRD|=(8<<4); //PD4 a PD7 como salida dig
PORTD|=(8<<4);

DDRC|=(15<<0);
PORTC&=~(15<<0);//4 salidas para el display
while(1)
{
for(c=4;c<8;c++) //columnas de PD4 a PD7 salidas
{
if(PORTD&(1<<c)==4)
{
PORTC==0b00001111;
}
PORTD&=~(1<<c); // pone a 0 de PD4 a PD7
for(f=0;f<4;f++)
{
if((PIND&(1<<f))==0)//si alguna fila esta en 0
{
PORTD|=(4<<c);
PORTC =((c-4)+1)+(3*f); //(si se preciona entonces:)
formula para teclado matricial
if(PORTC==11) //si el numero obtenido en la formula
es el numero 11
{
PORTC=0; //entonces sera el umero 0 como salida
}
while((PIND&(1<<f))==0); //mientras se sigue
presionando no hacer nada
_delay_ms(tiempo); //espera de 50ms
}
/*if(PIND&(1<<c)==4)
{
PORTC=6;
}*/
}
PORTD|=(1<<c);// el valor de la columna en 0 se pondra a 1
}
}
}

También podría gustarte