şu TUŞ TARAMADA yardım edecek yok mu ya ???

gogtug

Üye
Katılım
30 Eki 2013
Mesajlar
41
Puanları
1
4*3 lük bi keypad i nası tarama yaparız bir sürü şey yazdım olmuyo bi yardım kafayı yiyecem ya
 
Yaptiklarinizi ve yazdiginiz kodlari eklerseniz yardim almaniz kolaylasir.
 
Yaptiklarinizi ve yazdiginiz kodlari eklerseniz yardim almaniz kolaylasir.


TRISA=%00000000
TRISB=%00000000
TUS VAR WORD
SYMBOL ROLE=PORTA.0
SYMBOL SATIR1=PORTB.4
SYMBOL SATIR2=PORTB.5
SYMBOL SATIR3=PORTB.6
SYMBOL SATIR4=PORTB.7
SYMBOL SUTUN1=PORTB.1
SYMBOL SUTUN2=PORTB.2
SYMBOL SUTUN3=PORTB.3
PORTA=0
PORTB=0


basla:
PORTB=254
SATIR1=0
IF SUTUN1=0 THEN
pause 20
gosub SIFRE2
else
goto basla
endif

SIFRE2:
SATIR1=1
SATIR2=0
if sutun2=0 then
pause 20
high role
ELSE
GOTO BASLA
pause 20
ENDIF
---------------------





TRISA=%00000000
TRISB=%00000000
TUS VAR WORD
SYMBOL ROLE=PORTA.0
SYMBOL SATIR1=PORTB.4
SYMBOL SATIR2=PORTB.5
SYMBOL SATIR3=PORTB.6
SYMBOL SATIR4=PORTB.7
SYMBOL SUTUN1=PORTB.1
SYMBOL SUTUN2=PORTB.2
SYMBOL SUTUN3=PORTB.3
PORTA=0
PORTB=0




BASLA:
PORTB=254
SATIR1=0
IF SUTUN1=0 THEN
PAUSE 10
TUS=1
WHILE SUTUN1=0
WEND
ENDIF
if SUTUN2=0 THEN
PAUSE 10
TUS=2
WHILE SUTUN2=0
WEND
ENDIF

IF SUTUN3=0 THEN
PAUSE 10
TUS=3
WHILE SUTUN3=0
WEND
ENDIF

HIGH SATIR1

SATIR2=0
IF SUTUN1=0 THEN
PAUSE 10
TUS=4
WHILE SUTUN1=0
WEND
ENDIF

IF SUTUN2=0 THEN
PAUSE 10
TUS=5
WHILE SUTUN2=0

WEND
ENDIF
IF SUTUN3=0 THEN
PAUSE 10
TUS=6
WHILE SUTUN3=0
WEND
ENDIF
HIGH SATIR2
SATIR3=0
IF SUTUN1=0 THEN
PAUSE 10
TUS=7
WHILE SUTUN1=0
WEND
ENDIF
IF SUTUN2=0 THEN
PAUSE 10
TUS=8
WHILE SUTUN2=0
WEND
ENDIF
IF SUTUN3=0 THEN
PAUSE 10
TUS=9
WHILE SUTUN3=0
WEND
ENDIF
HIGH SATIR3
PAUSE 100

----------


TUS VAR BYTE
SYMBOL ROLE=PORTA.0
SYMBOL SATIR1=PORTB.4
SYMBOL SATIR2=PORTB.5
SYMBOL SATIR3=PORTB.6
SYMBOL SATIR4=PORTB.7
SYMBOL SUTUN1=PORTB.0
SYMBOL SUTUN2=PORTB.1
SYMBOL SUTUN3=PORTB.2
PORTA=0
PORTB=0
TARAMA:
HIGH SATIR1
IF SUTUN1=1 THEN TUS=1
IF SUTUN2=1 THEN TUS=2
IF SUTUN3=1 THEN TUS=3
LOW SATIR1
HIGH SATIR2
IF SUTUN1=1 THEN TUS=4
IF SUTUN2=1 THEN TUS=5
IF SUTUN3=1 THEN TUS=6
LOW SATIR2
HIGH SATIR3
IF SUTUN1=1 THEN TUS=7
IF SUTUN2=1 THEN TUS=8
IF SUTUN3=1 THEN TUS=9
LOW SATIR3
GOTO TARAMA



3 ÇeŞİT KOD YAZDIM AMA HİÇBİRİNDE OLMuyo işin içinden çıkamıyorum
 
