2 Mart 2020 Pazartesi

CCS C ile saat tarih derece kodu devresi

CCS C ile saat tarih derece kodu devresi
ds1302.c kütüphanesini kullanıyoruz
ds1820.c kütüphanesini kullanıyoruz
ds1820.c kütüphanesini kullanıyoruz
LCD için port B yi kullanıyoruz
Gün seçimini switch case kullanıyoruz




#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NODEBUG,NOCPD
#use delay(clock=4m)

#define use_portb_lcd TRUE
#define RTC_SCLK pin_c2
#define RTC_IO   pin_c3
#define RTC_RST  pin_c1

#include "ds1302.c"
#include "lcd.c"
#include "ds1820.c"

int saniye,dakika,saat,gun,ay,yil,haftanin_gunu;

void main(void)
{
float temp;
lcd_init();
rtc_init();
rtc_set_datetime(3,3,20,2,22,00);

while(true)
{

temp = ds1820_read();
rtc_get_time(saat,dakika,saniye);
rtc_get_date(gun,ay,yil,haftanin_gunu);

printf(lcd_putc,"\f%3.1f%cC %02d/%02d/%02d\n",temp,223,gun,ay,yil);

switch(haftanin_gunu)
{
case 1: printf(lcd_putc,"paz"); break;
case 2: printf(lcd_putc,"pzt"); break;
case 3: printf(lcd_putc,"sal"); break;
case 4: printf(lcd_putc,"car"); break;
case 5: printf(lcd_putc,"per"); break;
case 6: printf(lcd_putc,"cum"); break;
case 7: printf(lcd_putc,"cts"); break;
}

printf(lcd_putc,"   %02d:%02d:%02d",saat,dakika,saniye);
delay_ms(1000);

}
}




ds1820.c kodları aşağıdadır

#define ONE_WIRE_PIN PIN_c7
void onewire_reset()

{
output_low(ONE_WIRE_PIN);
delay_us( 500 ); //1-wire resetleme için sıfıra çekilir
output_float(ONE_WIRE_PIN); //1-wire bir yapılır
delay_us( 500 ); // sensörün hazırlanması için beklenir.
output_float(ONE_WIRE_PIN);
}

void onewire_write(int data)
{
int count;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // Sensöre yazma işlemine başlamak için  1-wire sıfıra çekilir.
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // yazılacak bilgi 1-wire'da
delay_us( 60 ); // Yazma işlemi zamanı doldurulur.
output_float(ONE_WIRE_PIN); // 1-wire bir yapılır,
delay_us( 2 ); // 1us'den fazla beklenir.
}
}

int onewire_read()
{
int count, data;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); //Sensördem okuma işlemi içinl 1-wire sıfıra çekilir.
output_float(ONE_WIRE_PIN); //1-wire bir yapılır,
delay_us( 8 ); // Sensörün kendine gelmesi beklenir,
shift_right(&data,1,input(ONE_WIRE_PIN)); // sonuc bilgisi alınır.
delay_us( 120 ); //Okuma işlemi zamanı doldurulur.
}
return( data );
}

float ds1820_read()
{
int8 busy=0, temp1, temp2;
signed int16 temp3;
float result;
onewire_reset();
onewire_write(0xCC);
onewire_write(0x44);
while (busy == 0)
busy = onewire_read();
onewire_reset();
onewire_write(0xCC);
onewire_write(0xBE);
temp1 = onewire_read();
temp2 = onewire_read();
temp3 = make16(temp2, temp1);
result = (float) temp3 / 16.0;//18b20 icin
//result = (float) temp3 / 2.0;//18s20 icin
delay_ms(200);
return(result);
}



















Hiç yorum yok:

Yorum Gönder

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