8'li 7 Segment Display Sürümü

Katılım
24 Eyl 2017
Mesajlar
1
Puanları
1
Yaş
29
Herkese merhabalar. DS1307 entegresi ile gerçek zamanlı bir saat devresi yapmak istiyorum. Entegreden verileri alıyorum ancak bunu 7 segmentte göstermek konusunda sıkıntı yaşıyorum. Saat,dakika ve saniyeyi gösterebilmek için 8'li 7 Segment kullandım. 7 Segmenti şöyle çalıştırmayı denedim ancak sonuç alamadım;

----MicroC Kodları----
Kod:
#define seg1 PORTB.RB0

#define seg1 PORTB.RB1

#define seg1 PORTB.RB2

#define seg1 PORTB.RB3

#define seg2 (PORTB.RB4, PORTB.RB5, PORTB.RB6, PORTB.RB7)

// RTC(Real Time Clock) için I2C Bağlantıları

sbit Soft_I2C_Scl               at RD1_bit;

sbit Soft_I2C_Sda               at RD0_bit;

sbit Soft_I2C_Scl_Direction     at TRISD1_bit;

sbit Soft_I2C_Sda_Direction     at TRISD0_bit;



char saniye, dakika, saat, gun, ay, yil, sayac;



//Tarih ve Zaman Okuma fonksiyonu

void Read_time(){

Soft_I2C_Start();          // Start Sinyali Oluşturuldu

Soft_I2C_Write(0xD0);      // DS1307 Adres Gönderildi

Soft_I2C_Write(0);         // Adres 0'dan başlanıyor

Soft_I2C_Start();          // Start Sinyali Tekrarlandı

Soft_I2C_Write(0xD1);      // DS1307'nin Adresi Gönderildi (R/W=1)



saniye= Soft_I2C_Read(1);  // saniye bilgisi okundu

dakika= Soft_I2C_Read(1);  // dakika okundu

saat= Soft_I2C_Read(1);    // saat okundu

gun= Soft_I2C_Read(1);     // gün bilgisi okundu

ay= Soft_I2C_Read(1);      // ay bilgisi okundu

yil= Soft_I2C_Read(0);     // yıl bilgisi okundu

Soft_I2C_Stop();

}



// Okunan Bilgileri Yazdırmak İçin düzenleme Fonksiyonu

void Transform_Time() {

  saniye = ((saniye & 0xF0) >> 4)*10 + (saniye & 0x0F); // saniye dönüştürüldü

  dakika = ((dakika & 0xF0) >> 4)*10 + (dakika & 0x0F); // dakika dönüştürüldü

  saat = ((saat & 0xF0) >> 4)*10 + (saat & 0x0F);       // saat dönüştürüldü

  yil = ((yil & 0xF0) >> 4)*10 + (yil & 0x0F);          // yıl dönüştürüldü

  gun = ((gun & 0x30) >> 4)*10 + (gun & 0x0F);          // gün dönüştürüldü

  ay = ((ay & 0x10) >> 4)*10 +(ay & 0x0F);              // ay dönüştürüldü

}



//Tarih ve Saati 7 Segmentlere Yazdırmak İçin Fonksiyon

void Display_Time(){

//-----saniyenin birler basamağı-----

PORTC.RC0=1;

PORTC.RC1=1;

PORTC.RC2=1;

PORTC.RC3=1;

PORTC.RC4=1;

PORTB=(saniye%10);

PORTC.RC5=0;

delay_ms(3);



//-----saniyenin onlar basamağı-----

PORTC.RC0=1;

PORTC.RC1=1;

PORTC.RC2=1;

PORTC.RC3=1;

PORTC.RC5=1;

PORTB=(saniye/10);

PORTC.RC4=0;

delay_ms(3);



//-----dakikanın birler basamağı-----

PORTC.RC0=1;

PORTC.RC1=1;

PORTC.RC2=1;

PORTC.RC4=1;

PORTC.RC5=1;

PORTB=(dakika%10);

PORTC.RC3=0;

delay_ms(3);



//-----dakikanın onlar basamağı-----

PORTC.RC0=1;

PORTC.RC1=1;

PORTC.RC3=1;

PORTC.RC4=1;

PORTC.RC5=1;

PORTB=(dakika/10);

PORTC.RC2=0;

delay_ms(3);



//-----saatin birler basamağı-----

PORTC.RC0=1;

PORTC.RC2=1;

PORTC.RC3=1;

PORTC.RC4=1;

PORTC.RC5=1;

PORTB=(saat%10);

PORTC.RC1=0;

delay_ms(3);



//-----saatin onlar basamağı-----

PORTC.RC1=1;

PORTC.RC2=1;

PORTC.RC3=1;

PORTC.RC4=1;

PORTC.RC5=1;

PORTB=(saat/10);

PORTC.RC0=0;

delay_ms(3);







}



void main() {

ADCON0=0;

ADCON1=0;

CMCON |=7;

TRISB=0X00;

TRISC=0X00;

TRISD=0XFF;







PORTC=0;

PORTB=0;



delay_ms(500);

while(1){

  portb=250;

  delay_ms(250);



   Read_time();

   Transform_Time();

   Display_Time();



}

}
Hatanın nerede olduğunu anlamadım yardımcı olabilirseniz çok sevinirim. Teşekkürler.
 

Ekli dosyalar

  • kk.png
    kk.png
    64.7 KB · Görüntüleme: 23
Moderatör tarafında düzenlendi:
7448 entegresi kullanmışsın ama çeviri yapmamışsın. Bunun için portb=dec2bcd(isi1); gibi bir komut vermen lazım. ÖR;PORTB=dec2bcd(saat%10);
Ve de her segment için bildiğim kadarıyla ayrı bir 7448 entegresi kullanman gerekiyor. bu şekilde çalışmaz. Ya da Timer modulünü interrupt(kesme) kullanman gerekiyor.
 

Forum istatistikleri

Konular
129,799
Mesajlar
930,196
Kullanıcılar
452,593
Son üye
cKaradeniz301

Yeni konular

Geri
Üst