16f628a için ccs c kullanarak zamanin birinde yazmis olduğum kod...İnceleyebilirsiniz.

#include <16f628A.h>
#fuses NOWDT,CPD,PROTECT,NOLVP,INTRC_IO
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(a)

#define sut3 pin_b0
#define sut2 pin_b1
#define sut1 pin_b2

#define sat1 pin_b3
#define sat2 pin_b4
#define sat3 pin_b5
#define sat4 pin_b6


#define sari pin_a0
#define yesil pin_a1
#define kirmizi pin_a2
#define buzzer pin_a3
#define kilit pin_a4

int tus,tusdeger;
int sifre1,sifre2,sifre3,sifre4,sifre5,sifre6,sifre7,sifre8;
int Esifre1=0,Esifre2=0,Esifre3=0,Esifre4=0;



//************** Keypad Kontrol**************************************

void tusal()
{
don:

output_low(sut1);output_high(sut2);output_high(sut3);
if(input(sat1)==0){tus=1;goto brk;}
if(input(sat2)==0){tus=4;goto brk;}
if(input(sat3)==0){tus=7;goto brk;}
if(input(sat4)==0){tus=11;goto brk;}

output_high(sut1);output_low(sut2);output_high(sut3);
if(input(sat1)==0){tus=2;goto brk;}
if(input(sat2)==0){tus=5;goto brk;}
if(input(sat3)==0){tus=8;goto brk;}
if(input(sat4)==0){tus=0;goto brk;}

output_high(sut1);output_high(sut2);output_low(sut3);
if(input(sat1)==0){tus=3;goto brk;}
if(input(sat2)==0){tus=6;goto brk;}
if(input(sat3)==0){tus=9;goto brk;}
if(input(sat4)==0){tus=12;goto brk;}
goto don;

brk:
while(!input(sat1));
while(!input(sat2));
while(!input(sat3));
while(!input(sat4));
output_high(buzzer);
delay_ms(50);
output_low(buzzer);

}



//************** Keypaddan Girilen Tuşları Kaydedicilere ATar*********************


void sifreal()
{
tusal();sifre1=tus;
tusal();sifre2=tus;
tusal();sifre3=tus;
tusal();sifre4=tus;
}


//******************************* PROGRAM ***************************************

void main()
{



set_tris_a(0b00000000);// A portu Çıkış olarak ayarlandı
set_tris_b(0b11111000);// B portunun 1,2,3 pinleri Giriş Diğerleri çıkış olarak Ayarlandı

port_b_pullups(true);// B portuna bağlı pullup dirençleri aktif edildi.

output_b(0);// B portu Tüm pinlerine "0" bilgisi gönderildi.


}



bas:

