CCS C ile yapılmış geniş bir örnek

Başlatan serhat1990, 15 Eylül 2012, 01:32:56

serhat1990

Arkadaşlar ccs c ' de artık kod yazmıyorum . Tabiki yazmayacam diye birşey yok :)  Dosya yedeklemesi yaparken buldum.
Bu senenin başlarında yaptığım bir örnek içerisinde pwm , usart , adc , seg , lcd , vs gibi bazı birimlerin kullanımı var  yeni başlayanlar umarım işinize yarar devre şeması ve kodlar ektedir. Takıldığınız yerleri konu altında sorabilirsiniz .

İyi çalışmalar.


#include <18f44j10.h> // işlemcinin dosyaları yüklenir.
#DEVICE ADC=10       //10 bit adc ...
#FUSES HS,NOWDT         //high speed osc . watch dog timer kapalı...
#USE delay(clock=16000000)    //16mhz osc kullanıyoruz..
#use fast_io(b)
#use fast_io(d)
#use fast_io(c)
#use RS232(baud=2400,xmit=PIN_C6,rcv=PIN_C7,stop=1,parity=N)      // 2400 bps hızında tx pini pin_ c6 , rx pini pin_c7 , stop biti 1 , eslik biti yok ___rs232 ayarları

unsigned int seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};        // 7 segment için dizi olusturduk..
unsigned int8 DEGER=0,anime=0;         //deger ve anime adında 8 bitlik bir degisken olusturduk. 
unsigned char i=0;                     // i adında 1 bytelık bir degisken olusturduk...
unsigned int16 adcbilgi1=0,adcbilgi2=0,adcbilgi3=0,adcbilgi4=0;
float voltaj0=0,voltaj1=0,voltaj2=0,voltaj3=0;     //voltaj0,voltaj1,voltaj2,voltaj3 adından ondalıklı degisken olusturduk...
unsigned char bilgi=0;  //pwm duty için bilgi adında bir değişken tanımladık...

#define LCD_ENABLE_PIN     PIN_c4      //lcd enable pini c4 
#define LCD_RS_PIN         PIN_c5      //lcd rs pini pin c5
#define LCD_RW_PIN         PIN_e2      //lcd rw pini pin e2

#define LCD_DATA4    PIN_c0         //lcdnin data4 pini pinc0 
#define LCD_DATA5    PIN_E0         //lcdnin data5 pini pinc1 
#define LCD_DATA6    PIN_E1         //lcdnin data6 pini pinc2 
#define LCD_DATA7    PIN_c3         //lcdnin data7 pini pinc3

#include <lcd.c>                    // lcd.c dosyasını yükler...



void port_ayar(void)    // portları ayarlayan fonksiyondur...
{
   port_b_pullups(0xFF);      // PORTB'NİN TÜM PİNLERİ PULL UP YAPILDI...
   set_tris_b(0xFF);       //B PORTUNU GİRİŞ YAPALIM.
   set_tris_d(0x00);       //d portunu çıkış yapalım.
   set_tris_e(0x00);       // e portu cıkıs yapıldı..
   set_tris_a(0b101111);     // a portunun ilk 4 pini giriş yapıldı..
   setup_adc(adc_clock_div_32);     //fosc/32 2uS 'De bir örnekleme alır...
   setup_adc_ports(AN0_TO_AN3);      //AN0 AN1 AN2 AN3 ANALOG GİRİS vcc vref+ , gnd vref- olarak ayarlandı....
   set_tris_c(0b10000000);    // rc pini giriş digerleri cıkıs
   output_b(0xFF);           //B PORTUNA lojik 1 yüklenir.
   output_d(0x00);            //  d portu temizlernir.
   output_c(0x00);            // c portu temizlenir...
   setup_ccp1(CCP_PWM);         //CCP1 MODULU PWM çıkışı ayarlandı..
   setup_ccp2(CCP_PWM);         //CCP MODULU PWM çıkışı ayarlandı..
   setup_timer_2(T2_DIV_BY_16,255,1);  //TİMER2 ayarları yapılıyor... PR2 DEGERİ 255 OLARAK ayarlandı. ( 8 bitte daha kolay işlem yapabilmek için )
   
}

void segment_goster(unsigned char deger)        //segment gösterme fonksiyonu....

