proyectos con pic's en c

tengo algunos proyectos sencillos que subire en este tema, con el fin de compartirlos con ustedes, y ayudar a resolver dudas, espero que ayude en algo.
hay empiezo:


el primero es:


CRONOMETRO CON 7 SEGMENTOS:

es muy sencillo y es de los primeros que hice, se trata de un pic que cuenta de 0 hasta 9999 y lo muestra en 4 displays 7 segmentos,tiene 3 pulsadores en el puerto A, uno es para contar de forma acendente y para contar de forma decendente, otro para pausar, y el ultimo reset, lo hice con el pic 16f873a:

el codigo es el siguiente:
Código:
////////////////////////////////////////////////////////////////////////////////
//hecho por JJ(joya), bogota, 2009 circuito que cuenta de 0000 hasta 9999//
///////////////////////////////////////////////////////////////////////////////
#include <16f873a.h>     
#use delay(clock=4000000)
#fuses xt,nowdt,noprotect
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
void deco(int conta1) 
{
   output_b(0x00);
   if (conta1==0)
      {
      output_high(pin_b0);
      output_high(pin_b1);
      output_high(pin_b2);
      output_high(pin_b3);
      output_high(pin_b4);
      output_high(pin_b5);
      }
      if (conta1==1)
      {
      output_high(pin_b1);
      output_high(pin_b2);
      }
      if (conta1==2)
      {
      output_high(pin_b0);
      output_high(pin_b1);
      output_high(pin_b3);
      output_high(pin_b4);
      output_high(pin_b6);
      }
      if (conta1==3)
      {
      output_high(pin_b0);
      output_high(pin_b1);   
      output_high(pin_b2);
      output_high(pin_b3);
      output_high(pin_b6);
      }
      if (conta1==4)
      {
      output_high(pin_b1);
      output_high(pin_b2);
      output_high(pin_b5);
      output_high(pin_b6);
      }
      if (conta1==5)
      {
      output_high(pin_b0);
      output_high(pin_b2);    
      output_high(pin_b3);
      output_high(pin_b5);
      output_high(pin_b6);
      }
      if (conta1==6)
      {
      output_high(pin_b0);
      output_high(pin_b2);
      output_high(pin_b3);
      output_high(pin_b4);
      output_high(pin_b5);
      output_high(pin_b6);
      }
      if (conta1==7)
      {
      output_high(pin_b0);
      output_high(pin_b1);
      output_high(pin_b2);
      }
      if (conta1==8)
      {
      output_high(pin_b0);
      output_high(pin_b1);
      output_high(pin_b2);
      output_high(pin_b3);
      output_high(pin_b4);
      output_high(pin_b5);
      output_high(pin_b6);
      }
      if (conta1==9)
      {
      output_high(pin_b0);
      output_high(pin_b1);
      output_high(pin_b2);
      output_high(pin_b5);
      output_high(pin_b6);
      }
}
void main()
{
int seg1; // decimas
int seg2; //centecimas
int seg3; //unidades de mil
int seg4; //decenas de mil
set_tris_a(0xff);
set_tris_b(0x00);
set_tris_c(0x00);
do
{
   if (input(pin_a0)==1)///start cronometro asendente
      { 
                  for (seg1=0; seg1<10; ++seg1)
                       for (seg2=0; seg2<10; ++seg2)
                              for (seg3=0; seg3<10; ++seg3)
                                    for (seg4=0; seg4<10; ++seg4)
                                        {
                                           {
                                           deco(seg4);
                                           output_c(0x01);
                                           delay_ms(5);
                                           }
                                           {
                                           deco(seg3);
                                           output_c(0x02);
                                           delay_ms(5);
                                           } 
                                           {
                                           deco(seg2);
                                           output_c(0x04);
                                           delay_ms(5);
                                           }
                                           {
                                           deco(seg1);
                                           output_c(0x08);
                                           delay_ms(5);
                                           }
                                        if (input(pin_a1)==1)
                                          {
                                             do
                                             {
                                                {
                                                deco(seg4);
                                                output_c(0x01);
                                                delay_ms(5);
                                                }
                                                {
                                                deco(seg3);
                                                output_c(0x02);
                                                delay_ms(5);
                                                } 
                                                {
                                                deco(seg2);
                                                output_c(0x04);
                                                delay_ms(5);
                                                }
                                                {
                                                deco(seg1);
                                                output_c(0x08);
                                                delay_ms(5);
                                                }
                                             }while (input(pin_a1)==1);
                                          }
                                        }
     }
        if (input(pin_a0)==0)///start cronometro descendente
      { 
                  for (seg1=9; seg1<10; --seg1)
                       for (seg2=9; seg2<10; --seg2)
                              for (seg3=9; seg3<10; --seg3)
                                    for (seg4=9; seg4<10; --seg4)
                                        {
                                        {
                                        deco(seg4);
                                        output_c(0x01);
                                        delay_ms(5);
                                        }
                                        {
                                        deco(seg3);
                                        output_c(0x02);
                                        delay_ms(5);
                                        } 
                                        {
                                        deco(seg2);
                                        output_c(0x04);
                                        delay_ms(5);
                                        }
                                        {
                                        deco(seg1);
                                        output_c(0x08);
                                        delay_ms(5);
                                        }
                     if (input(pin_a1)==1)
                                          {
                                             do
                                             {
                                                {
                                                deco(seg4);
                                                output_c(0x01);
                                                delay_ms(5);
                                                }
                                                {
                                                deco(seg3);
                                                output_c(0x02);
                                                delay_ms(5);
                                                } 
                                                {
                                                deco(seg2);
                                                output_c(0x04);
                                                delay_ms(5);
                                                }
                                                {
                                                deco(seg1);
                                                output_c(0x08);
                                                delay_ms(5);
                                                }
                                             }while (input(pin_a1)==1);
                                          }
                                        }
   }
}while (true);
}

y tambien publico el circuito en proteus, espero les sirva mucho como ejemplo.



El segundo es:



LCD Y LM35, SENSOR DE TEMPERATURA:
otro proyecto es el siguiente, es mas sencillo que el anterior, es un termometro con la lcd, utilizo el 16f873a, y un lm35, y lo unico que hace es que muetra la temperatura ambiente en la lcd.
Código:
///////////////////////////////////////
//javier joya 3106706202 bogota 2009///
///////////////////////////////////////
#include <16f873a.h>
#use delay(clock=4000000)
#fuses xt,nowdt,noprotect
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#include "LCD.C"
void main()
{
#byte PORTB=0xF81
#byte PORTC=0xF82
int termo;
int temp;
setup_port_a(all_analog);
setup_adc(adc_clock_internal);
set_adc_channel(0);
lcd_init();
do
   {
   lcd_gotoxy(2,1);
   lcd_putc("Temperatura");
   termo=read_adc();
   temp=((1.9*termo)/1);
   lcd_gotoxy(2,2);
   printf(lcd_putc,"%u",temp);
   delay_ms(200);
   lcd_putc("\f");
   }while(true);
}

es muy sencillo, igual que en el anterior envio el diagrama en proteus.
 

Adjuntos

  • cronometro JJ.rar
    15.3 KB · Visitas: 149
  • termometro lcd JJ.rar
    8.9 KB · Visitas: 101
Última edición:
Atrás
Arriba