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.
 

Forum istatistikleri

Konular
128,191
Mesajlar
915,734
Kullanıcılar
449,967
Son üye
Gokhanttu

Yeni konular

Geri
Üst