{
   switch(deger)        //deger degiskeni degeri
   {
   case 0:{output_d(seg[0]);delay_ms(100);break;}  // 0 ise segmentte 0 yaz. 100 ms bekle döngüyü kır.
   case 1:{output_d(seg[1]);delay_ms(100);break;}  // 1 ise segmentte 1 yaz. 100 ms bekle döngüyü kır.
   case 2:{output_d(seg[2]);delay_ms(100);break;}  // 2 ise segmentte 2 yaz. 100 ms bekle döngüyü kır. 
   case 3:{output_d(seg[3]);delay_ms(100);break;}  // 3 ise segmentte 3 yaz. 100 ms bekle döngüyü kır.
   case 4:{output_d(seg[4]);delay_ms(100);break;}  // 4 ise segmentte 4 yaz. 100 ms bekle döngüyü kır.
   case 5:{output_d(seg[5]);delay_ms(100);break;}  // 5 ise segmentte 5 yaz. 100 ms bekle döngüyü kır.
   case 6:{output_d(seg[6]);delay_ms(100);break;}  // 6 ise segmentte 6 yaz. 100 ms bekle döngüyü kır.
   case 7:{output_d(seg[7]);delay_ms(100);break;}  // 7 ise segmentte 7 yaz. 100 ms bekle döngüyü kır.
   case 8:{output_d(seg[8]);delay_ms(100);break;}  // 8 ise segmentte 8 yaz. 100 ms bekle döngüyü kır.
   case 9:{output_d(seg[9]);delay_ms(100);break;}  // 9 ise segmentte 9 yaz. 100 ms bekle döngüyü kır.
   }
}

void usart_yolla(unsigned char deger)        //veri gönderme fonksiyonu...

{
   switch(deger)        // deger degiskeni degeri
   {
   case 0:{puts("DEGER=0");break;}  //0 ise usart'dan deger=0 gönder...
   case 1:{puts("DEGER=1");break;}  //1 ise usart'dan deger=1 gönder...
   case 2:{puts("DEGER=2");break;}  //2 ise usart'dan deger=2 gönder...
   case 3:{puts("DEGER=3");break;}  //3 ise usart'dan deger=3 gönder...
   case 4:{puts("DEGER=4");break;}  //4 ise usart'dan deger=4 gönder...
   case 5:{puts("DEGER=5");break;}  //5 ise usart'dan deger=5 gönder...
   case 6:{puts("DEGER=6");break;}  //6 ise usart'dan deger=6 gönder...
   case 7:{puts("DEGER=7");break;}  //7 ise usart'dan deger=7 gönder...
   case 8:{puts("DEGER=8");break;}  //8 ise usart'dan deger=8 gönder...
   case 9:{puts("DEGER=9");break;}  //9 ise usart'dan deger=9 gönder...
   }
}

void acilis_animasyon(void)         //acılıs animasyonu devre enerjisi verildikten sonra bir kere gerceklesir...

{
   
   for(i=0;i<10;i++)       // 10 kere işlemleri tekrarla...
   {
   lcd_gotoxy(2,1);printf(lcd_putc,"PicProje ");     //lcd 1.satır 2.sütundan itibaren picproje yaz...
   lcd_gotoxy(2,2);printf(lcd_putc,"DEGER=%d",anime);    //lcd 2.satır 2.sütundan itibaren deger= yaz ve sonra decimal olarak anime degiskeni içeriğini yaz...
   segment_goster(anime);           //anime degiskeni sayısını segmentte göster...
   usart_yolla(anime);              //anime degiskeni sayısını usarttan gönder...
   delay_ms(200);                   //200 ms bekle...
   anime++;                         //anime degiskenini 1 arttır...
   }
}


void adc_oku(void)

