16f877 ile bilimsel hesap makinesi

Başlatan remo_35, 11 Mayıs 2011, 02:18:44

remo_35

  merhabalar,ccs ile bilimsel hesap makinesi yapmaya çalışıyorum.tuş takımını sürekli taratarak işlemler yaptım,aşağıdaki kod sadece maksimum iki basamaklı ilk sayıyı alacak ve ekranda gösterecekti .fakat bu şekilde program çok uzun oldu ve çalışmadı.Fonksiyon ve dizi kullanmayı denedim ama olmadı bende bu şekilde yazmaya çalışıyorum şuanda.
  Daha önceki kodlarımda üç basamaklı sayı almak için dizi kullanmıştım şu şekilde yazmıştım.
  int dizi[3]={0,0,0}; daha sonra dizi[0] keypadden girilen ilk deger , dizi[1] ikinci ve dizi[3] üçüncü deger olmak üzere ekranda bu üç basmaklı sayıyı  sayi=dizi[0]*100+dizi[1]*10+dizi[3] şeklinde yazmıştım.örneğin;123 için 1*100+2*10+3 şeklinde daha sonrada lcd ye gönderirim diye düşünmüştüm.
  devrenin proteus şeması burda;
  http://i1105.hizliresim.com/2011/5/11/1223.jpg

fonksiyon kullanmadan yaptığım ve kod yazmında hata vermeyen ama işleyiş olarak yanlış olan programı aşağıya yazdım;


#include <16f877.h>

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)

#use fast_io(b)
#use fast_io(d)
#use fast_io(c)

#define use_portb_lcd TRUE

#include <lcd.c>
#define sut1 pin_d0
#define sut2 pin_d1
#define sut3 pin_d2
#define sut4 pin_d3
#define sut5 pin_c0

#define sat1 pin_d4
#define sat2 pin_d5
#define sat3 pin_d6
#define sat4 pin_d7


int tus=0,deger=0;
int sayi=0;
int sayi1=0;
int sayi2=0,topla=0,sayi3=0;


