Combination Lock with CCS

Thread Starter

iruraz

Joined Aug 31, 2009
1
Hi everyone,

I try to make combination lock with 16f877, keypad and lcd. I use ccs for programming. Eeprom is used and lock have a initial value. I could get the number from keypad but i couldn't make 4 digits from it. And i couldn't compare with inital value. I am starter about pic and how can i do this project. Please help me ways. Thanks. (here is the circuit and my code, it is incomplete)

http://img502.imageshack.us/i/proo.png/
Rich (BB code):
#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ı B portu için geçerli 

#define use_portb_lcd TRUE   // LCD B portuna bağlı 

#include <lcd.c>   // lcd.c dosyası tanıtılıyor 

#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 sat1   pin_d3 // sat1 ifadesi pin_d3 ifadesine eşitleniyor 
#define sat2   pin_d4 // sat2 ifadesi pin_d4 ifadesine eşitleniyor 
#define sat3   pin_d5 // sat3 ifadesi pin_d5 ifadesine eşitleniyor 
#define sat4   pin_d6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor 

 char tus=0; // karakter tipinde değişken tanımlanıyor 
 int i,k=0 ; 
 int m,n; 

//*********** Keypad Tarama Fonksiyonu ********* 

char 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; } 
  
   output_low(sat1); // 1. satır lojik-0 yapılıyor 

   output_high(sat2); // 2. satır lojik-1 yapılıyoradf 
   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; } 

   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; } 
    
   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='*'; } 
   if (input(sut2))   // 2. sütun okunuyor 
      { delay_ms(20); tus=0; } 
   if (input(sut3))   // 3. sütun okunuyor 
      { delay_ms(20); tus='#'; } 
    
   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_spi(SPI_SS_DISABLED);     // SPI 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(0x07);   // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş 

   write_eeprom(1,2); 
   lcd_init();   // LCD hazırlanıyor 

   printf(lcd_putc,"\fsifre girin="); // LCD'ye string yazdırılıyor 

   while(1) // Sonsuz döngü 
   { 
     lcd_gotoxy(2,2); 
      
     i=oku(); 
    } 
}
 
Top