Teclado numerico - lenguaje C
Enviado por Mariano Desivo • 26 de Febrero de 2020 • Práctica o problema • 308 Palabras (2 Páginas) • 172 Visitas
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "MyDefs.h"
#include "MyInt.h"
char obtenercolumna(char a);
char obtenerfila(char a);
int main (void)
{
char fila,columna,tecla;
char j=0,i=0;
char vector[4]={NULL,NULL,NULL,NULL};
char v=0;
char contraseña[4]={1,2,3,4};
char matriz[4][4] = { //matriz de botones
{0, 1, 2, 3} ,
{4, 5, 6, 7} ,
{8, 9, 10, 11} ,
{12, 13, 14, 15} //el 15 es ENTER
};
DDRD=0x07; //configuro portD 0, 1 y 2 en salida para los led
PORTD=0x04; //el led 0 apagado (armado), led 1 prendido (desarmado), led 2 apagado (error)
while(1)
{
DDRA=0x0F;
PORTA=0xF0;
fila=PINA;
DDRA=0xF0;
PORTA=0x0F;
columna=PINA;
tecla=~(fila|columna); // voy a tener un 1 en la fila y un 1 en la columna 10000100 fila0, columna1
if(tecla!=0){
i=obtenerfila(tecla);
j=obtenercolumna(tecla);
tecla=matriz[i][j];
if(tecla!=15) //el 15 es enter
vector[v]=tecla;
else
if(vector=contraseña)
PORTD^=0x03; //toggle leds 0 y 1
else{
PORTD&=0xFB; //led 2 on
_delay_ms(500);
PORTD|=0x04; //led 2 off
}
v++;
if(v==4)
v=0;
}
}
return 0;
}
char obtenerfila(char a)
{
char i=0,j,f=0;
j=7;
while(i=0 && j>3){
i=((a >> j) & 1);
j--;
if(i=0)
f++;
}
return f;
}
NAME CONTADOR_BCD
GREEN_LED EQU P1.0
ORG 0000h
LJMP MAIN
main:
MOV A,#0
ESPERO1:
JB P2.0,ESPERO1
loop2:
MOV P3,A
ADD A,#1
DA A
ACALL DELAY500
CJNE A,#154,loop2
CLR GREEN_LED
ACALL DELAY500
SETB GREEN_LED
ACALL DELAY500
MOV A,#0
ESPERO2:
JNB P2.0, ESPERO2
sjmp main
DELAY100:
MOV R7, #50
LOOP1: MOV R6, #250
LOOP0: DJNZ R6, LOOP0
DJNZ R7, LOOP1
RET
DELAY500:
CALL DELAY100
CALL DELAY100
CALL DELAY100
CALL DELAY100
CALL DELAY100
RET
END
char obtenercolumna(char a)
{
...