Autor Tema: contador de 5 digitos con display 7 seg y lcd  (Leído 9445 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
contador de 5 digitos con display 7 seg y lcd
« en: 25 de Junio de 2008, 02:29:02 »
hola como estan bueno aqui les dejo 2 programas que cuentan de 0 asta 99999  uno es con LCD y el otro con display de 7 segmento ambos tienen boton de reset y otro para contar. espero que les sirva.
en el archivo que les adjunto estan los dos cirtcuitos.

Desconectado Twistek

  • PIC10
  • *
  • Mensajes: 13
Re: contador de 5 digitos con display 7 seg y lcd descendente
« Respuesta #1 en: 27 de Junio de 2009, 20:13:01 »
hola soy nuevo en esto de los pics y en CCS, tu programa funciona muy bien, pero me gustaria que me ayudaras a hacer uno como el tuyo que cuente hasta 999 y que cuando este en algun numero, con el PIN_A1 puedas descender hasta llegar a 0. que sea acsendente y descendente. pero cuando llegue a 0 se detenga.
me puedes ayudar porfavor.


//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
}
 

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: contador de 5 digitos con display 7 seg y lcd
« Respuesta #2 en: 28 de Junio de 2009, 02:28:38 »
hola Twistek sorry por la demora pero ya te hice el programa 3 digitos que cuenta tanto asendente como desendente como lo pediste  espero quete sirva tedejo el C+hex+la simulacion en proteus saludos.
Código: [Seleccionar]
#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
     
 ///DECLARACION DE FUNCIONES
void asendente(void);      //funcion cuenta ascendente
void desendente(void);   //funcion cuenta descendente

///DECLARACION VARIABLES GLOBALE
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
     
///PROGRAMA
void main(void)
{
   lcd_init();         //inicializa lcd
   disable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
///inicializamos el contador   
   do{                        //bucle...
   
   if(!input(PIN_A0)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...           
         }while(!input(PIN_A0));            //...rebotes del boton
          asendente();               //SI -> contador ascendente
   }
   if(!input(PIN_A1)){                  //¿se ha pulsado el boton?
         do{                           //SI -> eliminar...           
         }while(!input(PIN_A1));            //...rebotes del boton
         desendente();               //NO -> contador descendente
   }
        printf(lcd_putc,"%c%c%c",tabNum[h],tabNum[j],tabNum[i]);   //muestra por pantalla el numero
        printf(lcd_putc,"\b\b\b"); //retrasa el cursor una posicion(escribe encima)
        lcd_gotoxy(1,1);                  //vuelve 1ºfila lcd y apunta la mitad de la columna
         printf(lcd_putc,"japifer_22.");   //auto publicidad en la 2ºfila lcd
         lcd_gotoxy(1,2);                  //vuelve 1ºfila lcd y apunta la mitad de la columna
      }while(TRUE);            //...infinito         
}

void asendente(void)                  //funcion cuenta ascendente
{         
            i++;                  //incremento contador para visualizar siguiente digito
            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;
            output_high(PIN_B3);
            delay_ms(100);
            }}}
                                 //incremento contador indice tabNum   

void desendente(void)                  //funcion cuenta descendente
{
      i--;                  //decremento contador para visualizar siguiente digito
      if(i==-1){
      i=9;
      j--;
      if(j==-1){
      j=9;
      h--;}
      if(h==-1){
      h=9;}}
}

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: contador de 5 digitos con display 7 seg y lcd
« Respuesta #3 en: 28 de Junio de 2009, 02:36:38 »
hola de nuevo le hice una mejorita que cuando llega a 000 se quede hay y cuando llege a 999 no pase a 000 sino que se quede en 999. saludos

Desconectado Twistek

  • PIC10
  • *
  • Mensajes: 13
Re: contador de 5 digitos con display 7 seg y lcd
« Respuesta #4 en: 28 de Junio de 2009, 18:02:11 »
Hola primero que nada gracias por contestar, pero antes logre hacer este aunque no esta muy bien pero funciona. Me podrias ayudar a hacerle un cambio al tuyo, pues veras lo necesito que cada 3 pulsos en el A0 me de un numero en el LCD e igual que cada 3 pulsos en el A1 me decienda, porque cada 3 pulsos de lo que necesito es un metro. si me puedes modificar eso en el tuyo haber si queda mejor que el que logre hacer, como vez. gracias


#include "C:\Documents and Settings\Usuario\Mis documentos\Mis vídeos\practicas\LCD\contador.h"


void main(void)
{
char i=1,x=0; //tabla y variable definida

lcd_init(); //inicializa lcd
printf(lcd_putc,"BIENVENIDO\n BUEN DIA" ); //muestra mensaje inicio
delay_ms(200);

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( ; ; )
{
   if(input(PIN_A0))
   { //¿se ha pulsado el boton?
     
      while(input(PIN_A0)); //...rebotes del boton
      {
      if(x==2)
      {
      x=0;
      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)
      }
      else
      {
      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
      }else x++;
      }
   }
   else if(input(PIN_A1))
   { //¿se ha pulsado el boton?
      printf(lcd_putc,"\f" );
      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
      while(input(PIN_A1)); //...rebotes del boton
      {
      if(x==2)
      {
      x=0;
      if(i==0)
      { //¿se ha mostrado digito 9?
         printf(lcd_putc,"%u", i );
         printf(lcd_putc,"\nDISTANCIA EN MTS" );
         //AQUI APAGA LA madre
         i=0; //SI -> restaura valor indice(para mostrar digito 0)
      }
      else
      {
      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
      }else x++;
      }
   }
} //...infinito

}

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: contador de 5 digitos con display 7 seg y lcd
« Respuesta #5 en: 28 de Junio de 2009, 19:39:20 »
listo toma espero que te sea util cada 3 pulsos se visualisa eldigito,ya sea para incrementar o decrementar.
salu2s

