Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

MikroC Dijital RTC Sorunu...

Başlatan Mr.Java, 17 Nisan 2013, 18:05:54

Mr.Java

Arkadaşlar merhaba.

- 4'lü display saat uygulamamda saniye fonksyonunu displayda dp ledine nasıl ilişkilendirebilirim acaba ?

- Displayda örneğin saat saniye değişkeni görünecek ve 30sn sayacak sonra dakika görünecek ve sonsuz döngüde gidecek şeklinde fakat kaçırdığım bir nokta var sanırım...

Buyrun kodlar..

#include "DS1302.c"
#include "BoardConfig.h"

unsigned char LED_DIS[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xff};
unsigned char DIS_NUM[4];
char txt[5];

void LED_DISPLAY(void)
{
    unsigned char i, j, k;
    RA3 = 0;

    for (k = 0; k < 50; k++)
        for (j = 0X80, i = 0; i < 4; i++)
        {

            //******************************************************************
            RC4 = 1;
            PORTD = j;
            RC4 = 0;
            //******************************************************************

            //******************************************************************
            RC3 = 1;
            if (i == 1)
                PORTD = LED_DIS[DIS_NUM[i]]&0x7F;
            else
                PORTD = LED_DIS[DIS_NUM[i]];
            RC3 = 0;
            //******************************************************************

            j >>= 1;
            Delay_Ms(2);

            //******************************************************************
            RC4 = 1;
            PORTD = 0X00;
            RC4 = 0;
            Delay_Ms(1);
            //******************************************************************
        }
}
void main()
{
    unsigned char gun, ay, yil, hafta, saat, dakika, saniye, a=1;
    Board_Ayar();
    DS1302_init();
    rtc_set_datetime(17, 4, 13, 5, 17, 51, 0);
 for (;;)
    {
        rtc_get_time(&saat, &dakika, &saniye);
        DIS_NUM[0] = (saat / 10);
        DIS_NUM[1] = (saat % 10);
        DIS_NUM[2] = (dakika / 10);
        DIS_NUM[3] = (dakika % 10);
        LED_DISPLAY();
        for(a=0;a<30;a++)
        {
        DIS_NUM[2] = (saat / 10);
        DIS_NUM[3] = (saat % 10);
        if(a==25)break;
        }
    }
 }

Mr.Java


Kabil ATICI

fikir vermek açısından;
--1 saniye yakıp 1 saniye söndürme için;
saniye için değişken örnek san1 ata; ilk değer 0 olsun,

rtc'den saati okuduğundan saniye değerini san1 ile karşılaştır,

farklı ise Led'i yak söndür işlemini uygula.

saniye değerini san1'e kopya.

--1 saniye içinde yakıp söndürmek için;

timer kullanıyorsun timer süresi 0.5 sn.
timer ilk anda kapalı;
saniye için değişken örnek san1 ata; ilk değer 0 olsun,

rtc'den saati okuduğundan saniye değerini san1 ile karşılaştır,
farklı ise timer aktif (çalıştır) ve led yak;
timer süresi bittiğinde led söndür ve timer durdur.
ambar7

sadogan

Bir flag ın olsun flag 1 ise saati yaz 0 ise saniye yaz.
Timer kur değişme istediğin süre her ne ise ona set et.
Timer zamanı dolduğunda bu flagın komplimentini al.

Mr.Java

Alıntı yapılan: ambar7 - 18 Nisan 2013, 12:30:55
fikir vermek açısından;
--1 saniye yakıp 1 saniye söndürme için;
saniye için değişken örnek san1 ata; ilk değer 0 olsun,

rtc'den saati okuduğundan saniye değerini san1 ile karşılaştır,

farklı ise Led'i yak söndür işlemini uygula.

saniye değerini san1'e kopya.

--1 saniye içinde yakıp söndürmek için;

timer kullanıyorsun timer süresi 0.5 sn.
timer ilk anda kapalı;
saniye için değişken örnek san1 ata; ilk değer 0 olsun,

rtc'den saati okuduğundan saniye değerini san1 ile karşılaştır,
farklı ise timer aktif (çalıştır) ve led yak;
timer süresi bittiğinde led söndür ve timer durdur.

yani san1=saniye; diyip sonrasında if(saniye!=0)DIS_NUM[1]=0x7F;delay_ms(1000);DIS_NUm[1]=0xFF; şeklinde mi doğrumu anladım acaba ?

Kabil ATICI

#5
-saniye okuma,
-san1 -saniye karşılaştırması
-farklı ise yak söndür işlemi
en sonda
-san1=saniye işlemden çıkışta....

ek:
istiyorsan led yan sön için bir atama yapar;
led_b diyelim
led yan sön bölümünde
{
led_b=0 ise
LED yan
led_b=1

led_b=1 ise
LED sön
led_b=0
}

(bu bölümü if else ile yapabilirsin;
bu şekilde saniyenin her değişiminde led yanıp söner...
ambar7

Mr.Java

            RC3 = 1;
            if(sn1==0&& i==1)
            PORTD = LED_DIS[DIS_NUM[i]]&0x7F;
            else if (sn1==255 && i==1)
            PORTD = LED_DIS[DIS_NUM[i]]&0xFF;
            else
            PORTD = LED_DIS[DIS_NUM[i]];
            RC3 = 0;


Timer 0 ile çok rahat oldu.Display fonksyonunuda gömdüm hatta timer 0 içerisine çok net ve berrak bir görüntü elde ettim.Teşekkürler..