{
   set_adc_channel(0);     //0. adc kanalını sec...
   delay_us(20);     //adc birimini secince belli bir süre bekleme gerekiyor ( datasheet )
   adcbilgi1=read_adc();      //0.kanaldan adc bilgisini oku adcbilgi1 degiskenine ata..
   
   set_adc_channel(1);     //1. adc kanalını sec...
   delay_us(20);     //adc birimini secince belli bir süre bekleme gerekiyor ( datasheet )
   adcbilgi2=read_adc();      //1.kanaldan adc bilgisini oku adcbilgi1 degiskenine ata..
   
   set_adc_channel(2);     //2. adc kanalını sec...
   delay_us(20);     //adc birimini secince belli bir süre bekleme gerekiyor ( datasheet )
   adcbilgi3=read_adc();      //2.kanaldan adc bilgisini oku adcbilgi1 degiskenine ata..
   
   set_adc_channel(3);     //3. adc kanalını sec...
   delay_us(20);     //adc birimini secince belli bir süre bekleme gerekiyor ( datasheet )
   adcbilgi4=read_adc();      //3.kanaldan adc bilgisini oku adcbilgi1 degiskenine ata..
   
   voltaj0=adcbilgi1*0.0048828125;    //5/1024=0.0048828125 ADIM voltajı...
   voltaj1=adcbilgi2*0.0048828125;    //5/1024=0.0048828125 ADIM voltajı...
   voltaj2=adcbilgi3*0.0048828125;    //5/1024=0.0048828125 ADIM voltajı...
   voltaj3=adcbilgi4*0.0048828125;    //5/1024=0.0048828125 ADIM voltajı...
   
   
}

void pwm_yap(unsigned char bilgi)
{
   set_pwm1_duty(bilgi);      //1.kanaldan bilgi degiskeni oranında pwm üret.
   set_pwm2_duty(255-bilgi);  //2.kanaldan bilgi degiskenin tam tersi oranında pwm üret...
}   
  
  
void adc_goster()       //adc 'den ölçtüğü degeri lcd'de gösteren fonksiyondur...
{
         adc_oku();     //adc_oku fonksiyonuna git...
         lcd_gotoxy(2,1);printf(lcd_putc,"VOLTAJ DEGERLERI");     //lcd 1.satır 2.sütundan itibaren  yaz..
         Delay_ms(200);                                           //200 ms bekle  
         printf(lcd_putc,"\f");         //lcd'yi temizle    
         lcd_gotoxy(1,1);printf(lcd_putc,"CHANNEL1=%3f",voltaj0);   //kanal1 voltajını göster
         lcd_gotoxy(1,2);printf(lcd_putc,"CHANNEL2=%3f",voltaj1);   //kanal2 voltajını göster
         Delay_ms(1000);                                           //1 sn bekle
         printf(lcd_putc,"\f");         //lcd'yi temizle
         lcd_gotoxy(1,1);printf(lcd_putc,"CHANNEL3=%3f",voltaj2); //kanal3 voltajını göster
         lcd_gotoxy(1,2);printf(lcd_putc,"CHANNEL4=%3f",voltaj3); //kanal4 voltajını göster.
         Delay_ms(1000);            //1sn bekle
         printf(lcd_putc,"\f");         //lcd'yi temizle
}         
   
   
   


void main()       //ana fonksiyon...

{
   lcd_init();          //lcd dosyalarını yükle
   printf(lcd_putc,"\f"); //lcd'yi temizle
   port_ayar();      // portları ayarla...
   acilis_animasyon();  //acilis animasyonunu yap...
   
   
   while(TRUE)       //sonsuz döngüye giriliyor.
   
   {

   bilgi=bilgi+5;       //duty degerini 5 arttır. 
   pwm_yap(bilgi);     //pwm üret.
   lcd_gotoxy(2,1);printf(lcd_putc,"PicProje ");     //lcd 1.satır 2.sütundan itibaren PicProje yaz..
   lcd_gotoxy(2,2);printf(lcd_putc,"DEGER=%d",DEGER);    //lcd 2.satır 2.sütundan itibaren deger= yaz ve ardından deger degiskeninin desimal karsılıgını yaz..
   
      if(input(PIN_B0)==0)DEGER=0;     // b0 butonuna basılırsa deger degıskenini 0 yap
      if(input(PIN_B1)==0)DEGER=1;     // b1 butonuna basılırsa deger degıskenini 1 yap
      if(input(PIN_B2)==0)DEGER=2;     // b2 butonuna basılırsa deger degıskenini 2 yap
      if(input(PIN_B3)==0)DEGER=3;     // b3 butonuna basılırsa deger degıskenini 3 yap
      if(input(PIN_B4)==0)DEGER=4;     // b4 butonuna basılırsa deger degıskenini 4 yap
      if(input(PIN_B5)==0)DEGER=5;     // b5 butonuna basılırsa deger degıskenini 5 yap
      if(input(PIN_B6)==0)DEGER=6;     // b6 butonuna basılırsa deger degıskenini 6 yap
      if(input(PIN_B7)==0)DEGER=7;     // b7 butonuna basılırsa deger degıskenini 7 yap
      

      segment_goster(DEGER);        //segmentte deger degiskenini göster...
      usart_yolla(DEGER);           //deger degiskenini usarttan gönder...
      
      
       printf(lcd_putc,"\f");         //lcd'yi temizle
       
       if(input(PIN_A5)==1)      //ADC OKU BUTONUNA BASILDIYSA
       {
         adc_goster();     //adc goster fonksiyonunu yap...
       }
      
   }   

}