Desconectado Twistek

  • PIC10
  • *
  • Mensajes: 13
Re: contador de 5 digitos con display 7 seg y lcd
« Respuesta #6 en: 02 de Agosto de 2009, 22:09:41 »
a muchas gracias funciona bien solo me falta calarlo ya en el pic , lo voy a poner en el 16f84a esto era lo que yo habia logrado, pero quiza faltaba obtimizarlo

#include "C:\Documents and Settings\Usuario\Mis documentos\Mis vídeos\practicas\LCD\contador.h"


void main(void)
{
char i=1,x=0; //tabla y variable definida

lcd_init(); //inicializa lcd
printf(lcd_putc,"   BIENVENIDO\n    BUEN DIA" ); //muestra mensaje inicio
delay_ms(200);

printf(lcd_putc,"\f" ); //...para borrar pantalla e iniciar contador

printf(lcd_putc,"PROFUNDIDAD= 0\nDISTANCIA EN MTS" ); //auto publicidad en la 2ºfila lcd
lcd_gotoxy(14,1); //vuelve 1ºfila lcd y apunta la mitad de la columna

for( ; ; )
{
   if(input(PIN_A0))
   { //¿se ha pulsado el boton?
     
      while(input(PIN_A0)); //...rebotes del boton
      {
      if(x==2)
      {
      x=0;
      if(i>=999)
      { //¿se ha mostrado digito 9?
         printf(lcd_putc,"\f" );
         printf(lcd_putc,"PROFUNDIDAD=\nDISTANCIA EN MTS" );
         i=0; //SI -> restaura valor indice(para mostrar digito 0)
      }
      else
      {
      lcd_gotoxy(14,1);
      printf(lcd_putc,"%u", i ); //muestra por pantalla el numero
      //retrasa el cursor una posicion(escribe encima)
      }
      i++;//incremento contador indice tabNum
      }else x++;
      }
   }
   else if(input(PIN_A1))
   { //¿se ha pulsado el boton?
     
      printf(lcd_putc,"\nDISTANCIA EN MTS" ); //auto publicidad en la 2ºfila lcd
     
      while(input(PIN_A1)); //...rebotes del boton
      {
     
      if(x==2)
      {
      x=0;
      if(i==0)
      {
       printf(lcd_putc,"\f" );//¿se ha mostrado digito 9?
       lcd_gotoxy(1,1); //vuelve 1ºfila lcd y apunta la mitad de la columna
         printf(lcd_putc,"PROFUNDIDAD= %u", i );
         printf(lcd_putc,"\nDISTANCIA EN MTS" );
         //AQUI APAGA LA madre
         i=0; //SI -> restaura valor indice(para mostrar digito 0)
         break;
      }
      else
      {
      lcd_gotoxy(1,1);
       printf(lcd_putc,"\f" );//¿se ha mostrado digito 9?
      printf(lcd_putc,"PROFUNDIDAD= %u", i ); //muestra por pantalla el numero
      printf(lcd_putc,"\nDISTANCIA EN MTS" );
      //retrasa el cursor una posicion(escribe encima)
      }
      i--; //incremento contador indice tabNum
      }else x++;
      }
   }
} //...infinito

}

Desconectado tyto88

  • PIC10
  • *
  • Mensajes: 1
Disculpa pero con que software puedo simular tus programas.
« Respuesta #7 en: 27 de Enero de 2011, 12:48:49 »
Disculpa pero con que software puedo simular tus programas? me serian de gran utilidad

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Disculpa pero con que software puedo simular tus programas.
« Respuesta #8 en: 27 de Enero de 2011, 13:36:49 »
Disculpa pero con que software puedo simular tus programas? me serian de gran utilidad
proteus....pero los displays de 7 digitos no se visualiza bien
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado renzo1402

  • PIC10
  • *
  • Mensajes: 1
Re: contador de 5 digitos con display 7 seg y lcd
« Respuesta #9 en: 23 de Junio de 2011, 13:14:39 »
japifer_22 primero que nada hola.

Tengo un problema, necesito tu contador de 5 digitos ascendente y descendente pero con unas características diferentes y como todavia no se nada de pics no se por donde arrancar.

una de las diferencias es que el bit menos significativo necesito que vaya de 5 en 5 (00000-00005-00010-00015...99995-00000) para los dos lados y la mas importante que necesito es que el clock lo determino por un led infrarojo y un fotodiodo, osea, cuando nada interfiere la iluminación tira un pulso, se corta el az y luego se ilumina nuevamente para el siguiente pulso.
ademas, tengo un boton de encendido, uno de reset, uno que me deje enclavado el valor (por mas que sigan los pulsos, que no cuente) y uno selector de up/down...

Se que pido mucho pero no se como comenzar  :( y estaria muy agradecido si me das alguna solución.

Disculpa las molestias y muchas gracias desde ya.

Desconectado oswal0928

  • PIC10
  • *
  • Mensajes: 1
Re:contador de 5 digitos con display 7 seg y lcd
« Respuesta #10 en: 27 de Mayo de 2016, 12:27:48 »
buenas amigo el contador de lcd en lo fisico no me funciona sera el quemador que tengo es pickit2 clone alguien me puede ayudar gracias