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,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Çevrimiçi üyeler

Geri
Üst