PİC16F877 LCD ŞİFRELİ KAPI KİLİDİ

Başlatan selo_320, 08 Aralık 2014, 20:53:30

selo_320

Slm Arkadaşlar Pic16F877 Lcd Şifreli Kapı Kilidi devresini proje ödevi olarak aldım. Fakat CCS C komutu ile tuş takımlarını 2*16 Lcd ekranda yazdıramadım.




Pic16F877 LCD ŞİFRELİ KAPI KİLİDİN DEVRENİN CCS C KOMUTU

#include <16f877.h>
#fuses hs //kristal tipi belirlendi
#use delay(clock=400000000) //kristal frekansı seçildi
#use fast_io(d) // Port yönlendirme komutları D portu için geçerli
#use fast_io(b) // Port yönlendirme komutları D portu için geçerli
#use fast_io(a) // Port yönlendirme komutları D portu için geçerli

#include <lcd.c>  // lcd.c dosyası tanıtılıyor
#define sut1 pin_b1
#define sut2 pin_b2
#define sut3 pin_b3

#define sat1 pin_a0
#define sat2 pin_a1
#define sat3 pin_a2
#define sat4 pin_a3

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

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(150);
output_low(buzzer);

}

void sifreal()
{
tusal();printf(lcd_putc,"*");sifre1=tus;
tusal();printf(lcd_putc,"*");sifre2=tus;
tusal();printf(lcd_putc,"*");sifre3=tus;
tusal();printf(lcd_putc,"*");sifre4=tus;
}

void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
set_tris_a(0b00000000);
set_tris_b(0b01111000);
set_tris_c(0b00000000);
set_tris_d(0b11111111);
port_b_pullups(TRUE);
output_b(0);

lcd_init();
lcd_send_byte(0,0x0c);

bas:
printf(lcd_putc,"\fSERKAN  ");
printf(lcd_putc,"\nISTANBUL UNIV ");
lcd_gotoxy(1,2);
printf(lcd_putc,"*GIRIS    #DEGIS");

Esifre1=read_eeprom(0);
Esifre2=read_eeprom(1);
Esifre3=read_eeprom(2);
Esifre4=read_eeprom(3);
output_low(buzzer);
while(1)
{

tusal();
if(tus==11)
{

printf(lcd_putc,"\f SIFREYI GIRINIZ");
output_high(sari);
delay_ms(250);
output_low(sari);
output_high(kirmizi);
delay_ms(250);
output_low(kirmizi);
output_high(yesil);
delay_ms(250);
output_low(yesil);
output_high(sari);
lcd_gotoxy(8,2);
sifreal();
delay_ms(1000);

if(sifre1==Esifre1&sifre2==Esifre2&sifre3==Esifre3&sifre4==Esifre4)
{printf(lcd_putc,"\f  SIFRE KABUL  ");
lcd_gotoxy(1,2);
printf(lcd_putc,"\     EDILDI ");
output_low(sari);
output_high(yesil);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
delay_ms(50);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
output_high(kilit);
delay_ms(1000);
output_low(kilit);
delay_ms(1000);
output_low(yesil);
goto bas;}

else
{

printf(lcd_putc,"\f  YANLIS SIFRE ");
lcd_gotoxy(1,2);
printf(lcd_putc,"\  YETKINIZ YOK ");
output_low(sari);
output_high(kirmizi);
output_high(buzzer);
delay_ms(2000);
output_low(buzzer);
output_low(kirmizi);
goto bas ;}
}


if(tus==12)
{
printf(lcd_putc,"\fESKI SIFREYI GIR");
output_high(sari);
lcd_gotoxy(8,2);
sifreal();
delay_ms(1000);

if(sifre1!=Esifre1&sifre2!=Esifre2&sifre3!=Esifre3&sifre4!=Esifre4)
{printf(lcd_putc,"\f  HATALI GIRIS");
Lcd_gotoxy(1,2);
printf(lcd_putc,"\ TEKRAR DENEYIN");

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

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

printf(lcd_putc,"\fYENI SIFRE GIRIN");
output_low(sari);
delay_ms(500)
;output_high(sari);
lcd_gotoxy(8,2);
sifreal();
delay_ms(1000);

printf(lcd_putc,"\f  SIFRE DOGRULA");
output_low(sari);
delay_ms(500);
output_high(sari);
lcd_gotoxy(8,2);

tusal();printf(lcd_putc,"*");sifre5=tus;
tusal();printf(lcd_putc,"*");sifre6=tus;
tusal();printf(lcd_putc,"*");sifre7=tus;
tusal();printf(lcd_putc,"*");sifre8=tus;

printf(lcd_putc,"\f %u %u %u %u",sifre1,sifre2,sifre3,sifre4);
lcd_gotoxy(1,2);
printf(lcd_putc,"\ %u %u %u %u",sifre5,sifre6,sifre7,sifre8);

delay_ms(1500);

if(sifre1==sifre5&sifre2==sifre6&sifre3==sifre7&sifre4==sifre8){
printf(lcd_putc,"\fSIFRENIZ DEGISTI");
output_high(yesil);

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

delay_ms(1000);
output_low(sari);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
delay_ms(50);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);output_low(yesil);goto bas;}

if(sifre1!=sifre5&sifre2!=sifre6&sifre3!=sifre7&sifre4!=sifre8);{
printf(lcd_putc,"\fDOGRULAMA HATASI");
Lcd_gotoxy(1,2);
printf(lcd_putc,"\ TEKRAR DENEYIN");output_low(sari);
output_high(kirmizi);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
delay_ms(50);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
delay_ms(50);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
delay_ms(50);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
output_high(buzzer);
delay_ms(150);
output_low(buzzer);
delay_ms(950);
output_low(kirmizi);
goto bas;}

}

}
}
}




















