2 Digit Display Tarama Problemi

L_X

Üye
Katılım
6 Eyl 2021
Mesajlar
1
Puanları
1
Yaş
31
Merhaba

2 Digit bir displayi pic16f877A ile kullanmaktayım. Amacım önceden kullanıcının ayarladığı süreden sonra displayin geri sayması lakin 1 saniyede 1 sayı düşecek şekilde olmalı. Bu hususta delay_ms fonkisyonuyla kullandığımda tarama işlemi yüzünden display 1 sn kapalı kalıyor,bir anlık yanıp göstermesi gereken değeri gösteriyor ardından tekrar kapanıyor.

*Timer0 ı kullandım lakin sonuç alamadım.(belki de timer0 ı yanlış kullanmış olabilirim)
* RTOS un sağladığı multithread fonksiyonu sanırım işe yarayabilir fakat daha önce hiç RTOS ile çalışmadım

Bu hususta displayin sürekli çalışır durumda saniyede 1 geri saymasını nasıl sağlayabilirim?

ilgili kodlar:

for(int i=0;i<sayac;sayac--)
{

vbirler=sayac%10;
vonlar=sayac/10;



output_high(display_1);
output_d(display[vonlar]);
delay_ms(1);
output_low(display_1); // tarama işlemi low ile bittiği için 1 sn sönük kalıyor

output_high(display_2);
output_d(display[vbirler]);
delay_ms(1);
output_low(display_2); // tarama işlemi low ile bittiği için 1 sn sönük kalıyor
delay_ms(1000); //delay süresince başka işlem yapmadığı için taramadaki son register durumunu(low) koruyor.

İlginize şimdiden teşekkür ederim
 
Eğer geri sayım esnasında herhangi bir işlem yapmayacaksan iki for döngüsünü iç içe kullanabilirsin.


Kod:
for(int i=0;i<sayac;sayac--)
{
    vbirler=sayac%10;
    vonlar=sayac/10;

    for(int a=0;i<500;i++){
        output_high(display_1);
        output_d(display[vonlar]);
        delay_ms(1);
        output_low(display_1);

        output_high(display_2);
        output_d(display[vbirler]);
        delay_ms(1);
        output_low(display_2); 
    }
}
 
Timer interrupt ile tarama kısmını
halledin. İnterrupt içerisinde tanımlanan
değişken static olursa uygun olur.
 

Yeni mesajlar

Forum istatistikleri

Konular
128,189
Mesajlar
915,718
Kullanıcılar
449,957
Son üye
sezercakmak

Yeni konular

Geri
Üst