Arkadaşlar CCS C programlama ögrenmeye yeni başladım . hatta sadece giriş çıkış ve basit led uygulamalarını biliyorum diyebilecek kadar düşük seviyedeyim. 7 segment displayla hız göstergesi ve devir sayacı yapmak istiyorum. fakat bilgim hiç yok Tubitak'ın sitesinde kendimiz yapalım kısmında bulunan LCD li hız göstergesi devresini inceledim oradaki hesaplamalara baktım fakat tamamı LCD üzerine yapılmış şuan lcd kullanmaya korkuyorum çünkü çok lcd bozdum hazır devreler yüzünden

2 adet 7 segment display kullanarak ve 2 adet dm74ls47n entegresiyle displaylari sürmeyi düşünüyorum hız göstergesinde mantık olarak da Tubitak'ın sayfasındaki reed röle prensibinden yararlanmak istiyorum acaba yardımcı olabilr misiniz çok önemli bnm icin bu devre PIC olarak elimde 16f628A, 16f84A , 16F876A , 16f877A entegreleri mevcut. yardımlarınızı bekliyorum aşağıda tubitaktaki lcd li hız göstergesi kodunu veriyorum

#include <pic.h>
#include <delay.c>
#include <lcd.c>
#include <stdio.h>

//Konfigurasyon ayarlari
__CONFIG(WDTDIS&LVPDIS&PWRTEN&XT);

// Reed anahtar RA0'a pinine bagli
#define SW RA0

// Global degiskenler
unsigned char kontrol=0;
unsigned char sonuc[]=" ";
unsigned int CX;
float pi=3.14159, r=0.3302; //Teker yaricapi

//---- TIMER kesme alt programi -----
void interrupt kesme(void){
CX++;
if(CX>10000)kontrol=1;

T0IF=0; // Bayragi temizle
TMR0=131; // TIMER'i tekrar yukle
}

//--------- LCD alt programi----------
void LCD_yaz(void){
float hiz;
unsigned int hiz2;

lcd_clear(); // LCD'yi temizle
hiz=2*pi*r*3600/CX; // km/saat cinsinden
hiz2=(int)hiz; // hiz degerini hesapla

lcd_goto(0x00); lcd_puts(" HIZ GOSTERGESI ");

if(kontrol==0){ // Sonucu LCD'ye yazdir
sprintf(sonuc+3,"%d Km/Saat",hiz2);
lcd_goto(0x40); lcd_puts(sonuc);
}

else{ // Bisiklet duruyorsa Hiz=0 yazdir
lcd_goto(0x41); lcd_puts("*** HIZ=0 ***");
}

}
//----------- ANA PROGRAM ------------

main(void)
{

TRISA=0x01; // Port A'nin ilk pini giris
TRISB=0x00; // PortB'nin hepsi cikis
CMCON=0x07; // PortA sayisal giris
PORTA=0; // Baslangic durumu ayarlari
PORTB=0;

// LCD islemleri
DelayMs(250);
lcd_init();
lcd_clear();
lcd_write(0x0C); //imleci gizle
lcd_goto(0x00); lcd_puts(" HIZ GOSTERGESI ");

// TIMER islemleri
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // Butun kesmeler etkin
T0IE=0; // Baslangicta TIMER pasif
T0IF=0; // Bayrak temizle

// Hiz olcum islemleri
for(;{

CX=0; kontrol=0;

while(SW==0); // Giris 0 ise bekle
TMR0=131; // 125 sayim (256-131=125)
T0IE=1; // TIMER baslat
while(SW==1); // Giris 1 ise bekle
while(kontrol==0){if(SW==1)break;}

T0IE=0; // TIMER'i durdur
LCD_yaz(); // LCD alt programina git

DelayMs(250); // 250 ms bekle
while(SW==1);

} // islemleri tekrarla
} // Programin sonu