http://www.upload.gen.tr/d.php/www/vkrop526/cok_sey_xD.rar.html

italyan3

paylaşımlar için teşekkrler.  şimdi pek anlam veremesemde zamanla öğrencem inş.b u örnekte çok geniş olmuş :)

Okan AKÇA

#2
bende bir şeyler paylaşayım.. :D
#
void setup_rtc_adr()
{
 
   
   if(timer1_2>12)                                                                                                                                                                                                                
   {
                                                                                                                                                                                                                                          
        
    timer1_2=0;
    
   fall_down++;
   if(fall_down>120) {fall_down=0;  set_giris=0; ana_menu=0; timer1_2=0; ilk_menu=0; adr_kontrol=0; rtc_kontrol=0;  rtc_updown=0;     rs_485_kontrol=1; if(rs_485_buffer[1]==6&&adres_alma==2) { putc(rs_485_buffer[0]); adres_alma=0;}        }

      
   

    
    
    
    if(!input(up)&&ilk_menu==1)    {ana_menu++; if(ana_menu==3) ana_menu=1; fall_down=0;  }
    
    
    if(!input(down)&&ilk_menu==1)  {ana_menu--; if(ana_menu==0) ana_menu=2;fall_down=0;  }
    
    
    if(!input(esc)&&ilk_menu==1)   {set_giris=0;ilk_menu=0;ana_menu=0;  fall_down=0;    rs_485_kontrol=1; }                                          
    
  
    
    
    if(!input(set)&&ana_menu==1&&set_lock==0) {adr_kontrol=1; ilk_menu=0;  sayi_hane(adres); displey[9]=yuzler; displey[10]=onlar; displey[11]=birler;   ana_menu=0;  set_lock=1;  fall_down=0;   }  // adr menüsüne giriş  set basıldıgında
    
  
    
    if(!input(set)&&ana_menu==2&&set_lock==0) {rtc_kontrol=1;   ilk_menu=0;  set_lock=1;  ana_menu=0;  rtc_updown=1;   fall_down=0;   }  // rtc menüsüne giriş
    
    
    
    if(rs_485_buffer[1]==6&&ana_menu==1&&adres_alma==1) { adres_alma=2; adr_kontrol=1; ilk_menu=0;  if(rs_485_buffer[0]==0 )   sayi_hane(adres); else { adres=rs_485_buffer[0];   sayi_hane(adres); }   displey[9]=yuzler; displey[10]=onlar; displey[11]=birler;   ana_menu=0;  set_lock=1;  fall_down=0;    }
    
    
    
    
    
    
    
  
    
    if(!input(up)&&rtc_updown==1) {rtc_kontrol++; if(rtc_kontrol==3) rtc_kontrol=1; fall_down=0;  }
                                
                               
    if(!input(down)&&rtc_updown==1) {rtc_kontrol--; if(rtc_kontrol==0) rtc_kontrol=2;fall_down=0;  }
                                
    
    if(!input(esc)&&rtc_updown==1) {ana_menu=2; rtc_kontrol=0; rtc_updown=0;ilk_menu=1; fall_down=0;  }
    
    
    
    if(!input(set)&&rtc_updown==1&&set_lock==0)  {rtc_updown=2; set_lock=1;  fall_down=0;  if(rs_485_buffer[1]==6&&adres_alma==2) { putc(rs_485_buffer[0]); adres_alma=0;}  }
    
    
    ///////////////////////////////////////////////////////////////////////////////////////
    
    
    
    

    
     switch (adr_kontrol)
      { 
      
     
   
      case 1:
      
         if(!input(up))
          {
            adres++;
            if(adres>120) adres=1; 
            
            sayi_hane(adres); displey[9]=yuzler; displey[10]=onlar; displey[11]=birler;
           
            fall_down=0; 
          }
       
          
         if(!input(down))
          {
            adres--;
            if(adres==0) adres=120;
           
            sayi_hane(adres); displey[9]=yuzler; displey[10]=onlar; displey[11]=birler;
            
            fall_down=0; 
          }
       
       
       if(!input(esc)) { ilk_menu=1; for(i=8;i<25;i++) displey[i]=16; adr_kontrol=0;   ana_menu=1;  fall_down=0; if(rs_485_buffer[1]==6&&adres_alma==2) { putc(rs_485_buffer[0]); adres_alma=0;}    }
       
        
       
     if(set_lock==0)
        {
       if(!input(set)) { adr_kontrol=2;    for(i=20;i<25;i++) displey[i]=0;  set_lock=1;  fall_down=0; 
       
                          yatak_adres(adres);
                          sayi_hane(yatak_no=read_16()); 
                          displey[20]= binler;  
                          displey[21]=yuzler; 
                          displey[22]= onlar;  
                          displey[23]=birler; 
                          
                        // adres verme
                          if(rs_485_buffer[1]==6&&adres_alma==2) { putc(adres); adres_alma=0;}
                          
                          
                       }
       
        }
     
         
            break;
    
     case 2:
        if(!input(up)) {
                       binler++;  if(binler==16) binler=0;    displey[20]= binler;  fall_down=0;           
                     }
        if(!input(down)) {
                      if(binler==0) binler=16;  binler--;        displey[20]= binler; fall_down=0; 
                        }
                       
       
                       
        if(!input(esc)) {   adr_kontrol=1;  for(i=20;i<25;i++) displey[i]=16;  birler=0; onlar=0; yuzler=0; binler=0;  fall_down=0;  }



      if(set_lock==0)
        {
        if(!input(set)) {adr_kontrol=3; displey[20]=binler;  set_lock=1; fall_down=0;  }
                         
                        
        }
     
            break;
           
            
      case 3:
        if(!input(up)) {
                       yuzler++;  if(yuzler==10) yuzler=0;     displey[21]=yuzler;    fall_down=0;        
                     }
        if(!input(down)) {
                      if(yuzler==0) yuzler=10;  yuzler--;     displey[21]=yuzler;     fall_down=0; 
                       }
                       
                     
                       
       if(!input(esc)) {   adr_kontrol=1;  for(i=20;i<25;i++) displey[i]=16;  birler=0; onlar=0; yuzler=0; binler=0;  fall_down=0; }

     if(set_lock==0)
        {  
      if(!input(set)) {adr_kontrol=4;displey[21]=yuzler; set_lock=1; fall_down=0;  }
        }
       
  
            break;   
      
      case 4:
           if(!input(up)) {
                       onlar++;  if(onlar==10) onlar=0;     displey[22]= onlar; fall_down=0;            
                     }
           if(!input(down)) {
                      if(onlar==0) onlar=10;  onlar--;     displey[22]=onlar;     fall_down=0; 
                       }
                       
        
           
          if(!input(esc)) {   adr_kontrol=1;  for(i=20;i<25;i++) displey[i]=16;  birler=0; onlar=0; yuzler=0; binler=0;fall_down=0;  }


         if(set_lock==0)
         {
         if(!input(set)) {adr_kontrol=5;  displey[22]=onlar; set_lock=1;fall_down=0;  }
         }
         

  
            break;   
     
      case 5:
           if(!input(up)) {
                      birler++;  if(birler==10) birler=0;     displey[23]= birler; fall_down=0;           
                     }
           if(!input(down)) {
                      if(birler==0) birler=10;  birler--;     displey[23]=birler;  fall_down=0; 
                       }
                             
                       
           if(!input(esc)) {   adr_kontrol=1;  for(i=20;i<25;i++) displey[i]=16;  birler=0; onlar=0; yuzler=0; binler=0; flas=0; fall_down=0;  }



         if(set_lock==0)    
      
         {
         if(!input(set)) 
                           {
                            
                        
                           yatak_no=(binler*1000)+(yuzler*100)+(onlar*10)+(birler);
                           eprom1=make8(yatak_no,0);
                           eprom2=make8(yatak_no,1);
                           buffer=adres*2;  
                           write_eeprom(buffer,eprom1); // degersiz bit
                           buffer=buffer-1;  
                           write_eeprom(buffer,eprom2); // en degerli bit
                            
                           adr_kontrol=1;  for(i=12;i<25;i++) displey[i]=16;  birler=0; onlar=0; yuzler=0; binler=0;    fall_down=0; 
                            
                            
                           }
         }
         
           break;   
      
      }
 
    
    
  
      switch (rtc_kontrol)
      { 
      
   //hr 
      case 1:
      
            displey[4]=16;
            displey[5]=16;
            displey[6]=21;
            displey[7]=18;
    
      if(rtc_updown==2) 
                       {  
                      
                       if(!input(up)) { hr++; if(hr==24) hr=0;     fall_down=0;              }
                        
                       if(!input(down)) { if(hr==0) hr=24;    hr--;     fall_down=0;         }
                       
                        sayi_hane(hr);displey[10]= onlar;  displey[11]=birler;
                        
                       
                       if(!input(set)&&set_lock==0){ rtc_set_datetime(8,1,9,2,hr,min); set_lock=1; rtc_updown=1;  displey[10]=16; displey[11]=16; fall_down=0;  }
                       
                       if(!input(esc)) {     rtc_updown=1;    displey[10]=16; displey[11]=16;  fall_down=0;       }
                       
                       
                       }
      
            break;
    //min
     case 2:
        
            displey[4]=16;
            displey[5]=22;
            displey[6]=23;
            displey[7]=22;
      if(rtc_updown==2) 
                       {  
                       
                        if(!input(up)) { min++; if(min==60) min=0;   fall_down=0;                }
                        
                       if(!input(down)) { if(min==0) min=60;    min--;    fall_down=0;          }
                    
                       sayi_hane(min); displey[10]= onlar;  displey[11]=birler; 
                       
                       if(!input(set)&&set_lock==0){ rtc_set_datetime(0,0,0,0,hr,min); set_lock=1; rtc_updown=1;  displey[10]=16; displey[11]=16; fall_down=0;   }
                       if(!input(esc)) {     rtc_updown=1;    displey[10]=16; displey[11]=16;  fall_down=0;       }
                       
                       } 
            break;
    
      }
    
  /////////////////////////////////////////////////////////////////////////////  
    
    
     switch (ana_menu)
      { 
      
     
    /// adr  
      case 1:
      
       
         
            displey[4]=16;
            displey[5]=10;
            displey[6]=17;
            displey[7]=18;
       
      
         
            break;
    // rtcc
     case 2:
        
            displey[4]=16;
            displey[5]=18;
            displey[6]=19;
            displey[7]=20;
         
            break;
    
      }
    

      }
      if(input(set)) set_lock=0;
      
}

