Tuş takımı nasıl bağlanır?

Başlatan Recep METE, 23 Mart 2014, 23:54:19

RaMu

#15
while(1)
{
tus=keypad_oku();
if(tus!=0)
{tahmin[i]=tus;
i++;

if(i==4) i=0;    //   EKLE

}



Bence i arttırılıp 4 olunca tahmin[ı] yani tahmin[4] (veya dahada arttırılırsa 5,6,7)
gibi oluyor ve problem çıkıyor olabilir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

SK

ramu hocam dediğin gibi bi açık da varmış  haklısın ancak sorunun temel kaynağı sanırım 20ms lik delay in az olmasıydı. birde while döngüsünün içini şu şekilde düzenleyince problem düzeldi. teşekkürler yardımlarınız için. Birde bu tuş takımının pratikte kullanırken 8 bacağı vardı. 4 satır 3 sütun bacağı var ise geri kalan bacak ne için?

kodların son hali şu şekildeydi.
/******************************************************
                  Tuş Takımı ile 4 Haneli Şifre Tanımlama / SK  
*******************************************************/
#include <16f877A.h>   

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) 

#use fast_io(b)
#use fast_io(d) 
#use fast_io(c)

#define sut1   pin_c0 
#define sut2   pin_c1 
#define sut3   pin_c2 

#define sat1   pin_b0 
#define sat2   pin_b1 
#define sat3   pin_b2 
#define sat4   pin_b3 


int tus=11; 
int tahmin[4]={0,0,0,0};
int sifre [4]={1,3,5,7};
int i=0;

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku()
{
tus=11;

output_high(sat1); 
if (input(sut1))  
{ delay_ms(50); tus=1; }
if (input(sut2))   
{ delay_ms(50); tus=2; }
if (input(sut3))
{ delay_ms(50); tus=3; }
output_low(sat1);

output_high(sat2); 
if (input(sut1))  
{ delay_ms(50); tus=4; }
if (input(sut2))
{ delay_ms(50); tus=5; }
if (input(sut3))
{ delay_ms(50); tus=6; }
output_low(sat2);

output_high(sat3);
if (input(sut1))   
{ delay_ms(50); tus=7; }
if (input(sut2))
{ delay_ms(50); tus=8; }
if (input(sut3))
{ delay_ms(50); tus=9; }
output_low(sat3);

output_high(sat4); 
if (input(sut1))   
{ delay_ms(50); tus=10; }
if (input(sut2))
{ delay_ms(50); tus=0; }
if (input(sut3))
{ delay_ms(50); tus=11; }
output_low(sat4);

return tus; 

}

/********* ANA PROGRAM FONKSÄ°YONU********/

void main ( )
{
setup_psp(PSP_DISABLED);        
setup_spi(SPI_SS_DISABLED);     
setup_timer_1(T1_DISABLED);     
setup_timer_2(T2_DISABLED,0,1); 
setup_adc_ports(NO_ANALOGS);    
setup_adc(ADC_OFF);             

set_tris_d(0x00);
set_tris_b(0x00);   
set_tris_c(0xFF);  

output_b(0x00); 
output_d(0x00);

while(1)
{
tus=keypad_oku();
if(tus!=11)
{tahmin[i]=tus;
i++;
if(i==4)
i=0;}

   if(tahmin[0]==sifre[0])
    if(tahmin[1]==sifre[1])
     if(tahmin[2]==sifre[2])
       if(tahmin[3]==sifre[3])
       output_high(pin_d0);
}
}