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.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…