Recep METE

#1
Daha önce benim bu konuda çalışmalarım olmuştu.Aşağıda verilen sitede 16f877 ile yapılmış örnek var.Takıldığın yer olursa yardımcı olurum.


https://www.picproje.org/index.php/topic,52716.msg399442.html#msg399442
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

selo_320

Arkadaşım keypad kodu hangisi anlamadım sadece keypad kodu gerekiyor.CCS C dilinde kodu ekledim ve keypad kodunu nereye eklemem gerekiyor.

Recep METE

#3
Arkadaşım aşağıdaki kod sana fikir verecektir. Ayrıca senin "keypad tarama " eksik gibime geliyor.

   PIC16F877 ile Tuş Takımı Uygulaması-1
      PIC PROG/DEKA     : Port B jumper'ı LED konumunda olmalı
*******************************************************/
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#use fast_io(d) //Port yönlendirme komutları C portu için geçerli

#byte   portb=0x06   // B portu "tus" ismine eşitleniyor.

#define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eşitleniyor
#define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eşitleniyor
#define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eşitleniyor
#define sut4   pin_d3 // sut3 ifadesi pin_d2 ifadesine eşitleniyor

#define sat1   pin_d4 // sat1 ifadesi pin_d4 ifadesine eşitleniyor
#define sat2   pin_d5 // sat2 ifadesi pin_d5 ifadesine eşitleniyor
#define sat3   pin_d6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor
#define sat4   pin_d7 // sat4 ifadesi pin_d7 ifadesine eşitleniyor

char tus=0; // karakter tipinde değişken tanımlanıyor

//*********** Keypad Tarama Fonksiyonu *********
char keypad_oku() // Fonksiyon ismi
{
   output_d(0x00); // D portu çıkışı sıfırlanıyor

   output_high(sat1); // 1. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=1; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=2; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=3; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xA; }
   output_low(sat1); // 1. satır lojik-0 yapılıyor

   output_high(sat2); // 2. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=4; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=5; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=6; }
   if (input(sut4))   // 4. sütun okunuyor
      { delay_ms(20); tus=0xB; }
   output_low(sat2); // 2. satır lojik-0 yapılıyor

   output_high(sat3); // 3. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=7; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=8; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=9; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0x0C; }
   output_low(sat3); // 3. satır lojik-0 yapılıyor

   output_high(sat4); // 3. satır lojik-1 yapılıyor
   if (input(sut1))   // 1. sütun okunuyor
      { delay_ms(20); tus=0xE; }
   if (input(sut2))   // 2. sütun okunuyor
      { delay_ms(20); tus=0; }
   if (input(sut3))   // 3. sütun okunuyor
      { delay_ms(20); tus=0xF; }
   if (input(sut4))   // 4. sütun okunuyor
      {delay_ms(20); tus=0xD; }
   output_low(sat4); // 3. satır lojik-0 yapılıyor

   return tus; // Fonksiyon "tus" değeri ile geri döner
}

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı

   set_tris_b(0x00);   // B portu komple çıkış
   set_tris_d(0x0F);   // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş

   output_b(0x00); // İlk anda B portu çıkışı sıfırlanıyor

   while(1)  // Sonsuz döngü
   {
       portb=keypad_oku();  // Basılan tuş değerini B portuna aktar
   }
}
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d