arslan74

#3
void segment_goster(unsigned char deger)        //segment gösterme fonksiyonu....

{
   switch(deger)        //deger degiskeni degeri
   {
   case 0:{output_d(seg[0]);delay_ms(100);break;}  // 0 ise segmentte 0 yaz. 100 ms bekle döngüyü kır.
   case 1:{output_d(seg[1]);delay_ms(100);break;}  // 1 ise segmentte 1 yaz. 100 ms bekle döngüyü kır.
   case 2:{output_d(seg[2]);delay_ms(100);break;}  // 2 ise segmentte 2 yaz. 100 ms bekle döngüyü kır. 
   case 3:{output_d(seg[3]);delay_ms(100);break;}  // 3 ise segmentte 3 yaz. 100 ms bekle döngüyü kır.
   case 4:{output_d(seg[4]);delay_ms(100);break;}  // 4 ise segmentte 4 yaz. 100 ms bekle döngüyü kır.
   case 5:{output_d(seg[5]);delay_ms(100);break;}  // 5 ise segmentte 5 yaz. 100 ms bekle döngüyü kır.
   case 6:{output_d(seg[6]);delay_ms(100);break;}  // 6 ise segmentte 6 yaz. 100 ms bekle döngüyü kır.
   case 7:{output_d(seg[7]);delay_ms(100);break;}  // 7 ise segmentte 7 yaz. 100 ms bekle döngüyü kır.
   case 8:{output_d(seg[8]);delay_ms(100);break;}  // 8 ise segmentte 8 yaz. 100 ms bekle döngüyü kır.
   case 9:{output_d(seg[9]);delay_ms(100);break;}  // 9 ise segmentte 9 yaz. 100 ms bekle döngüyü kır.
   }
}


