Académique Documents
Professionnel Documents
Culture Documents
ARDUINO
RESUMEN: Anexo3
1
.
.
for (columna=4;columna<=7;columna++)
{
PORTK=PORTK&~(1<<columna);
for (fila=0;fila<=3;fila++)
Anexo2
{
if ((PINK&(1<<fila))==0)
2
.
.
valor=aux[fila][(columna-4)]; digitos[0]=numero;
while
((PINK&(1<<fila))==0) PORTD=0X01;
_delay_ms(25);
PORTF=numeros_display[digitos[0]];
} _delay_ms(5);
} }
PORTK=PORTK|(1<<columna); }
} //PRIMER NUMERO DIGITO2
PORTK=0b00001111; if(bandera==2)
//solo dejamos las pull-up {
nuevamente para //Verificaciones de
return valor; ingreso solo numero
//detectar cuando se presiona una
nueva tecla. if(numeros_display[numero]==119 ||
} numeros_display[numero]==124 ||
//inicio numeros_display[numero]==57 ||
ISR(PCINT2_vect) numeros_display[numero]==94 ||
{ numeros_display[numero]==121)
flanco++; {
if (flanco==1) bandera = 0;
{
tecla=teclado4x4(); //retorna a la variable digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
global tecla el valor numrico de la tecla presionada.
bandera++; PORTD=0b00001111;
//me dir las veces que se ha presionado una tecla
} PORTF=0b11111111;
if(flanco==2) //validar
interrupcin por flanco, no por estado. _delay_ms(800);
flanco=0;
} PORTF=0b00000000;
void display(unsigned int numero)
{ }
//boton reset else
{
if(numeros_display[numero]==113&&bandera>0)
{ digitos[1]=numero;
bandera = 0;
PORTD=0X01;
digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
PORTD=0b00001111; PORTF=numeros_display[digitos[1]];
PORTF=0b11111111; _delay_ms(5);
_delay_ms(800);
PORTF=0b00000000; PORTD=0X02;
}
//PRIMER NUMERO DIGITO1 PORTF=numeros_display[digitos[0]];
if(bandera==1) _delay_ms(5);
{ PORTF=0;
//Verificaciones de }
ingreso solo numero }
//OPERACION(+,-,*,/)
if(numeros_display[numero]==119 || if(bandera==3)
numeros_display[numero]==124 || {
numeros_display[numero]==57 ||
numeros_display[numero]==94 ||
numeros_display[numero]==121) digitos[2]=numero;
{
bandera = 0; PORTF=numeros_display[digitos[2]];
digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0; PORTD=0b00000000;
_delay_ms(1);
PORTD=0b00001111; numero=0;
}
PORTF=0b11111111; //SEGUNDO NUMERO DIGITO1
if(bandera==4)
_delay_ms(800); {
//Verificaciones de
PORTF=0b00000000; ingreso solo numero
}
else if(numeros_display[numero]==119 ||
{ numeros_display[numero]==124 ||
3
.
.
numeros_display[numero]==57 || if(bandera==6)
numeros_display[numero]==94 || {
numeros_display[numero]==121) digitos[5]=numero;
{
bandera = 0; if(numeros_display[digitos[5]]==121)
{
digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
switch(numeros_display[digitos[2]])
PORTD=0b00001111; {
PORTF=0b11111111; //SUMA
if(numeros_display[numero]==119 || respuesta=primer_numero-
numeros_display[numero]==124 || segundo_numero;
numeros_display[numero]==57 ||
numeros_display[numero]==94 || negativo=0;
numeros_display[numero]==121)
{ }
bandera = 0;
//Resta negativa
digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
else
PORTD=0b00001111;
{
PORTF=0b11111111;
respuesta=segundo_numero-
_delay_ms(800); primer_numero;
PORTF=0b00000000; negativo=1;
}
else }
{ }
digitos[4]=numero; break;
PORTD=0X01; //MULTIPLICACION
PORTD=0X02; respuesta=primer_numero*segundo_numero;
PORTF=numeros_display[digitos[3]]; negativo=0;
_delay_ms(5); }
}
} break;
//Obtener el numero
//DIVISION
primer_numero=(digitos[0]*10)+digitos[1];
case 94:
segundo_numero=(digitos[3]*10)+digitos[4];
4
.
.
negativo=0; digitos[0]=digitos[1]=digitos[2]=digitos[3]=digitos[4]=0;
} PORTD=0b00001111;
else PORTF=0b11111111;
{ _delay_ms(800);
PORTF=0b00000000;
respuesta=primer_numero/segundo_numero; }
}
negativo=0;
} int main(void)
} {
} DDRK=0b11110000; //PK0-PK3 como entradas. PK4-
if (respuesta>0); PK7 como salida
{ PORTK=0b00001111; //resistencias pull-up en la LSB
del puerto K
digito1=respuesta/1000; PCICR=0b00000100; //1 lgico en este bit habilita el
vector de interrupcin PCI2. Este vector corresponde a los
parcial=respuesta%1000; pines PCINT23:16.
PCMSK2=0b00001111; //Se habilita las interrupciones
digito2=parcial/100; PCINT16-PCINT19
DDRA=0b11111111; //Puerto A es todo
parcial=parcial%100; salida
DDRF=0b11111111; //Puerto F como salida.
digito3=parcial/10; DDRD=255;
PORTD=0;
digito4=parcial%10; sei();
while (1)
{
PORTD=0b00001000; display(tecla);
if }
(negativo==1) }
{ 5 REFERENCIAS
PORTD=0b00001000;
[1] Carro Fernndez, G. Introduccin a Arduino (I):
PORTF=0b00001000; electrnica para todos.
_delay_ms(5);
}
PORTD=0b00000100;
PORTF=numeros_display[digito2];
_delay_ms(5);
PORTD=0b00000010;
PORTF=numeros_display[digito3];
_delay_ms(5);
PORTD=0b00000001;
PORTF=numeros_display[digito4];
_delay_ms(5);