Ledlerle termometre 16f877a ds18b20 sicaklik sensoru ile programlandi.
#include <16f877a.h>
#device ADC=10
#fuses hs,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=20m)
#include "dss18b20.c"
float sicaklik;
// 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
led_test();
while (true) {
sicaklik = ds1820_read();
// 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...