Kodlar pek optimize yazılmamış.

void segment_goster(unsigned char deger)        //segment gösterme fonksiyonu....
{
     output_d(seg[deger]);
     delay_ms(100);
}


Aynı işi görecektir. Ama daha optimize ve hızlı bir şekilde çalışacaktır.

Hatta bunun fonksiyon yazmaya bile gerek yok.

Doğrudan

segment_goster(deger);


fonksiyonunun yerine.

output_d(seg[deger]);
delay_ms(100);


şeklinde bile yazılabilinir.

Selamlar

mesaj birleştirme:: 22 Eylül 2012, 01:50:20

void usart_yolla(unsigned char deger)        //veri gönderme fonksiyonu...
{
   switch(deger)        // deger degiskeni degeri
   {
   case 0:{puts("DEGER=0");break;}  //0 ise usart'dan deger=0 gönder...
   case 1:{puts("DEGER=1");break;}  //1 ise usart'dan deger=1 gönder...
   case 2:{puts("DEGER=2");break;}  //2 ise usart'dan deger=2 gönder...
   case 3:{puts("DEGER=3");break;}  //3 ise usart'dan deger=3 gönder...
   case 4:{puts("DEGER=4");break;}  //4 ise usart'dan deger=4 gönder...
   case 5:{puts("DEGER=5");break;}  //5 ise usart'dan deger=5 gönder...
   case 6:{puts("DEGER=6");break;}  //6 ise usart'dan deger=6 gönder...
   case 7:{puts("DEGER=7");break;}  //7 ise usart'dan deger=7 gönder...
   case 8:{puts("DEGER=8");break;}  //8 ise usart'dan deger=8 gönder...
   case 9:{puts("DEGER=9");break;}  //9 ise usart'dan deger=9 gönder...
   }
}


