2 Şubat 2010 Salı

pic16f877A 0-9999 sayaç

Ortak katot 4'lü 7 segment display ile 0-9999 sayaç programı:


Data pinleri pic'in d portuna bağlıdır.Display seçim ise birler basamağı A2,onlar basamağı A3,yuzler basamağı A4 ve binler basamağıda A5 pinin bağlıdır.İsteyen olursa devre şemasını yollayabilirim.

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                     //No Watch Dog Timer
#FUSES HS                        //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                     //No Power Up Timer
#FUSES NOPROTECT                 //Code not protected from reading
#FUSES NODEBUG                   //No Debug mode for ICD
#FUSES NOBROWNOUT                //No brownout reset
#FUSES NOLVP                     //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                     //No EE protection
#FUSES NOWRT                     //Program memory not write protected
#FUSES RESERVED                  //Used to set the reserved FUSE bits

#use delay(clock=20000000)

#use fast_io(a)
#use fast_io(d)

//#define display_1 pin_a2
//#define display_2 pin_a3


long int i;
int j;

const int digit[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};

void main()
{
  
   int birler=0;
   int onlar=0;
   int yuzler=0;
   int binler=0;
  
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   set_tris_a(0x00);
   set_tris_d(0x00);
  
   output_d(0x00);
   output_a(0x00);
  
   while(1)
   {
      for(i=0;i<=9999;i++)
      {
         birler=i%10;
        
         if(i!=0)
         {
            onlar =((int) (i/10))%10;
            yuzler=((int) (i/100))%10;
            binler=((int) (i/1000))%10;
         }
         else
         {
            onlar=0;
            yuzler=0;
            binler=0;
         }
         for(j=0;j<5;j++)
         {
           
            output_high(pin_a2);
            output_d(digit[birler]);
            delay_ms(2);
            output_low(pin_a2);
           
            output_high(pin_a3);
            output_d(digit[onlar]);
            delay_ms(2);
            output_low(pin_a3);
           
            output_high(pin_a4);
            output_d(digit[yuzler]);
            delay_ms(2);          
            output_low(pin_a4);
           
            output_high(pin_a5);
            output_d(digit[binler]);
            delay_ms(2);
            output_low(pin_a5);
         }
      }
   }
}

0 yorum: