CCS PIC İLE DİSPLAY

CCS C ile kodlanmış, PIC 16F877 kullanılarak yapılmış üç adet displayi süren devre ve yazılım. 0’dan 999 a kadar sayan ve bu sayıları display üzerinde gösteren uygulama.


Bir tek basamaklı rakam yazabilen display 4 adet bacağa sahiptir. Bu bacaklardan her biri bir bit değerine karşılık gelir. Bu pinler (bacak) ikilik sayma düzenindeki gibi dizilmişlerdir. 

 



Yukarıdaki şekilde displayın en soldaki bacağına 5V gelmektedir, ya da diğer bir deyişle en soldaki bit 1, diğerleri 0 dir. Bunu ikilik düzende “1000” şeklinde yazabiliriz ve onluk karşılığı;

1.23  + 0.22+0.21 +0.20  = 8 



Başka bir örnek, bacaklara gelen bitlerin ikilik dizilimi “1001” şeklinde olsun.

Bu sayı onluk sistemde;

1.23  + 0.22+0.21+1.20  = 8 + 1 = 9

Değerine karşılık gelir eğer displayın bacaklarına sırasıyla 5V, 0V, 0V, 5V verirseniz, display da 9 rakamının oluştuğunu görürsünüz. Eğer displaya sırasıyla 0V, 0V, 5V, 5V verirseniz display 6 rakamını gösterecektir.

Biz displayi PIC mikroişlemcilerle sürerken işte bu özeliiğini kullanıyoruz. Displayın bacaklarına giden voltajları ayarlayarak 0 ile 9 arasındaki rakamları yazıyoruz.

Bu displayın yanına bir tane daha koyarsak iki basamaklı sayıları yazabiliriz. Üç displayi yan yana kullanarak 3 basamaklı sayıyı yazabiliriz. 

Piyasada tabiiki istenilen basamak ve hatta kayan yazı yapabildiğiniz ledler var ama bizim amacımız burada hazır satılan ledleri öğrenmek değil işin mantığını öğrenmek ve yazılıma, mikroişlemciye ve devreye hakim olmaktır. 



Program 1’den 999’ a kadar sayarken PIC16F877 nin 12 adet çıkışını kullanmaktadır. D portları 4’er bitlik iki gruba yarılmış, ilk 4 pini sayımızın birler basamağını oluşturuyor, ikinci 4 pini sayımızın onlar basamağını oluşturuyor. C portlarının ilk 4 pini ise sayımızın yüzler basamağını oluşturacak.

999 ‘dan sonra sıfırlanarak tekrar saymaya başlayacak tabii burada istediğiniz ekleme çıkarmaları yapabilirsiniz.

Programda ayrıca devreyi sıfırlamaya yarayan bir button da var. Buttona basılırsa devre resetleniyor.

Programın Devre Şeması ve CCS C kodları aşağıda verilmiştir.

Kolay Gelsin.

 




      #include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD 
#use delay(clock=4000000)   