Yerine aşağıdaki gibi optimize kod yazılabilinir. usart_yolla yerinde doğrudan

printf("DEGER=%d",deger);


veya

printf(putchar, "DEGER=%d",deger);


şeklinde de olabilinir. ikincisinden için fazla emin değilim. Cünkü CCS kullanmiyorum. Ama CCS de öyle birşeylerin olduğunu hatırliyorum.

Selamlar

xoom


serhat1990

Arslan Hocam haklısınız işlemleri çok fazla uzattım programda . Düzenlemeler teşekkürler .

Program yazmanın önemli olduğu gibi optimizasyon konusununda çok önemli olduğunu göstermek çok iyi oldu .

İyi Çalışmalar.

vedo35

Arkadasim link alan adi kapali yeni bir link koymaniz mumkunmu rica etsem bana cok lazimdida. Simdiden tesekkurler.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

serhat1990

Link çalışıyor test ettim . Tekrar denermisiniz ?

vedo35

Dun serveri gecici kapatmislardi herhalde. Evet simdi denedim oldu, cok tesekkur ederim. bu ornekler cok isime yarayacak.
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

serhat1990

Umarım işinize yarar ; iyi çalışmalar dilerim .

Extreme


serhat1990

Alıntı yapılan: Extreme - 11 Kasım 2012, 18:37:52
Paylasım güzel. Devamını bekleriz.

Umarım devamı gelecek , eğer gerekli zamanı ayarlayabilirsek :)

Zaman konusunda biraz sıkıntım var şu sıralar en yakın sürede yeni paylaşımlar gelecek.

İyi Çalışmalar Dilerim.

toprak0258

merhabalar....
vermiş olduğunuz örnekleri inceliyorum ....gayet güzel olmuş ama şeklini isis te çizdim...fakat çalışmadı ....acaba  ısıste yanlış mı yapıyorum...bunun için açaba ısıs şeklini verebilirmisiniz....
selamlar......
Bilgi paylaşıldıkca değer kazanır.

serhat1990

Alıntı yapılan: toprak0258 - 17 Aralık 2012, 21:26:40
merhabalar....
vermiş olduğunuz örnekleri inceliyorum ....gayet güzel olmuş ama şeklini isis te çizdim...fakat çalışmadı ....acaba  ısıste yanlış mı yapıyorum...bunun için açaba ısıs şeklini verebilirmisiniz....
selamlar......

Merhabalar , en üstteki yazımda link içerisinde proteus 7.8 versiyonu çizim mevcut . İndirip üzerinde çalışabilirsiniz .

İyi çalışmalar dilerim ...

toprak0258

merhabalar....
linki açtım güzel bir şekilde çalışıyor.....fakat ben yeni öğrenmeye çalıştığım için biraz ağır  geliyor....daha basit örnekleri bulup onlara daha fazla bakmam gerekiyor....yinede paylaşım için teşekürler.....
selamlar.....
Bilgi paylaşıldıkca değer kazanır.