Hola,
resulta que estoy haciendo un programa con un display de 7 segmentos Ánodo Común que incrementa en 1 el display de 0 a 9 a cada activación de un pulsador.
La pretensión del programa no es otra que la de aprender, habiendo realizado ya un contador de 0-9 he decidido hacerlo añadiendo el incremento por pulsador en RA0 y experimentando con el comando "for".
El problema está en que no consigo que funcione; el contador se limita a ir aumentando de 0-9 (y vuelta a empezar) cada 150 ms que es el retardo que uso para evitar rebotes de pulsación.
Si activo el pulsador se congela en el número de ese instante y al desactivarlo vuelve a 0 y sigue contando.
Consigo el mismo efecto con el comando "while".
No importa si cambio la condición de activación del pulsador de "0" a "1" lógico, parece que solo atiende si detecta cambio en RBA0.
Yo quiero que sólo se incremente el display a cada pulsación visualizando el número actual hasta que no haya nueva pulsación.
El compilador usado es el XC8.
Adjunto código:
Decir que me interesa hacerlo con el comando "for" si es posible.
A ver si alguien puede decirme que tengo mal o como habría que hacerlo.
Saludos.
resulta que estoy haciendo un programa con un display de 7 segmentos Ánodo Común que incrementa en 1 el display de 0 a 9 a cada activación de un pulsador.
La pretensión del programa no es otra que la de aprender, habiendo realizado ya un contador de 0-9 he decidido hacerlo añadiendo el incremento por pulsador en RA0 y experimentando con el comando "for".
El problema está en que no consigo que funcione; el contador se limita a ir aumentando de 0-9 (y vuelta a empezar) cada 150 ms que es el retardo que uso para evitar rebotes de pulsación.
Si activo el pulsador se congela en el número de ese instante y al desactivarlo vuelve a 0 y sigue contando.
Consigo el mismo efecto con el comando "while".
No importa si cambio la condición de activación del pulsador de "0" a "1" lógico, parece que solo atiende si detecta cambio en RBA0.
Yo quiero que sólo se incremente el display a cada pulsación visualizando el número actual hasta que no haya nueva pulsación.
El compilador usado es el XC8.
Adjunto código:
PHP:
/*
* File: main.c
* Author: nimio
*
* 16F84A
*
* Display 7 segmentos Ánodo Común.
* Contador de 0-9.
* Incrementará a cada activación de un pulsador
* en RA0
*
* Created on 9 de noviembre de 2012, 2:23
*/
#include <xc.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC=XT, WDTE=OFF, PWRTE=ON, CP=OFF
void main (void) {
int puls; // Variable para contar pulsaciones del pulsador.
// Definición de tabla en binario para display Ánodo Común.
int tabla_disp [10]={0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10011000};
TRISA=1; // Puerto A como entrada.
TRISB=0; // Puerto B como salida.
for (puls=0; RA0=0; puls++) { // for (inicializar variable; condición; modificar variable;)
__delay_ms(150); // Antirrebote.
PORTB=tabla_disp [puls];
if (puls==9)
puls=-1;
}
if (RA0=1)
PORTB=tabla_disp [puls];
//PORTB=tabla_disp [puls];
}
Decir que me interesa hacerlo con el comando "for" si es posible.
A ver si alguien puede decirme que tengo mal o como habría que hacerlo.
Saludos.