int32 sayici();
void displayexit(int xb);
void displayexit2(int xb2);
void displayexit3(int xb3);
void main()
{
   while(TRUE)
   {
      setup_psp(PSP_DISABLED);        
      setup_timer_1(T1_DISABLED);     
      setup_timer_2(T2_DISABLED,0,1); 
      setup_adc_ports(NO_ANALOGS);    
      setup_adc(ADC_OFF);             
      setup_CCP1(CCP_OFF);            
      setup_CCP2(CCP_OFF);     
      set_tris_c(0x00);
      set_tris_d(0x00);
      
      output_c(0x00);  
      output_d(0x00);
      set_tris_a(0xFF);
      output_a(0x00);
      
      int32 micro1=0;
      int32 display1=0;
      int32 display2=0;
      int32 display3=0;
      int32 display4=0;
      
   while(TRUE)
   {
   
      if(input(PIN_A0)==1)
      {
           micro1=sayici();
           
           display1=micro1%10;
           displayexit(display1);
           if(micro1<100)
           {
            display2=micro1/10;
            displayexit2(display2);
           }
           if(micro1>=100)
           {
            display2=micro1/10;
            display3=display2%10;
            displayexit2(display3);
            display4=micro1/100;
            displayexit3(display4);
           }
           
           if(micro1==998)
           {
               displayexit(0);
               displayexit2(0);
               displayexit3(0);
           }
           
           
           delay_ms(100);
          
      }
      else
      {
         output_d(0b00000000);
         
      }
     
     
   }
   }
}
void displayexit(int deger)
{
  
   if(deger ==0)
   {
      output_low(PIN_D0);
      output_low(PIN_D1);
      output_low(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==1)
   {
      output_high(PIN_D0);
      output_low(PIN_D1);
      output_low(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==2)
   {
      output_low(PIN_D0);
      output_high(PIN_D1);
      output_low(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==3)
   {
      output_high(PIN_D0);
      output_high(PIN_D1);
      output_low(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==4)
   {
      output_low(PIN_D0);
      output_low(PIN_D1);
      output_high(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==5)
   {
      output_high(PIN_D0);
      output_low(PIN_D1);
      output_high(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==6)
   {
      output_low(PIN_D0);
      output_high(PIN_D1);
      output_high(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==7)
   {
      output_high(PIN_D0);
      output_high(PIN_D1);
      output_high(PIN_D2);
      output_low(PIN_D3);
   }
   if(deger ==8)
   {
      output_low(PIN_D0);
      output_low(PIN_D1);
      output_low(PIN_D2);
      output_high(PIN_D3);
   }
   if(deger ==9)
   {
      output_high(PIN_D0);
      output_low(PIN_D1);
      output_low(PIN_D2);
      output_high(PIN_D3);
   }
   
   
   
}
void displayexit2(int deger2)
{
   
   if(deger2 ==0)
   {
   
      output_low(PIN_D4);
      output_low(PIN_D5);
      output_low(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==1)
   {
      output_high(PIN_D4);
      output_low(PIN_D5);
      output_low(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==2)
   {
      output_low(PIN_D4);
      output_high(PIN_D5);
      output_low(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==3)
   {
      output_high(PIN_D4);
      output_high(PIN_D5);
      output_low(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==4)
   {
      output_low(PIN_D4);
      output_low(PIN_D5);
      output_high(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==5)
   {
      output_high(PIN_D4);
      output_low(PIN_D5);
      output_high(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==6)
   {
      output_low(PIN_D4);
      output_high(PIN_D5);
      output_high(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==7)
   {
      output_high(PIN_D4);
      output_high(PIN_D5);
      output_high(PIN_D6);
      output_low(PIN_D7);
   }
   if(deger2 ==8)
   {
      output_low(PIN_D4);
      output_low(PIN_D5);
      output_low(PIN_D6);
      output_high(PIN_D7);
   }
   if(deger2 ==9)
   {
      output_high(PIN_D4);
      output_low(PIN_D5);
      output_low(PIN_D6);
      output_high(PIN_D7);
   }
   
   
  
}
void displayexit3(int deger2)
{
   
   if(deger2 ==0)
   {
   
      output_c(0b0000);
   }
   if(deger2 ==1)
   {
      output_c(0b0001);
   }
   if(deger2 ==2)
   {
      output_c(0b0010);
   }
   if(deger2 ==3)
   {
      output_c(0b0011);
   }
   if(deger2 ==4)
   {
      output_c(0b0100);
   }
   if(deger2 ==5)
   {
      output_c(0b0101);
   }
   if(deger2 ==6)
   {
      output_c(0b0110);
   }
   if(deger2 ==7)
   {
      output_c(0b0111);
   }
   if(deger2 ==8)
   {
      output_c(0b1000);
   }
   if(deger2 ==9)
   {
      output_c(0b1001);
   }
   
   
  
}
int32 verisay=0;
int32 sayici()
{
   
   
      verisay++;
   if(verisay==999)
   {
      verisay=0;
   }
   return verisay;
}


BİRDEN FAZLA PIC KULLANMA




SANATSAL BİLGİ

26/11/2016

  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM


COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI