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;}
}
}
}
}