hola soy nuevo en esta comunidad y espero me puedan ayudar, e buscado en su foro y encontre contadores en LCD, con un pulso en la entrada PIN_A0 pero necesito un contador que descienda , una ves que ya halla ascendido, por ejemplo tengo un motor y cada que da una vuelta presiona un switch y me empieza a contar , el problema es que cuando le doy de reberza al motor tengo un switch que manda pulsos al puerto A1 y me debe de empezar a restar el conteo, el problema es que no puedo hacer que decienda y que cuando llegue a 0 se detenga el contador. Porfavor alguien ayudenme aqui les dejo 2 programas de contadores para que me digan como modificarlos.
#include "C:\Documents and Settings\Usuario\Mis documentos\Mis vídeos\practicas\LCD\contador.h"
void main(void)
{
char i=0,x=0; //tabla y variable definida
lcd_init(); //inicializa lcd
printf(lcd_putc,"BIENVENIDO\n BUEN DIA" ); //muestra mensaje inicio
delay_ms(1000);
do{ //espera hasta que se pulse boton...
}while(input(PIN_A0)==1);
printf(lcd_putc,"\f" ); //...para borrar pantalla e iniciar contador
printf(lcd_putc,"\nDISTANCIA EN MTS" ); //auto publicidad en la 2ºfila lcd
lcd_gotoxy(8,1); //vuelve 1ºfila lcd y apunta la mitad de la columna
for( ; ; ){ //bucle...
if(!input(PIN_A0)){ //¿se ha pulsado el boton?
do{ //SI -> eliminar...
}while(!input(PIN_A0)); //...rebotes del boton
if(i>99){ //¿se ha mostrado digito 9?
printf(lcd_putc,"\f" );
printf(lcd_putc,"\nDISTANCIA EN MTS" );
i=0; //SI -> restaura valor indice(para mostrar digito 0)
output_high(PIN_B3); //activa buzzer(beep)
delay_ms(50); //tiempo de escucha del beep
output_low(PIN_B3); //desactiva buzzer(beep)
}
lcd_gotoxy(8,1);
printf(lcd_putc,"%u", i ); //muestra por pantalla el numero
//retrasa el cursor una posicion(escribe encima)
i++; //incremento contador indice tabNum
}
} //...infinito
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
//programa: contador de 00000 a 99999 con LCD
// nombres: japifer_22
// email: japifer_22@hotmail.com
// Ing.Ejec.Electronica
// variables:
// * i -> indice tabla 7seg para mostrar 1º digito,,,sifra menos significativa
// * j -> indice tabla 7seg para mostrar 2º digito
// * h -> indice tabla 7seg para mostrar 3º digito
// * g -> indice tabla 7seg para mostrar 4º digito
// * z -> indice tabla 7seg para mostrar 5º digito,,,sifra mas significativa
// * tabNum[] -> vector donde se almacenan numeros del contador 0a9
//
// Conexiones:
// MCLR -> inicio programa //"propaganda"
// A0 -> entrada a contador
// B0 -> E --> de la LCD
// B1 -> RS --> de la LCD
// B2 -> RW --> de la LCD
// B4 -> D4 --> de la LCD
// B5 -> D5 --> de la LCD
// B6 -> D6 --> de la LCD
// B7 -> D7 --> de la LCD
//
//////////////////////////////////////////////////////////////////////////////////
#include <16f876a.h> //pic a utilizar
#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP //ordenes para el programador
#use delay (clock=20000000) //clock=20Mhz
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c> //libreria manejo lcd
///PROGRAMA
void main(void)
{
char tabNum[10]={'0','1','2','3','4','5','6','7','8','9'},i=0,j=0,h=0,g=0,z=0; //tabla y variable definida
lcd_init(); //inicializa lcd
printf(lcd_putc,"contador de\n00000 a 99999"); //muestra mensaje inicio
do{ //espera hasta que se pulse boton...
}while(input(PIN_A0)==1);
printf(lcd_putc,"\f"); //...para borrar pantalla e iniciar contador
printf(lcd_putc,"\njapifer_22."); //auto publicidad en la 2ºfila lcd
lcd_gotoxy(7,1); //vuelve 1ºfila lcd y apunta la mitad de la columna
for(;
{ //bucle...
if(!input(PIN_A0)){ //¿se ha pulsado el boton?
do{ //SI -> eliminar...
}while(!input(PIN_A0)); //...rebotes del boton
if(i>9){ //¿se ha mostrado digito 9?
i=0; //SI -> restaura valor indice(para mostrar digito 0)
j++;
if(j>9){J=0;
h++;}
if(h>9){h=0;
g++;}
if(g>9){g=0;
z++;}
if(z>9){z=0;
output_high(PIN_B3);
delay_ms(100);
}
}
printf(lcd_putc,"%c%c%c%c%c",tabNum[z],tabNum[g],tabNum[h],tabNum[j],tabNum
); //muestra por pantalla el numero
printf(lcd_putc,"\b\b\b\b\b"); //retrasa el cursor una posicion(escribe encima)
i++; //incremento contador indice tabNum
}
} //...infinito
}