Kapı kilit şifre programı

Başlatan atakhan, 12 Mart 2018, 17:36:34

atakhan

Ccs c de kapı kilit şifre programı yazmak için  hangi konulara hakim olmak gerek ?
Nasıl bir algoritma kullanmaliyim ? 

fide

Portb interrupt on change, port tarama ve eeprom yada ext eeprom yazmayı ve karşılaştırma yapmayı bilmen yeterli.
Önce eeproma yazdığın şifreyi oku bir değişkene aktar.
Sonra pin girişlmesi için interrupt bekle.
Tuşa basılınca interrupt olarak atanan pinlerden biri high (tasarıma göre low da olabilir ) olacak. Sonra hanhi pinin low olduğunu, ve bunun hangi satırdan tetiklediğini bulmak için satırları tek tek tarama yapman gerekecek.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

Salih

#2
Örnek alıp geliştirebileceğin, program


//KeyPad kullanarak, şifreli kilit devresi.
#Include  <16F877.h>
#Fuses XT,NOWDT


#Use Delay(clock=4M)
#Include <Lcd.c>
#Define  kapi  Pin_C0


char Tus_Oku()
{      
      Output_High(Pin_B4);
      Output_High(Pin_B5);
      Output_High(Pin_B6);      
      Output_Low(Pin_B4);
      Delay_ms(1);
      if (!input(Pin_B0)) Return('1');
      if (!input(Pin_B1)) Return('4');
      if (!input(Pin_B2)) Return('7');
      if (!input(Pin_B3)) Return('*');
      Output_High(Pin_B4);
      Output_Low(Pin_B5);
      Delay_ms(1);
      if (!input(Pin_B0)) Return('2');
      if (!input(Pin_B1)) Return('5');
      if (!input(Pin_B2)) Return('8');
      if (!input(Pin_B3)) Return('0');
      Output_High(Pin_B5);
      Output_Low(Pin_B6);      
      Delay_ms(1);            
      if (!input(Pin_B0)) Return('3');
      if (!input(Pin_B1)) Return('6');
      if (!input(Pin_B2)) Return('9');
      if (!input(Pin_B3)) Return('#');
      Output_High(Pin_B6);
      Return(0);
}


char tus,otus,ilkmi,sayac=0;
char sifre[4],sifreg[4];
int1 sdegistir=0;
Void Main()
{
   Setup_psp(PSP_DISABLED);
   Setup_spi(SPI_SS_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T1_DISABLED,0,1);   
   Setup_adc_ports(NO_ANALOGS);
   Setup_adc(ADC_OFF);
   Setup_CCP1(CCP_OFF);
   Setup_CCP2(CCP_OFF);   
   Port_B_Pullups(True);
   output_C(0);
   ilkmi = Read_eeprom(9);
   if (ilkmi==5)
      {         
         sifre[0] = Read_eeprom(0);
         sifre[1] = Read_eeprom(1);
         sifre[2] = Read_eeprom(2);
         sifre[3] = Read_eeprom(3);                 
      }else
               {
                  sifre[0] = '0';
                  sifre[1] = '0';
                  sifre[2] = '0';
                  sifre[3] = '0';
                  write_eeprom(0,sifre[0]);
                  write_eeprom(1,sifre[1]);
                  write_eeprom(2,sifre[2]);
                  write_eeprom(3,sifre[3]);
                  write_eeprom(9,5);                
               }      
   Lcd_init();
   Delay_ms(10);
   Printf(lcd_putc,"\fSifre=\nSifreyi Giriniz");
      While(True)
      {         
         tus = tus_oku();
         if ((tus!=otus)&&(tus))
         {
         
            if (sdegistir)
                  {
                           Lcd_gotoxy(sayac+7,1);
                           Lcd_PutC('*');
                           sifre[sayac]=tus;
                           sayac++;
                           if (sayac>3)
                              {
                                 write_eeprom(0,sifre[0]);
                                 write_eeprom(1,sifre[1]);
                                 write_eeprom(2,sifre[2]);
                                 write_eeprom(3,sifre[3]);
                                 sdegistir=0;
                                 Printf(lcd_putc,"\fSifre\nDegistirildi");
                                 delay_ms(3000);
                                 printf(Lcd_PutC,"\fKapi Acildi");
                              }                  
                  }
            if ((input_state(kapi))&&(tus=='*'))
               {
                  sdegistir=1; 
                  Printf(lcd_putc,"\fSifre=\nY.Sifreyi Girin");
                  sayac=0;
               }else
                    {           
                       if (!input_state(kapi))
                        {
                           Lcd_gotoxy(sayac+7,1);
                           Lcd_PutC('*');
                           sifreg[sayac]=tus;
                           sayac++;
                           if (sayac>3)
                              {
                                 if ((sifre[0]==sifreg[0])&&(sifre[1]==sifreg[1])&&
                                     (sifre[2]==sifreg[2])&&(sifre[3]==sifreg[3]))
                                    {
                                       output_high(kapi);                                       
                                       printf(Lcd_PutC,"\fKapi Acildi");
                                    }else
                                    {
                                       printf(Lcd_PutC,"\fYanlis Sifre");
                                       delay_ms(3000);
                                       sayac=0;
                                       Printf(lcd_putc,"\fSifre=\nSifreyi Giriniz");
                                    }
                              }
                        }else
                          {
                           if (tus=='#')
                              {
                                 output_low(kapi);
                                 Printf(lcd_putc,"\fSifre=\nSifreyi Giriniz");
                                 sayac=0;
                              }                  
                          }
                     }   
         }
            delay_ms(10);
            otus=tus;
      }
}