Şifreli Kilit -CCS ile-

Başlatan iruraz, 13 Aralık 2009, 10:47:01

iruraz

Herkese merhaba,

16f877, tuş takımı ve lcd kullanarak bir şifreli kilit yapmak istiyorum. Programlama için ccs kullanıyorum ve ccs'ye yeni başladım. Tuş takımından sayıları alabiliyorum ve başlangıçta eeprom'a  bir şifre yazıyorum. Fakat bu aldığım sayılardan 4 basamaklı bir şifre oluşturmayı başaramıyorum. Bu sayıyı oluşturduğum zaman eeprom'daki değerlerle karşılaştırıp ona göre sonrasını da getirmeye çalışacağım. Ama dediğim gibi sorun sayı oluşturamam. Bu sayıyı oluşturmak için  "şifre=şifre*10+i" gibi bir şey düşündüm ama istediğim sonucu vermedi. Bir yol gösteren olursa sevinirim. Kod eksik olsa da aşağıya koydum, bağlantıda da devre şeması var. İlgilenen herkese şimdiden teşekkür ederim.

http://img502.imageshack.us/i/proo.png/

#include <16f877.h>   


#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) 
#use fast_io(d) 

#define use_portb_lcd TRUE  

#include <lcd.c> 

#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,şifre=0 ;

//*********** 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
}
void baslangic()
{
   write_eeprom(0,2);
   write_eeprom(1,5);
   write_eeprom(2,8);
   write_eeprom(3,0);
}




//********** 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);  
   set_tris_d(0x07);   
   write_eeprom(1,2);

   lcd_init(); 

   printf(lcd_putc,"\fşifre girin="); 

   while(1) 
   {
     lcd_gotoxy(2,2);
     
     i=oku();
     şifre=şifre * 10 + i;
     
    
   }
        
   
}

JKramer

CCS'te int tipi değişkenler varsayılan olarak 8 bittir. Bu yüzden şifre değişkenini int16 yapmalısınız:
int i;
int16 şifre=0 ;


Gözüme sadece bu çarptı, olmazsa daha ayrıntılı inceleriz.