void main ( )
{
   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_b(0x01);
   set_tris_d(0x0F);
   set_tris_c(0x01);
   while(1)
   {
   output_d(0x00);
   while(sayi1==0)
   {
 
   output_high(sat1);
   if (input(sut1))   
      { delay_ms(20); tus=1; }
   if (input(sut2))   
      { delay_ms(20); tus=2; }
   if (input(sut3))   
      { delay_ms(20); tus=3; }
   if (input(sut4))   
      { delay_ms(20); tus=0xAA; }
   if (input(sut5))   
      { delay_ms(20); tus=0xA; }
   output_low(sat1);
   
   output_high(sat2);
   if (input(sut1))   
      { delay_ms(20); tus=4; }
   if (input(sut2))   
      { delay_ms(20); tus=5; }
   if (input(sut3)) 
      { delay_ms(20); tus=6; }
   if (input(sut4))   
      { delay_ms(20); tus=0xBB; }
   if (input(sut5))   
      { delay_ms(20); tus=0xB; }   
   output_low(sat2);
   
   output_high(sat3);
   if (input(sut1))   
      { delay_ms(20); tus=7; }
   if (input(sut2))   
      { delay_ms(20); tus=8; }
   if (input(sut3))   
      { delay_ms(20); tus=9; }
   if (input(sut4))   
      {delay_ms(20); tus=0xCC; }
   if (input(sut5))   
      { delay_ms(20); tus=0xC; }   
   output_low(sat3);
   
   output_high(sat4);
   if (input(sut1))   
      { delay_ms(20); tus=0xF; }
   if (input(sut2))   
      { delay_ms(20); tus=0; }
   if (input(sut3))   
      { delay_ms(20); tus=0xE;}
   if (input(sut4))   
      {delay_ms(20); tus=0xDD;}
   if (input(sut5))   
      { delay_ms(20); tus=0xD;}
   output_low(sat4);
   tus=sayi1;
   }
   delay_ms(500);
   tus=0;
    output_high(sat1);
   if (input(sut1))   
      { delay_ms(20); tus=1; }
   if (input(sut2))   
      { delay_ms(20); tus=2; }
   if (input(sut3))   
      { delay_ms(20); tus=3; }
   if (input(sut4))   
      { delay_ms(20); tus=0xAA; }
   if (input(sut5))   
      { delay_ms(20); tus=0xA; }
   output_low(sat1);
   
   output_high(sat2);
   if (input(sut1))   
      { delay_ms(20); tus=4; }
   if (input(sut2))   
      { delay_ms(20); tus=5; }
   if (input(sut3)) 
      { delay_ms(20); tus=6; }
   if (input(sut4))   
      { delay_ms(20); tus=0xBB; }
   if (input(sut5))   
      { delay_ms(20); tus=0xB; }   
   output_low(sat2);
   
   output_high(sat3);
   if (input(sut1))   
      { delay_ms(20); tus=7; }
   if (input(sut2))   
      { delay_ms(20); tus=8; }
   if (input(sut3))   
      { delay_ms(20); tus=9; }
   if (input(sut4))   
      {delay_ms(20); tus=0xCC; }
   if (input(sut5))   
      { delay_ms(20); tus=0xC; }   
   output_low(sat3);
   
   output_high(sat4);
   if (input(sut1))   
      { delay_ms(20); tus=0xF; }
   if (input(sut2))   
      { delay_ms(20); tus=0; }
   if (input(sut3))   
      { delay_ms(20); tus=0xE;}
   if (input(sut4))   
      {delay_ms(20); tus=0xDD;}
   if (input(sut5))   
      { delay_ms(20); tus=0xD;}
   output_low(sat4);
   delay_ms(500);
   if(tus!=0xAA)
   {
      while(sayi2==0)
      {
      output_high(sat1);
      if (input(sut1))   
       { delay_ms(20); tus=1; }
      if (input(sut2))   
       { delay_ms(20); tus=2; }
      if (input(sut3))   
       { delay_ms(20); tus=3; }
      if (input(sut4))   
       { delay_ms(20); tus=0xAA; }
      if (input(sut5))   
       { delay_ms(20); tus=0xA; }
      output_low(sat1);
   
      output_high(sat2);
      if (input(sut1))   
       { delay_ms(20); tus=4; }
      if (input(sut2))   
       { delay_ms(20); tus=5; }
      if (input(sut3)) 
       { delay_ms(20); tus=6; }
      if (input(sut4))   
       { delay_ms(20); tus=0xBB; }
      if (input(sut5))   
       { delay_ms(20); tus=0xB; }   
      output_low(sat2);
   
      output_high(sat3);
      if (input(sut1))   
       { delay_ms(20); tus=7; }
      if (input(sut2))   
       { delay_ms(20); tus=8; }
      if (input(sut3))   
       { delay_ms(20); tus=9; }
      if (input(sut4))   
       {delay_ms(20); tus=0xCC; }
      if (input(sut5))   
       { delay_ms(20); tus=0xC; }   
      output_low(sat3);
   
      output_high(sat4);
      if (input(sut1))   
       { delay_ms(20); tus=0xF; }
      if (input(sut2))   
       { delay_ms(20); tus=0; }
      if (input(sut3))   
       { delay_ms(20); tus=0xE;}
      if (input(sut4))   
       {delay_ms(20); tus=0xDD;}
      if (input(sut5))   
       { delay_ms(20); tus=0xD;}
      output_low(sat4);
      sayi2=tus;
      }
    }
        tus=0;
         if(sayi2!=0)
         {
          topla=(sayi1*10)+sayi2;
         sayi3=sayi1+sayi1;
         printf(lcd_putc,"%d",sayi3);}
         if(sayi2==0)
         {
         sayi3=sayi1;
         printf(lcd_putc,"%d",sayi3);
         }
   }

}