You are on page 1of 2

/*

A traves de un dipswitch eligo los numeros a sumar o multiplicar, pero


solo de 4 bits osea la mita del dipswitch, el otro pulsador
multiplica.
usando un decodificador en proteus.
*/
int valor1, valor2;
int numero=0;
int activa=0b01110000; //de derecha a izque es b0,b1...etc...el pi
nB4 unidaddes,B5 decenas,B6 centenas para activar los transistores de
cada display de 7seg
//la variable activa de todas es modificada en
la funcion visualizar
const tiempo=5;
void visualizar(int codigo){
// funcion que solo entra una
variable y vizuliza
int val;
int unidades, decenas, centenas;

////////decodificador para cuando el valor a mostrar en el


displya sea mayor a 99
if ((codigo>99)&&(codigo<=300)){
val=codigo%10;
unidades=val%10;
centenas=codigo/10;
decenas=val/10;
}else{
centenas=0;
decenas=codigo/10;
unidades=codigo%10;
}
activa=0b00010000;
PORTB=activa|unidades; // UNIDADES
delay_ms(tiempo);
activa=0b00100000;
PORTB=activa|decenas; // DECENAS
delay_ms(tiempo);
activa=0b01000000;
PORTB=activa|centenas; // CENTENAS
delay_ms(tiempo);
}
void main() {
TRISB=0x00; //declaro el puerto B como salida
PORTB=0x00; //inicializo el puerto en 0L
TRISC=0xFF; //declaro el puerto C como ENTRADAS para los dos
botones de suma y multiplicacion
PORTC=0xFF; //inicializo el puerto en 1L
TRISD=0xFF; //declaro el puerto C como ENTRADAS para el dipswtch
que asigan los numeros a sumar
PORTD=0xFF; //inicializo el puerto en 1L
PORTB=0B01110000;
while(1){
visualizar(numero); // envio a la funcion vizualizar el
numero que entrega el dipswitch

valor1=PORTD&0xF0; //leo la mitad izquierda del dipswitch


(4bits)
/*
PORTD =11111111
0xF0 =11110000
entonces Valor1=11110000
Solo 1 y 1 =1
*/
valor2=PORTD&0x0F;//leo la mitad derecha del dipswitch
(4bits)
valor1=valor1>>4;
/*
Desplazo el valor1 cuatro bits para poderlo sumar con
el valor 2

Ejemplo:
Valor1
=00110000;
Valor1=valor1>>4=00000011;
Valor2
=00000001
numero=valor1+valor2= 00000011
00000001
-------entonces Numero = 00000100
*/
if (PORTC.F0==0){ // SUMA
//leo el puerto C0
numero=valor1+valor2;
delay_ms(50);
}
if (PORTC.F1==0){ // MULTIPLICACION
//leo el puerto C1
numero=valor1*valor2;
delay_ms(50);
}

}
}

You might also like