Haberler:

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

Ana Menü

Display 10 dk sayma ve çıkış

Başlatan hasankomur, 04 Temmuz 2012, 18:54:47

hasankomur

Sa arkadaşlar. Öncelikle hepinize hayırlı kandiller diliyorum.
Bir program yazdım program istediğim gibi çalışıyor. Tek sıkıntı var display deki görüntü sürekli görünmüyor yani kaç dk kaç sn olduğunu gösterip sönüyor. Ben birkaç yol denedim yapamadım. Bu ilk yazdığım program

#include <16f84a.h>
#use delay(clock=4000000)
#fuses xt,noput,nowdt,noprotect
#use fast_io(a)
#use fast_io(b)

int i=0,j=0,k=0,basla=0;

const int digit[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F};


void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   
   set_tris_a(0b00001000);
   set_tris_b(0x00);
   
   while(1){
   output_high(pin_a0);
   output_b(digit[j]);
   delay_ms(5);
   output_low(pin_a0);
   output_high(pin_a1);
   output_b(digit);
   delay_ms(5);
   output_low(pin_a1);
   output_high(pin_a2);
   output_b(digit[k]);
   delay_ms(5);
   output_low(pin_a2);
   if(input(pin_a3)){
   delay_ms(10);
   basla++;
   }
   if(basla==1){
   for(i=0;i<6;i++){
   for(j=0;j<10;j++){
   output_high(pin_a0);
   output_b(digit[j]);
   delay_ms(5);
   output_low(pin_a0);
   output_high(pin_a1);
   output_b(digit);
   delay_ms(5);
   output_low(pin_a1);
   output_high(pin_a2);
   output_b(digit[k]);
   delay_ms(5);
   output_low(pin_a2);
   delay_ms(985);
   if(i==5 && j==9)
   k++;
   }
   if(i==5 && j==9){
   i=0;
   j=0;
   }
   if(k==10)
   while(1){
   output_high(pin_b7);
   }
   }
   }
   }
}

j=saniyenin birler basamağı
i=saniyenin onlar basamağı
k=dakika

jrcapa

if(k==10)
   while(1){
   output_high(pin_b7);
   }
                                                 // Program burdan nasıl çıkar?


delay_ms(985);                      // Sorun burda,15 ms high, 985 ms  low.

Display 3 digit mi?

hasankomur

Alıntı yapılan: jrcapa - 04 Temmuz 2012, 23:55:13
if(k==10)
   while(1){
   output_high(pin_b7);
   }
                                                 // Program burdan nasıl çıkar?


delay_ms(985);                      // Sorun burda,15 ms high, 985 ms  low.

Display 3 digit mi?

Program oradan çıkmayacak zaten sürekli o çıkışı verecek.
Evet sorun orada fakat bir türlü nasıl çözeceğimi bulamadım. Dakikayı gösteren tek digit saniye kısmı 2 digitli.   

jrcapa

1 sn'ye denk gelecek şekilde  j'yi 1 arttırırsın, buna benzer şekilde yapılabilir;


  for(z=0;z<51;z++){      // 50*20=1000 msn
   output_high(pin_a0);
   output_b(digit[j]);
   delay_ms(5);
   output_low(pin_a0);
   output_high(pin_a1);
   output_b(digit);
   delay_ms(5);
   output_low(pin_a1);
   output_high(pin_a2);
   output_b(digit[k]);
   delay_ms(5);
   output_low(pin_a2);
   delay_ms(5);
   
  }
  j++;

hasankomur

#4
for(j=0;j<10;j++){
   for(z=0;z<51;z++){   
   output_high(pin_a0);
   output_b(digit[j]);
   delay_ms(5);
   output_low(pin_a0);
   output_high(pin_a1);
   output_b(digit);
   delay_ms(5);
   output_low(pin_a1);
   output_high(pin_a2);
   output_b(digit[k]);
   delay_ms(5);
   output_low(pin_a2);
   }
   if(i==5 && j==9)
   k++;
   } 

Böyle yaptım oldu. Çok teşekkür ederim yardımınız için.

mesaj birleştirme:: 05 Temmuz 2012, 11:19:58

Devreyi çalıştırıyorken fark ettim. for döngüsünü 51'e kadar yapınca tam bir sn olmuyor yani 20 ms değil 15 ms olduğu için. 1000/15=66.66 çıkıyor. for döngüsünü 67 e kadar yaptım. Şimdi tam anlamıyla oldu. :)