2 Aralık 2024 Pazartesi

Ledlerle Termometre

 Ledlerle termometre duzgun bir dizay edilirse şık ve kullanisli olabilir. Pic16f877a ile lm35 sicaklik sensoru calismasi. 

 

#include <16f877a.h> 

#device ADC=10 

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

#use delay(clock=20m)


unsigned long int bilgi; 

float sicaklik,deger;


// LED'leri sırayla yakıp söndüren fonksiyon

void led_test() {

    int i;


    // PortB'deki LED'ler (0-7)

    for (i = 0; i < 8; i++) {

        output_b(1 << i); // Sırayla RB0-RB7 LED'lerini yak

        delay_ms(200); // 200 ms bekle

    }


    // PortC'deki LED'ler (RC0, RC1, RC6, RC7)

    output_b(0x00); // PortB'yi temizle

    for (i = 0; i < 2; i++) {

        output_c(1 << i); // RC0 ve RC1 için sırayla yak

        delay_ms(200);

    }


    for (i = 6; i <= 7; i++) {

        output_c(1 << i); // RC6 ve RC7 için sırayla yak

        delay_ms(200);

    }


    // PortD'deki LED'ler (0-7)

    output_c(0x00); // PortC'yi temizle

    for (i = 0; i < 8; i++) {

        output_d(1 << i); // Sırayla RD0-RD7 LED'lerini yak

        delay_ms(200);

    }


    // Tüm portları temizle

    output_b(0x00);

    output_c(0x00);

    output_d(0x00);

}



void main() {

    int birler, onlar;


    setup_psp(PSP_DISABLED); 

    setup_timer_1(T1_DISABLED); 

    setup_timer_2(T2_DISABLED,0,1); 

    setup_CCP1(CCP_OFF); 

    setup_CCP2(CCP_OFF); 

    

    set_tris_a(0x01); // AN0 giriş, diğerleri çıkış

    set_tris_b(0x00); // PortB çıkış (0-7 derece için)

    set_tris_c(0x00); // PortC çıkış (8-9 derece ve 10'lu katlar için)

    set_tris_d(0x00); // PortD çıkış (10, 20, 30... katları için)

    

    output_a(0x00);

    output_b(0x00); // PortB'yi temizle

    output_c(0x00); // PortC'yi temizle

    output_d(0x00); // PortD'yi temizle

    

    setup_adc(adc_clock_div_32); 

    setup_adc_ports(AN0); // AN0 kullanılıyor

    

    

    led_test();

    

    while (true) {

     set_adc_channel(0); 

    delay_us(20);

        bilgi = read_adc(); // ADC'den veri oku

        deger = (0.0048828125 * bilgi) * 1000; // LM35 sıcaklık hesabı

        sicaklik=(deger/10);


        // Dereceyi birler ve onlar basamaklarına ayır

        birler = ((int)sicaklik % 10); // Birler basamağı

        onlar = ((int)sicaklik / 10); // Onlar basamağı


    output_b(0x00); // PortB'yi temizle

    output_c(0x00); // PortC'yi temizle

    output_d(0x00); // PortD'yi temizle


        if(birler == 0 )

        {

        output_b(0x01);

        }

        

         if(birler == 1 )

        {

        output_b(0x02);

        }

        

         if(birler == 2 )

        {

        output_b(0x04);

        }

        

         if(birler == 3 )

        {

        output_b(0x08);

        }

         if(birler == 4 )

        {

        output_b(0x10);

        }

         if(birler == 5 )

        {

        output_b(0x20);

        }

         if(birler == 6 )

        {

        output_b(0x40);

        }

         if(birler == 7 )

        {

        output_b(0x80);

        }

         if(birler == 8 )

        {

        output_c(0x01);

        }

         if(birler == 9 )

        {

        output_c(0x02);

        }

        

         if(onlar == 1 )

        {

        output_d(0x01);

        }

        

        if(onlar == 2 )

        {

        output_d(0x02);

        }

        if(onlar == 3 )

        {

        output_d(0x04);

        }

        if(onlar == 4 )

        {

        output_d(0x08);

        }

        if(onlar == 5 )

        {

        output_d(0x10);

        }

        if(onlar == 6 )

        {

        output_d(0x20);

        }

        if(onlar == 7 )

        {

        output_d(0x40);

        }

        if(onlar == 8 )

        {

        output_c(0x40);

        }

        if(onlar == 9 )

        {

        output_c(0x80);

        }

        

        

        delay_ms(1000); // Ölçümler arasında bekleme

    }

}




Hiç yorum yok:

Yorum Gönder

Her yorum bilgidir. Araştırmaya devam...