CCS C ile display uygulama lütfen yardım

Konusu 'Pic Programlama' forumundadır ve servermaster tarafından 12 Aralık 2009 başlatılmıştır.

  1. servermaster
    Çevrimdışı

    servermaster Yeni Üye

    Katılım:
    24 Kasım 2009
    Mesajlar:
    33
    Beğenilen Mesajları:
    1
    Ödül Puanları:
    8

    ORTAK KATOT DİSPLAY İLE 0-99 SAYICI YAPIP ARTTIR AZALT BUTONLARI İLE SEÇİLEN RAKKAMDAN GERİYE SAYMASINI İSTEDİM ancak çalıştıramadım ustalardan yardım istiyorum şimdiden teşekkür ederim aşağıda yazdığım kodlarda nerede hata yaptığımı yazarmısınız

    #include "C:\Documents and Settings\skyvision\Belgelerim\CCS S DENEME\displayuygulama\16f877ikilidisplay\Yeni Klasör\main.h"
    #use fast_io(a)
    #use fast_io(b)
    #define display_1 pin_a0
    #define display_2 pin_a1
    #define arttir pin_a4
    #define azalt pin_a5
    char birler=0,onlar=0,sayi=0;
    int i;
    const int digit[10]={0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};

    void main()
    {

    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    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(0xfc);
    set_tris_b(0x00);
    output_low(display_1);
    output_low(display_2);

    // TODO: USER CODE!!

    while(true)

    {

    birler=sayi%10;
    onlar=sayi/10;
    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);


    if(input(arttir));

    {
    delay_ms(10);// buton arkını önlemek için gecikme
    sayi++;
    if(sayi==100);
    sayi=0;
    birler=sayi%10;
    onlar=sayi/10;

    while(input(arttir))

    {

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);

    }
    }

    if(input(azalt));

    {
    delay_ms(10);
    sayi--;
    if(sayi==100);
    sayi=0;// sayi sıfır olmadığı sürece döngüyü işle
    birler=sayi%10;
    onlar=sayi/10;


    while(input(azalt));

    {

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);

    }
    }

    while(true)
    {

    for(i=sayi;i<=100;i--)

    {

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);

    }
    }
    }

    }
    Entes
    Entes
  2. servermaster
    Çevrimdışı

    servermaster Yeni Üye

    Katılım:
    24 Kasım 2009
    Mesajlar:
    33
    Beğenilen Mesajları:
    1
    Ödül Puanları:
    8
    Sayın ustalar bazı yerlerdeki hatalarımı buldum ancak geri saydırma işini bir türlü halledemedim yeni kodlar aşağıda ki kodlarda azalt ve arttır butonları ile displaye gönderiyorum sorun yok gönderdiğim rakkamı geri saydıramadım ancak ne yapmam lazım ccs c bilen arkadaşların yardımlarını bekliyorum
    #include "C:\Documents and Settings\skyvision\Belgelerim\CCS S DENEME\displayuygulama\16f877ikilidisplay\Yeni Klasör\main.h"
    #use fast_io(a)
    #use fast_io(b)
    #define display_1 pin_a0
    #define display_2 pin_a1
    #define arttir pin_a2// arttır ma işlemi için a4 pini
    #define azalt pin_a3
    char birler=0,onlar=0,sayi=0;





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

    void main()
    {

    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);

    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    set_tris_a(0xFC);
    set_tris_b(0x00);
    output_low(display_1);
    output_low(display_2);

    // TODO: USER CODE!!

    while(true)

    {

    birler=sayi%10;
    onlar=sayi/10;

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);


    if(input(arttir))

    {
    delay_ms(10);// buton arkını önlemek için gecikme
    sayi++;
    if(sayi==100)
    sayi=0;

    birler=sayi%10;
    onlar=sayi/10;
    while (input(arttir))

    {

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);

    }
    }
    if(input(azalt)&&(sayi!=0))

    {
    delay_ms(10);// buton arkını önlemek için gecikme
    sayi--;
    if(sayi==100)
    sayi=0;

    birler=sayi%10;
    onlar=sayi/10;
    while (input(azalt))

    {

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);


    }
    }
    }
    }
  3. myurdabak
    Çevrimdışı

    myurdabak Yeni Üye

    Katılım:
    31 Ocak 2008
    Mesajlar:
    543
    Beğenilen Mesajları:
    18
    Ödül Puanları:
    18
    Meslek:
    Elek.Elekt.Mühendisi
    programın azaltma bölümünde

    if(sayi==100)
    sayi==0; hata burada azaltma yapıyorsun artırma değil...
  4. servermaster
    Çevrimdışı

    servermaster Yeni Üye

    Katılım:
    24 Kasım 2009
    Mesajlar:
    33
    Beğenilen Mesajları:
    1
    Ödül Puanları:
    8
    hocam tşkler. evet buton ile arttırma ve azaltma tamam ancak arttırma butonu ile seçtiğim rakkamdan geriye saydıramadım son hali aşağıda yardımınızı bekliyorum


    #include "C:\Documents and Settings\skyvision\Belgelerim\CCS S DENEME\displayuygulama\16f877ikilidisplay\Yeni Klasör (2)\main.h"
    #use fast_io(a)
    #use fast_io(b)
    #define display_1 pin_a0
    #define display_2 pin_a1
    #define arttir pin_a2
    #define azalt pin_a3

    char birler=0,onlar=0,sayi=0;
    const int digit[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};


    void main()
    {

    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    set_tris_a(0xfc);
    set_tris_b(0x00);
    output_low(display_1);
    output_low(display_2);




    while(true)

    {

    birler=sayi%10;
    onlar=sayi/10;
    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);


    if(input(arttir))

    {
    delay_ms(10);// buton arkını önlemek için gecikme
    sayi++;
    if(sayi==100)
    sayi=0;
    birler=sayi%10;
    onlar=sayi/10;

    while(input(arttir))

    {

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);

    }
    }

    if(input(azalt)&&(sayi!=0))

    {
    delay_ms(10);
    sayi--;
    if(sayi==100)
    sayi=0;// sayi sıfır olmadığı sürece döngüyü işle
    birler=sayi%10;
    onlar=sayi/10;
    while(input(azalt))

    {

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(5);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(5);
    output_low(display_1);

    }
    }//BURAYA KADAR KOD ÇALIŞIYOR ANCAK BURADAN SONRASI YOK:(
    while(sayi>0)

    {
    for(sayi=99;sayi<=99;sayi--)//YUKARIDAN SAYİ ALDIĞI DEĞERİ GERİ SAYACAK GERİ SAYARKENDE BİRER DAKİA GECİKMELİ OLMALI
    {

    birler=sayi%10;
    onlar=sayi/10;

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(10);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(10);
    output_low(display_1);

    }
    }
  5. ze_tr
    Çevrimdışı

    ze_tr Üye

    Katılım:
    25 Kasım 2006
    Mesajlar:
    468
    Beğenilen Mesajları:
    32
    Ödül Puanları:
    28

    if(input(azalt))

    {
    delay_ms(10);
    sayi--;
    if(sayi==255)
    sayi=99;
    birler=sayi%10;
    onlar=sayi/10;
    ....
    servermaster bunu beğendi.
  6. servermaster
    Çevrimdışı

    servermaster Yeni Üye

    Katılım:
    24 Kasım 2009
    Mesajlar:
    33
    Beğenilen Mesajları:
    1
    Ödül Puanları:
    8
    Sayın Ze tr hocam ilginize tşkler ancak öneriniz çalışmadı.yapmak istediğim arttır butonu ile diyelimki 20 rakkamını seçtim (arttir,azalt butonları var yukarıdaki ikinci kodda buralar çalışıyor sorun yok) displayde 20 görüntülendi ve 10 saniye sonra display geri saymaya başlayacak 1er dakika ara ile herşey tamam ancak geri sayma işlemi bir türlü başlamıyor burada if döngüsümü for döngüsümü kullanılmalı yardımlarınızı bekliyorum

    --------------------------------------------------------------------------

    aşağıdaki kodda çalışıyor ancak iki kodu birleştirince geri sayma işlemi başlamıyor yardımlarınızı bekliyorum

    while(true)

    {
    for(sayi=99;sayi<=99;sayi--)
    {

    birler=sayi%10;
    onlar=sayi/10;

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(10);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(10);
    output_low(display_1);


    }
    }
    }
    Yönetici tarafından son düzenleme: 16 Aralık 2009
  7. myurdabak
    Çevrimdışı

    myurdabak Yeni Üye

    Katılım:
    31 Ocak 2008
    Mesajlar:
    543
    Beğenilen Mesajları:
    18
    Ödül Puanları:
    18
    Meslek:
    Elek.Elekt.Mühendisi
    bir i değişkeni tanımla
    while(sayi<0) bunu sil direk for döngüsüyle başla.for dan önce delay_ms(1000); yaz
    orada for döngüsünde
    for(i=sayi;i<=sayi;i--) {
    birler=i%10;
    onlar=i/10;

    output_high(display_2);
    output_b(digit[birler]);
    delay_ms(10);
    output_low(display_2);
    output_high(display_1);
    output_b(digit[onlar]);
    delay_ms(10);
    output_low(display_1);
    delay_ms(60000);

    } bi dene bakalım.
  8. servermaster
    Çevrimdışı

    servermaster Yeni Üye

    Katılım:
    24 Kasım 2009
    Mesajlar:
    33
    Beğenilen Mesajları:
    1
    Ödül Puanları:
    8
    hemen deniyorum tşkler
    -----------------------------------------------
    hocam malesef ama birşeyler yapıyor saçmalıyor buda ilerleme başka tavsiyeniz olabilirmi for döngüsü ile sanır çözeceğiz başka öneriniz varmı teşekkürler
    Yönetici tarafından son düzenleme: 16 Aralık 2009
  9. myurdabak
    Çevrimdışı

    myurdabak Yeni Üye

    Katılım:
    31 Ocak 2008
    Mesajlar:
    543
    Beğenilen Mesajları:
    18
    Ödül Puanları:
    18
    Meslek:
    Elek.Elekt.Mühendisi
    sayi değişkenine bi değer vererek sadece benim verdiğim kodu bi dene bakalım çalışacak mı.eğer çalışıyorsa senin çalışıyo dedğin kodlarında değişiklik yapmak gerekebilir.zamanım olsa daha ayrıntılı bakardım ama sınavlarım var...
  10. ze_tr
    Çevrimdışı

    ze_tr Üye

    Katılım:
    25 Kasım 2006
    Mesajlar:
    468
    Beğenilen Mesajları:
    32
    Ödül Puanları:
    28
    Kod:
    #include <18f877.h>
    #device ADC=10
    //#fuses HS,NOPROTECT, NOWDT,NOLVP
    #FUSES HS //INTRC_IO                 //Internal RC Osc, no CLKOUT
    
    #use delay(clock=4000000)
    #use rs232(baud=19200, xmit=PIN_c6, rcv=PIN_c7)
    
    #use fast_io(a)
    #use fast_io(b)
    #define display_1    pin_a0
    #define display_2    pin_a1
    #define arttir       pin_a2// arttır ma işlemi için a4 pini
    #define azalt        pin_a3
    
    char birler=0,onlar=0,sayi=0;
    const int digit[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x6f};
    
    void goster()
    {
      onlar=sayi/10;
      birler=sayi-10*onlar;
     output_high(display_2);
     output_b(digit[birler]);
     delay_ms(5);
     output_low(display_2);
     output_high(display_1);
     output_b(digit[onlar]);
     delay_ms(5);
     output_low(display_1);
    }
    
    
    void main()
    {
     int1 ststp = 0;
     int  sayac = 0;
     
    setup_adc_ports(NO_ANALOGS);
    setup_adc(ADC_OFF);
    setup_psp(PSP_DISABLED);
    setup_spi(SPI_SS_DISABLED);
    
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    set_tris_a(0xFC);
    set_tris_b(0x00);
    output_low(display_1);
    output_low(display_2);
    
    // TODO: USER CODE!!
    
    while(true)
    {
     if(input(arttir))
     {ststp=0;
      sayi++;
      if(sayi==100) sayi=0;
     }
     if(input(azalt))
     {ststp=0;
      sayi--;
      if(sayi==255) sayi=100;
     }
     
     if(ststp==0)
     {sayac ++;
      if(sayac==25)
       {sayac=0;
        ststp=1;   
       }
     }
     
     if(ststp) sayı--;
     goster();
    }
    
    }
    Mantık buna benzer bir şey olacak. Yalnız geri çok hızlı saydığı için sizin olayları görmeniz zor. Onun için butona basınca saymayı durduracak bir mantık ekledim.

    Saniye bazında sayac bir azalacak ise o zaman butonlarınızın etkisini görürsünüz. Bir saniyelik zaman aralığını timer1 ve ccp compare mod ve bir sayaç kullanarak elde edebilirsiniz.
: ile, ccs, yardim, uygulama, lutfen, display

Sayfayı Paylaş