PİC ile Hesap Makinası yapımı

Selam arkadaşlar,

Bugün sizlerle CSS C de PİC16F877A entegresi ile hesap makinası yapacağız. Gerekli malzemeler gitHub hesabımdaki dosyanın içinde ( linki vereceğim) proteus programında çizdiğim devrede bulunmakta. Keypad ve lm016 lcd ekranı kullandım. Arduino ile de yapabilirdim fakat kendimi kütüphanelere boğmak istemedim. Calıştırma ortamı olarak proteusun bu özelliği keyif verici hiçbir malzemeyi yakmadan, bozmadan deney yapabiliyorsun.

sayi ve sayi1 değişkenleri ilk etapta 1. girilen sayi sayi değişkenine kaydedilirken biz yapacağımız işlemi seçtiğimizde toplama seçtik örnek + tusuna bastıgımızda sayi değişkeni sayi1 e eşitlenerek 1. sayi hafızada tutulur ve sayi=0 ve biz ikinci sayıyı yazdığımızda doğrudan 2.sayimiz sayi değişkenimiz ile işlem görür. 2 tane fonksiyon oluşturdum. birincisi sonuc_bul() bunu tus() fonkisyonun içerisinde çağırıyoruz. tus() fonkisyonuna genel olarak bakacak olursak ilk önce biz keypad kullanırken ne yapmamıza karar vermemiz lazım yani anlatmak istediğim( en son tekrardan buraya bağlayacam konuyu merak etmeyin 😀 ) keypadimizde 8 pin bulunmakta 4 giriş 4 çıkış biz bunların. Biz D portunun ilk dört bitini çıkış kalan son 4 bitide giriş yapıyoruz bunu zaten kodda belirttik set_tris_d(0xF0) diye ama biz bunu açarsak yani( giriş:1,çıkış:0) 0b11110000 olarak hexdecimal olarakta yazabilirdik. herneyse keypad kullanımı tam anlatamasamda böyle yani kütüphane kullanmadığımızdan işin ehlini öğreniyoruz. Kullanımı ile ilgili size bir link bıraktım orada daha iyi açıklıyor.

tus() fonksiyonuna gelecek olursak devreye enerji verdiğimizde bize 1. sayıyı girmemizi beklicek sonrasinda girdiğimiz x sayısını sayi kaydedecek biz onu herhangi bir işleme sokacağız(+-*/) bastığımızda “sayi1″ e kaydedecek ve ikinci sayıyı girdiğimizde” sayi” değişkeninden devam edecez. Sonucu öğrenmek için “=” bastığımızda bizi sonuc_bul() fonk gidecek ve oradaki islem değerine göre bize hesaplayıp ekrana yansıtacak. tus() fonk. bize geri dönüş olarak sayi1, sayi ve islem değişkenini dönderecek . Umarim mantığı aktarabilmisimdir

Detaylı Kaynak dosyalar

////////  HESAP MAKİNESİ  ///////

///// HALİL GÖK /////// YOUTUBE  //// TAKİP ET ////



#include <main.h>
#include <math.h>
#use fast_io(b)
#use fast_io(d)
#define use_portb_lcd TRUE

#include <lcd.c>

int16 sayi1=0;
int16  sayi=0;
int x=0;
int islem=0;
 int32 sonuc=0;

