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