16F628A + 4511 0-99 display hatası

algooo

Üye
Katılım
30 Ocak 2012
Mesajlar
3
Puanları
1
Yaş
29
Merhaba arkadaşlar.
proje ödevim olan 0-99 sayıcı devresinin 1 artırma 1 azaltma butonu var aynı zamanda devrede bir röle var her 10 rakamda bir röle çekiyor.
devreyi kurdum artırma butonuna basınca sayı displayde 0.1.2.3.4.5.6.7.0.1.10 şeklinde gidiyor yani 8 yerine 0, 9 yerine 1 görünüyor. simülasyonda düzgün çalışmasına rağmen gerçeğinde böyle bir problem var. 4511 in bağlanıtısını b portuna yaptım. B0,B1,B2,B3 portlarında 4511i entegresini girişleri B4 ve B5 portlarında da bir röle ve röle çekince yanan bir led var. Sayı 7 den sonra 0a gelince B4 portundaki Röle LEDi de yanıyor. acaba pic 4511 e gönderiği sayıyı tüm b portuna mı gönderiyor yoksa yazılımda mı bir problem var?
Yardımlarınız için teşekkür ederim.
Capture.jpg
Kod:
#include <16F628A.h>#FUSES NOWDT                   
#FUSES XT                       
#FUSES NOPUT                    
#FUSES NOPROTECT                
#FUSES NOBROWNOUT               
#FUSES NOMCLR                   
#FUSES NOLVP                    
#FUSES NOCPD                    
#use delay(clock=4000000)
#byte port_a=5
#byte port_b=6




signed long int birler=0,onlar=0, y=0,i=0;


void display ()
{
 birler=i%10;
 onlar=i/10;
 
 output_b(birler);
 output_low(pin_a0);
 delay_ms(20);
 output_high(pin_a0);
 output_b(onlar);
 output_low(pin_a1);
 delay_ms(20);
 output_high(pin_a1);
}




void main()
{


   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   set_tris_a(0b00111100);
   set_tris_b(0b11110000);
   output_b(0x00);
  
 while(true)
 {
  if(input(pin_a2)==0)
   {
    delay_ms(20);
    while(input(pin_a2)==0);
    i++;
    if(i>99) i=99;
    display ();
   }
  if(input(pin_a3)==0)
   {
    delay_ms(20);
    while(input(pin_a3)==0);
    i--;
    if(i<0) i=0;
    display ();
   }
   if((birler==0)&&(i!=0))
    {
     output_high(pin_b4);
     output_high(pin_b5);
    }
   if(input(pin_a4)==0)
    {
     delay_ms(20);
     while(input(pin_a4)==0);
     output_high(pin_b4);
     output_high(pin_b5);
    }
    if(input(pin_a5)==0)
    {
     delay_ms(20);
     while(input(pin_a5)==0);
     output_low(pin_b4);
     output_low(pin_b5);
    }
   if(i==99)
    {
       do
        {
         output_high(pin_b4);
         output_high(pin_b5);
         delay_ms(100);
         output_low(pin_b4);
         output_low(pin_b5);
         delay_ms(100);
         y++;
        } 
       while(y==100);
      }
    }
 }
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Çevrimiçi üyeler

Geri
Üst