int sonuc_bul()
{ 
delay_ms(1000);
printf(lcd_putc,"\nsonuc=");
 switch (islem)
 {
  case 1:
    sonuc=(sayi1)+(sayi);  printf(lcd_putc,"%ld",sonuc);sayi1=0;sayi=0;x=0;islem=0;sonuc=0;break;
  case 2:
    sonuc=sayi1-sayi; printf(lcd_putc,"%ld",sonuc);sayi1=0;sayi=0;x=0;islem=0;sonuc=0; break;
  case 3:
    sonuc=sayi1*sayi; printf(lcd_putc,"%ld",sonuc);sayi1=0;sayi=0;x=0;islem=0;sonuc=0; break;  
  case 4:
    sonuc=sayi1/sayi;printf(lcd_putc,"%ld",sonuc);sayi1=0;sayi=0;x=0;islem=0;sonuc=0; break;
} 
 islem=0;
}
///// HALİL GÖK /////// YOUTUBE  //// TAKİP ET ////
char tus()
{
     output_high(pin_d0);
     if(input(pin_d4)){ while(input(pin_d4)); printf(lcd_putc,"7"); x=7; sayi=sayi*10 +x;  }  // 7
     if(input(pin_d5)){ while(input(pin_d5)); printf(lcd_putc,"8");  x=8; sayi=sayi*10 +x; }   // 8
     if(input(pin_d6)){ while(input(pin_d6)); printf(lcd_putc,"9");  x=9; sayi=sayi*10 +x;}   // 9
     if(input(pin_d7)){ while(input(pin_d7)); printf(lcd_putc,"/");  
      sayi1=sayi;     islem=4;     sayi=0;  }   // bölme
      output_low(pin_d0);
      
      output_high(pin_d1);
     if(input(pin_d4)){ while(input(pin_d4)); printf(lcd_putc,"4"); x=4; sayi=sayi*10 +x;}  // 4
     if(input(pin_d5)){ while(input(pin_d5)); printf(lcd_putc,"5");  x=5; sayi=sayi*10 +x;}   // 5
     if(input(pin_d6)){ while(input(pin_d6)); printf(lcd_putc,"6");  x=6; sayi=sayi*10 +x;}   //6
     if(input(pin_d7)){ while(input(pin_d7)); printf(lcd_putc,"*");
     sayi1=sayi;    islem=3;   sayi=0;}  // çarpma
      output_low(pin_d1);
      
      output_high(pin_d2);
     if(input(pin_d4)){ while(input(pin_d4)); printf(lcd_putc,"1"); x=1; sayi=sayi*10 +x;} // 1
     if(input(pin_d5)){ while(input(pin_d5)); printf(lcd_putc,"2");  x=2; sayi=sayi*10 +x;}  //2
     if(input(pin_d6)){ while(input(pin_d6)); printf(lcd_putc,"3");  x=3; sayi=sayi*10 +x;} //3
     if(input(pin_d7)){ while(input(pin_d7)); printf(lcd_putc,"-"); 
     sayi1=sayi;    islem=2;    sayi=0;     } //- çıkarma
      output_low(pin_d2);
      
       output_high(pin_d3);
     if(input(pin_d4)){ while(input(pin_d4)); printf(lcd_putc,"\f ON");printf(lcd_putc,"\f");sayi1=0;sayi=0;x=0;islem=0;sonuc=0;} 
     if(input(pin_d5)){ while(input(pin_d5)); printf(lcd_putc,"0"); x=0; sayi=sayi*10 +x;}
     if(input(pin_d6)){ while(input(pin_d6));
     sayi1;     sonuc_bul();     }// =
     
     if(input(pin_d7)){while(input(pin_d7)); printf(lcd_putc,"+");
     sayi1=sayi;     islem=1;     sayi=0;    }
      output_low(pin_d3);
      
      return sayi,sayi1,islem;
}


 ///// HALİL GÖK /////// YOUTUBE  //// TAKİP ET ////
void main()
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
setup_adc(ADC_OFF); // ADC birimi devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

set_tris_b(0x00);
set_tris_d(0xF0);  // ilk dört port çıkış kalan portlar giriş

lcd_init();
 
 printf(lcd_putc,"\fHalil Gok Kanala\n abone olalim");
 delay_ms(4000);
 printf(lcd_putc,"\f");
 printf(lcd_putc,"\Begenmeyi de\nunutmayalim :D");
 delay_ms(3000);
 printf(lcd_putc,"\f");
   while(TRUE)
   {
  
 tus();
    
   }
}///// HALİL GÖK /////// YOUTUBE  //// TAKİP ET ////

Yorum bırakın