Combination Lock with CCS

Discussion in 'The Projects Forum' started by iruraz, Dec 13, 2009.

  1. iruraz

    Thread Starter New Member

    Aug 31, 2009
    1
    0
    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/
    Code ( (Unknown Language)):
    1.  
    2. #include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
    3.  
    4. // Denetleyici konfigürasyon ayarları
    5. #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
    6.  
    7. #use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
    8.  
    9. #use fast_io(b) //Port yönlendirme komutları B portu için geçerli
    10. #use fast_io(d) //Port yönlendirme komutları B portu için geçerli
    11.  
    12. #define use_portb_lcd TRUE   // LCD B portuna bağlı
    13.  
    14. #include <lcd.c>   // lcd.c dosyası tanıtılıyor
    15.  
    16. #define sut1   pin_d0 // sut1 ifadesi pin_d0 ifadesine eşitleniyor
    17. #define sut2   pin_d1 // sut2 ifadesi pin_d1 ifadesine eşitleniyor
    18. #define sut3   pin_d2 // sut3 ifadesi pin_d2 ifadesine eşitleniyor
    19.  
    20. #define sat1   pin_d3 // sat1 ifadesi pin_d3 ifadesine eşitleniyor
    21. #define sat2   pin_d4 // sat2 ifadesi pin_d4 ifadesine eşitleniyor
    22. #define sat3   pin_d5 // sat3 ifadesi pin_d5 ifadesine eşitleniyor
    23. #define sat4   pin_d6 // sat3 ifadesi pin_d6 ifadesine eşitleniyor
    24.  
    25.  char tus=0; // karakter tipinde değişken tanımlanıyor
    26.  int i,k=0 ;
    27.  int m,n;
    28.  
    29. //*********** Keypad Tarama Fonksiyonu *********
    30.  
    31. char oku() // Fonksiyon ismi
    32. {
    33.    output_d(0x00); // D portu çıkışı sıfırlanıyor
    34.  
    35.    output_high(sat1); // 1. satır lojik-1 yapılıyor
    36.    if (input(sut1))   // 1. sütun okunuyor
    37.       { delay_ms(20); tus=1; }
    38.    if (input(sut2))   // 2. sütun okunuyor
    39.       { delay_ms(20); tus=2; }
    40.    if (input(sut3))   // 3. sütun okunuyor
    41.       { delay_ms(20); tus=3; }
    42.  
    43.    output_low(sat1); // 1. satır lojik-0 yapılıyor
    44.  
    45.    output_high(sat2); // 2. satır lojik-1 yapılıyoradf
    46.    if (input(sut1))   // 1. sütun okunuyor
    47.       { delay_ms(20); tus=4; }
    48.    if (input(sut2))   // 2. sütun okunuyor
    49.       { delay_ms(20); tus=5; }
    50.    if (input(sut3))   // 3. sütun okunuyor
    51.       { delay_ms(20); tus=6; }
    52.  
    53.    output_low(sat2); // 2. satır lojik-0 yapılıyor
    54.  
    55.    output_high(sat3); // 3. satır lojik-1 yapılıyor
    56.    if (input(sut1))   // 1. sütun okunuyor
    57.       { delay_ms(20); tus=7; }
    58.    if (input(sut2))   // 2. sütun okunuyor
    59.       { delay_ms(20); tus=8; }
    60.    if (input(sut3))   // 3. sütun okunuyor
    61.       { delay_ms(20); tus=9; }
    62.    
    63.    output_low(sat3); // 3. satır lojik-0 yapılıyor
    64.  
    65.    output_high(sat4); // 3. satır lojik-1 yapılıyor
    66.    if (input(sut1))   // 1. sütun okunuyor
    67.       { delay_ms(20); tus='*'; }
    68.    if (input(sut2))   // 2. sütun okunuyor
    69.       { delay_ms(20); tus=0; }
    70.    if (input(sut3))   // 3. sütun okunuyor
    71.       { delay_ms(20); tus='#'; }
    72.    
    73.    output_low(sat4); // 3. satır lojik-0 yapılıyor
    74.  
    75.    return tus; // Fonksiyon "tus" değeri ile geri döner
    76. }
    77.  
    78.  
    79.  
    80. //********** ANA PROGRAM FONKSİYONU*******
    81.  
    82. void main ( )
    83. {
    84.    setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
    85.    setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
    86.    setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
    87.    setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
    88.    setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
    89.    setup_adc(ADC_OFF);             // ADC birimi devre dışı
    90.  
    91.    set_tris_b(0x00);   // B portu komple çıkış
    92.    set_tris_d(0x07);   // Yüksek değerlikli 4 bit çıkış, düşük değerlikli 4 bit giriş
    93.  
    94.    write_eeprom(1,2);
    95.    lcd_init();   // LCD hazırlanıyor
    96.  
    97.    printf(lcd_putc,"\fsifre girin="); // LCD'ye string yazdırılıyor
    98.  
    99.    while(1) // Sonsuz döngü
    100.    {
    101.      lcd_gotoxy(2,2);
    102.      
    103.      i=oku();
    104.     }
    105. }
    106.  
     
Loading...