TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: japifer_22 en 25 de Junio de 2008, 02:29:02

Título: contador de 5 digitos con display 7 seg y lcd
Publicado por: japifer_22 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.
Título: Re: contador de 5 digitos con display 7 seg y lcd descendente
Publicado por: Twistek 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
}
 
Título: Re: contador de 5 digitos con display 7 seg y lcd
Publicado por: japifer_22 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;}}
}
Título: Re: contador de 5 digitos con display 7 seg y lcd
Publicado por: japifer_22 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
Título: Re: contador de 5 digitos con display 7 seg y lcd
Publicado por: Twistek 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

}
Título: Re: contador de 5 digitos con display 7 seg y lcd
Publicado por: japifer_22 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
Título: Re: contador de 5 digitos con display 7 seg y lcd
Publicado por: Twistek 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

}
Título: Disculpa pero con que software puedo simular tus programas.
Publicado por: tyto88 en 27 de Enero de 2011, 12:48:49
Disculpa pero con que software puedo simular tus programas? me serian de gran utilidad
Título: Re: Disculpa pero con que software puedo simular tus programas.
Publicado por: ppyote 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
Título: Re: contador de 5 digitos con display 7 seg y lcd
Publicado por: renzo1402 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.
Título: Re:contador de 5 digitos con display 7 seg y lcd
Publicado por: oswal0928 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