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...