Esifre1=read_eeprom(0); // O nolu eepromdan veri okunup Esifre1 adlı kaydediciye atanıyor
Esifre2=read_eeprom(1); // 1 nolu eepromdan veri okunup Esifre2 adlı kaydediciye atanıyor
Esifre3=read_eeprom(2); // 2 nolu eepromdan veri okunup Esifre3 adlı kaydediciye atanıyor
Esifre4=read_eeprom(3); // 3 nolu eepromdan veri okunup Esifre4 adlı kaydediciye atanıyor
output_low(buzzer);
while(1)
{

tusal();
if(tus==11) // Buradaki 11 rakamı keypaddaki * ı temsil eder. * Basılınca
{


output_high(sari); // sari led yani "Sifre Gir" ledi yanar

sifreal(); // "Sifre al" alt fonksiyonu çağrılır.
delay_ms(500); // Belirtilen süre kadar bekler.

//Keypad den girilen tuşlarla Eşifre1, 2, 3, ve Esifre4 kaydedicilerinin içerikleri karşılaştırılır Eğer içerikler aynıysa

//yeşil led yanar ve pin_a4 e bağlı röle enerjilenir. Rölenin kontaklarına bağlı olan kapı otonmatiği çalışarak kapı açılır.


if(sifre1==Esifre1&sifre2==Esifre2&sifre3==Esifre3&sifre4==Esifre4){

output_low(sari);
output_high(yesil);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
delay_ms(50);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
output_low(kilit);
delay_ms(500);
output_high(kilit);
delay_ms(250);
output_low(yesil);
output_low(sari);
goto bas;}

else // Eğer karşılaştırılan içerikler aynı değilse kırmızı led yanar ve program "bas" adlı etikete yani başlangıca geri döner.
{

output_low(sari);
output_high(kirmizi);
output_high(buzzer);
delay_ms(100);
output_low(buzzer);
output_low(kirmizi);
goto bas ;}
}


if(tus==12) // Buradaki 12 rakamı keypad deki # tuşunu temsil eder. Eğer # tuşuna basılacak olursa sari led yanıp söner. "Sifre al" adlı fonksiyon çağrılır.
//Sarı led yanar ve eski şifre istenir. Eğer eski şifre doğru olarak girilmezse kırmızı led yanar ve program "bas" adlıe etikete yani başa döner.
{
output_high(sari);
delay_ms(50);
output_low(sari);
delay_ms(10);
output_high(sari);
delay_ms(50);
output_low(sari);
delay_ms(50);
output_high(sari);
sifreal();
delay_ms(10);


if(sifre1!=Esifre1&sifre2!=Esifre2&sifre3!=Esifre3&sifre4!=Esifre4)
{
output_low(sari);
output_high(kirmizi);
output_high(buzzer);
delay_ms(500);
output_low(buzzer);
delay_ms(500);
output_low(kirmizi);
goto bas;}


// Eğer eski şifre doğru olarak girilirse sarı led bir kere yanıp söner daha sonra yeni şifre girilir.

if(sifre1==Esifre1&sifre2==Esifre2&sifre3==Esifre3&sifre4==Esifre4){


output_low(sari);
delay_ms(250);
output_high(buzzer);
output_high(sari);
delay_ms(50);
output_low(buzzer);
output_low(sari);
delay_ms(50);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
output_high(sari);


sifreal();
delay_ms(500);
output_low(sari);
delay_ms(250);
output_high(sari);


tusal();sifre5=tus;
tusal();sifre6=tus;
tusal();sifre7=tus;
tusal();sifre8=tus;

delay_ms(750);

// yeni şifre girildikten sonra sarı led birkere yanıp söner ve doğrulama şifresi istenir.Eğer doğrulama
//sifresi olarak girilirse yeşil led yanar ve şifreniz yenisi ile değiştirilmiş olur.

if(sifre1==sifre5&sifre2==sifre6&sifre3==sifre7&sifre4==sifre8){

output_high(yesil);

write_eeprom(0,sifre1);
write_eeprom(1,sifre2);
write_eeprom(2,sifre3);
write_eeprom(3,sifre4);

delay_ms(500);
output_low(sari);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
delay_ms(25);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);output_low(yesil);goto bas;}

// Eğer doğrulama şifresi yanlış girilirse kırmızı led yanar ve program "bas" adlı etikete döner.

if(sifre1!=sifre5&sifre2!=sifre6&sifre3!=sifre7&sifre4!=sifre8);{

output_low(sari);
output_high(kirmizi);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
delay_ms(25);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
delay_ms(25);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
delay_ms(25);
output_high(buzzer);
delay_ms(50);
output_low(buzzer);
output_high(buzzer);
delay_ms(10);
output_low(buzzer);
delay_ms(500);
output_low(kirmizi);
goto bas;}

}

}
}
}
 
Son düzenleme:
Cevabınız için saolun fakat ben başlangıç seviyesindeyim ccs yi hic bilmiyorum picbasicle başladım yani yukarıdaki koddan hic bisey anlamadım :) ama tekrar saol yazdığınız kodu paylastiginiz için :)
 
Kullandigiz dile aşina degilim. Kullandigiz pic nedir bilemiyorum ancak eger 628 Gibi dahili pullup direnci olan bir pic ise port b deki bu pullup direnclerini aktif edin. Eger dahili pullup direnci yoksa disaridan pullup direncleri baglayarak deneyin birde.
 
16 f628a evet bu pull up pull down olayını baya araştırdım ama programı etkileyeceni dusumuyodum deneyecem :)
 
Etkilemez mi hic :)
 
Zaten 1 kod aynısını yazdım o sayfadakinin olacak mi diye biseyi yanlış yapıyorum ama bulamadım olmuyo yani tam olarak oturtamadigim şey su tuş tarama mantığı diye bi mantık var diyor herkes tuş sürekli tariyosa zaman nasıl ayarlaniyo öyle bi basmak lazim ki tuşa tam zamanında yani diyelim şifre 123 ben 1 bastığında beklesin program 2 yi 100 MS kadar mesela sonra basa donsun oradaki bekleme kısmını halledemiyorum ama çok saolun mesajlariniz için :)
 

Forum istatistikleri

Konular
130,065
Mesajlar
932,701
Kullanıcılar
453,050
Son üye
alperen343

Yeni konular

Geri
Üst