Está en la página 1de 3

unsigned int const numero[10]={0,1,2,3,4,5,6,7,8,9}; // matriz e 1 dimension para los

valosres del display


unsigned int unidad=0,decena=0, centena=0, millar=0, residuos=0; //varialbes para hacer
las operaciones
int long contador=0; // contador principal
void sumar(){ //funcion que incrementa de 1 en 1 cada vez que pulsa el boton sumar
contador++;
residuos=contador; // obtiene valor actual del contador
unidad=residuos %10; //descompone el numero cifra por cifra
residuos=residuos/10; //dividiendo entre 10, hasta que
decena=residuos%10; // sea menor a cero
residuos=residuos/10; // los residuos de cada division entera, son
centena=residuos%10; // los que muestra el display segun sea el caso
residuos=residuos/10; // unidad, decena, centena, millares....
millar=residuos%10;
residuos=residuos/10;
}
void restar(){ // funcion que decrementa en 1 al contador por cada pulso
contador--;
residuos=contador;
unidad=residuos %10;
residuos=residuos/10;
decena=residuos%10;
residuos=residuos/10;
centena=residuos%10;
residuos=residuos/10;
millar=residuos%10;
residuos=residuos/10;
}
void limpiar(){ // aqui limpiamos para iniciar desde 0
residuos=contador=0;
}
void main()
{
asm {
movlw 0x07 // este bloque desabilita los comparadores analogicos
movwf CMCON // debras leer la hoja de datos del micro que uses para ver como desabilitarlo
}
ADCON1=0x06; // configura el puerto A como entrada Digital
TRISA=1; //Puerto A como entradas
TRISB=0; //Puerto B como salidas
TRISD=0; //puerto d como salidas
PORTB=0;
PORTD=0b00000000;//Se prenden los dos (4)dis

while(1) //Entra a ciclo infinito


{ //pregunta si ha pulsado boton para sumar; si es cierto entonces:
if (Button(&PORTA, 0, 50, 1)) { // rutina que evita el rebote generado por el boton
sumar(); // llama funcion suma
}
else if(Button(&PORTA,1,50,1)){ // pregunta si ha pulsado boton restar; si es cierto
restar(); // llama funcion restar
}
else if(Button(&PORTA,2,50,1)){
limpiar();
}
else // este bloque multiplexa los displays de 7 segmentos
PORTB=numero[unidad]; // controla los transistores a traves del puerto D
PORTD=0x07; // la logica es:
delay_ms(10); // prende primer display, manda unidades atravez de puerto b
PORTD=0xff; // apaga primer display, manda dato y prende segundo display
PORTB=numero[decena]; // asi sucesivamente para los 4 displays
PORTD=0x0B; // de modo que prenden y apagan uno a la vez
delay_ms(10); // tan rapido ( 1 a 10 milisegundos)
PORTD=0x0f; // que parece que estan prendidos constantemente
PORTB=numero[centena];
PORTD=0x0D;
delay_ms(10);
PORTD=0x0f;
PORTB=numero[millar];
PORTD=0x0E;
delay_ms(10);
PORTD=0x0f;
}}

También podría gustarte