Ogün Erdoğann
Üye
- 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ı----
Hatanın nerede olduğunu anlamadım yardımcı olabilirseniz çok sevinirim. Teşekkürler.
----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();
}
}
Ekli dosyalar
Moderatör tarafında düzenlendi: