Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

şifreli kilit programı

Başlatan mucitotomaston, 26 Nisan 2008, 22:30:13

mucitotomaston

///// arkadaşlar alın size şifreli kilit programı   ancak programlama yaparken ilk epromun 5 adresini 0 olarak programlayınız . ve ilk şifreniz 4 tane sıfır olacaktır


#include <16f877.h>
#use delay(clock=4000000)
#include <lcd.c>
int acilis=0,şifre=0,kontrol=0,dogru=0,yanlis=0,f=0,yan=0,degis=0,onay=0,menu=0,ilk=0xff;
long int c=0,i=0;
#int_timer0
hizmet(void)
{
output_toggle(PIN_B0);





}

void   main(){
int x[10]={'0','1','2','3','4','5','6','7','8','9'};
 setup_timer_0(rtcc_internal|rtcc_div_32);
 enable_interrupts(global);
 enable_interrupts(int_timer0);
 set_timer0(6);


   lcd_init();
   c=read_eeprom(2);
   if(ilk==c)
     {
      write_eeprom(1,0);
      write_eeprom(2,0);
      write_eeprom(3,0);
      write_eeprom(4,0);
      write_eeprom(5,3);
     }
     while(true){
      if(acilis==0)
       {
        acilis=11;
        lcd_putc("\fSiFREYi GiRiNiZ\n");
         lcd_putc("\      0000     ");
       }
       
       
       
       if(menu==1)
       {
       menu=0;
       lcd_putc("\f YENi SiFRENiZ\n");
       lcd_putc("\n               ");
       }
       
       
       
       if(!input(pin_a2))
       {
       while(!input(pin_a2));
       delay_ms(5);
       şifre++;
       if(şifre==11) şifre=0;
       
       
       
       
        if(kontrol==0)
        {
        lcd_gotoxy(7,2);
        lcd_putc(x[şifre]);
        }
       
       
       
       if(kontrol==1)
        {
        lcd_gotoxy(8,2);
        lcd_putc(x[şifre]);
        }
        
  
  
       if(kontrol==2)
        {
        lcd_gotoxy(9,2);
        lcd_putc(x[şifre]);
        }
        
        
        
         if(kontrol==3)
        {
        lcd_gotoxy(10,2);
        lcd_putc(x[şifre]);
        }
       }
       
       
       
       if(!input(pin_a0))
         {
         
        while(!input(pin_a0));
        delay_ms(5);
        if(şifre==0) şifre=10;
        şifre--;
         
         
          if(kontrol==0)
        {
        lcd_gotoxy(7,2);
        lcd_putc(x[şifre]);
        }
       
       
       
       if(kontrol==1)
        {
        lcd_gotoxy(8,2);
        lcd_putc(x[şifre]);
        }
        
  
  
       if(kontrol==2)
        {
        lcd_gotoxy(9,2);
        lcd_putc(x[şifre]);
        }
        
        
        
         if(kontrol==3)
        {
        lcd_gotoxy(10,2);
        lcd_putc(x[şifre]);
        }
       }
         
         
         
       if(!input(pin_a1))
       {
       while(!input(pin_a1));
       delay_ms(5);
       kontrol++;
       f++;
       
       if(kontrol==5) kontrol=0;
       
       
       if(kontrol==1)
       {
       if(degis==0)
       {
       c=read_eeprom(1);
       if(c==şifre) dogru++;
       else yanlis++;
       }
       
       if(degis==1)
        {
        onay++;
        write_eeprom(1,şifre);
        }
        lcd_putc("\n      *000       ");
       }
         
       if(kontrol==2)
       {
       if(degis==0)
        {
         c=read_eeprom(2);
          
         if(c==şifre) dogru++;
         else yanlis++;
        }
        if(degis==1)
        {
        onay++;
        write_eeprom(2,şifre);
        }
      
      lcd_putc("\n      **00       ");
       
       }
       
       if(kontrol==3)
       {
        if(degis==0)
        {
        c=read_eeprom(3);
        
        if(c==şifre) dogru++;
        else yanlis++;
        }
        
        if(degis==1)
        {
         onay++;
         write_eeprom(3,şifre);
        }
      
      
      lcd_putc("\n      ***0       ");
      
       }
       
       if(kontrol==4)
        {
         if(degis==0)
         {
         c=read_eeprom(4);
         
         if(c==şifre) dogru++;
         else yanlis++;
         }
         
         if(degis==1)
          {
          onay++;
          write_eeprom(4,şifre);
          }
          
          
           lcd_putc("\n      ****       ");
           delay_ms(1000);
         }
           }  
           
           
          if(onay==4)
            {
            
            lcd_putc("\fMUCiT ELETRONiK");
            lcd_putc("\n SiFRE DEGiSTi ");
            write_eeprom(20,1);
            kontrol=0; dogru=0; degis=0;şifre=0; onay=0; menu=0; acilis=0;
            delay_ms(2000);
            }
           
           
           if(f==4)
           {
            f=0;
            if(dogru==4)
             {
             dogru=0;
             lcd_putc("\fSiFRE ONAYLANDI \n");
             delay_ms(1500);
             lcd_putc("\fSiFRE DEGiSTiR.\n");
             lcd_putc("\nOK TUSUNA BASIN.");
             acilis=0; kontrol=0; yan=0;şifre=0; 
             output_high(pin_a3);
              for(i=0;i<300;i++)
                {
                delay_ms(10);
               if(!input(pin_a1))
                {
                 while(1)
                 {
                 degis=1; menu=1;
                 if(!input(pin_a1)) break;
                 }
                }
                }
                output_low(pin_a3);
             }
             
           
             
          
          if(yanlis>0)
          {
          yanlis=0; şifre=0; yan++; dogru=0; acilis=0; kontrol=0; 
          lcd_putc("\fHATALI SiFRE \n");
          lcd_putc("\n    GiRDiNiZ   ");
          c=read_eeprom(5);
          if(c==yan)
          {
           yan=0;
           delay_ms(6000);
          }
           delay_ms(3000);
          }
           }
     }
}

Mod : Kod tag kullanmayı ihmal etmeyelim lütfen.

POWER

proğrama ait ısıs  dosyaları yomuydu acaba.Muhtemelen yüklemeyi unuttun.
TB6BKG

kadirbas

Sayın mucitotomaston.
Umarım ukalalık olarak algılamazsınız. Kodunuz üzerinde birkaç değişiklik yaptım. Esasında çalışma mantığınıza (buton kontrollerinde yaptıklarım hariç) fazla dokunmadan, sadece yazdığınız kodu fonksiyonlara bölerek daha anlaşılır hale getirmeye çalıştım.

Şu anda bulunduğum yerde derleyicim de olmadığından tam olarak kontrol edemedim ama ettikten sonra düzeltme de yaparım...

#include <16f877.h> 
#use delay(clock=4000000) 
#include <lcd.c> 

int acilis=0, şifre=0, kontrol=0, dogru=0, yanlis=0, f=0, yan=0, degis=0, onay=0, menu=0, ilk=0xff; 
int x[10]={'0','1','2','3','4','5','6','7','8','9'}; 
long int c = 0,i = 0; 

#define ARTTIR_TUSU		pin_a2
#define	EKSILT_TUSU		pin_a0
#define ONAY_TUSU		pin_a1

#define basiliMi(tus)		(!input(tus))
#define debounceBekle()		(delay_ms(100))

void uygulamaBaslangici();
void lcdMenu();
BYTE tusKontrol();
void durumKontrol();
void şifreHanesiBas(BYTE hane, BYTE gizli);


#int_timer0 
hizmet(void) 
{ 
	output_toggle(PIN_B0); 
} 

void main()
{ 
	uygulamaBaslangici();    
	
	while(true)
	{ 
		lcdMenu();        		
		tusKontrol();
		durumKontrol();
    } 
}

void uygulamaBaslangici()
{
	setup_timer_0(rtcc_internal|rtcc_div_32); 
	enable_interrupts(global); 
	enable_interrupts(int_timer0); 
	set_timer0(6); 
	
	lcd_init(); 
	c = read_eeprom(2); 
	if(ilk == c) 
	{ 
		write_eeprom(1,0); 
		write_eeprom(2,0); 
		write_eeprom(3,0); 
		write_eeprom(4,0); 
		write_eeprom(5,3); 
    } 
}

void lcdMenu()
{
	if(acilis == 0) 
	{ 
		acilis=11; 
		lcd_putc("\fSiFREYi GiRiNiZ\n"); 
		lcd_putc("\      0000     "); 
	}         
       
	if(menu == 1) 
	{ 
		menu = 0; 
		lcd_putc("\f YENi SiFRENiZ\n"); 
		lcd_putc("\n               "); 
	}        
}

BYTE tusKontrol()
{
	if(basiliMi(ARTTIR_TUSU)) 
	{ 
		debounceBekle();
		if(/*Hala*/basiliMi(ARTTIR_TUSU)) 
		{
			şifre++;
			if(şifre == 11) şifre = 0; 
			şifreHanesiBas(kontrol, 0);
		}
	} 
	
	if(basiliMi(EKSILT_TUSU)) 
	{ 
		debounceBekle();
		if(/*Hala*/basiliMi(EKSILT_TUSU))
		{
			if(şifre==0) şifre=10; 
			şifre--; 
			şifreHanesiBas(kontrol, 0);
		}
	}
	
	if(basiliMi(ONAY_TUSU))
	{
		debounceBekle();
		if(basiliMi(ONAY_TUSU))
		{
			kontrol++; 
			f++; 
			if(kontrol == 5) kontrol = 0; 
	
			if(degis == 0) 
			{ 
				c = read_eeprom(kontrol); 
				if(c == şifre) dogru++; 
				else yanlis++; 
			} 
			else
			{ 
				onay++; 
				write_eeprom(kontrol,şifre); 
			} 
			
			şifreHanesiBas(kontrol, 1);
	
			if(kontrol == 4) delay_ms(1000); 
		}
	} 
	
	return 0;	
}

void durumKontrol()
{
	if(onay == 4) 
	{ 
		lcd_putc("\fMUCiT ELETRONiK"); 
		lcd_putc("\n SiFRE DEGiSTi "); 
		write_eeprom(20,1); 
		kontrol=0; dogru=0; degis = 0; şifre=0; onay=0; menu=0; acilis=0; 
		delay_ms(2000); 
	} 
	
	if(f == 4) 
	{ 
		f = 0; 
		if(dogru == 4) 
		{ 
			dogru = 0; 
			lcd_putc("\fSiFRE ONAYLANDI \n"); 
			delay_ms(1500); 
			lcd_putc("\fSiFRE DEGiSTiR.\n"); 
			lcd_putc("\nOK TUSUNA BASIN."); 
			acilis = 0; kontrol = 0; yan = 0;şifre = 0; 
			output_high(pin_a3); 
			for(i = 0; i < 300; i++) 
			{ 
				delay_ms(10); 
				if(input(pin_a1)) 
				{ 
					degis = 1; menu = 1; 
					while(input(pin_a1)) 
					;
					break;
				} 
			} 
			output_low(pin_a3); 
		} 
		
		if(yanlis > 0)
		{
			yanlis=0; şifre=0; yan++; dogru=0; acilis=0; kontrol=0; 
			lcd_putc("\fHATALI SiFRE \n"); 
			lcd_putc("\n    GiRDiNiZ   "); 
			c=read_eeprom(5); 
			if(c == yan) 
			{ 
				yan=0; 
				delay_ms(6000); 
			} 
			delay_ms(3000); 
		} 
	} 
}

void şifreHanesiBas(BYTE hane, BYTE gizli)
{
	lcd_gotoxy(7 + hane, 2); 
	if(gizli) 	lcd_putc('*'); 
	else 		lcd_putc(x[şifre]); 
}


C ile kodlama yapmaya çalışanlara yararı olması dileğiyle...

sb_03

Cehaletimi mazur görün daha önce programlama esnasında eproma veri kaydetmemiştim.Bunun hakkında biligi verebilirmisiniz.
Allahım dünyama da bereket ahiretimede bereketler ver ama dünyasını ahiretine tercih edenlerden eyleme

kadirbas

EEPROM hakkında bilginiz vardır muhtemelen ama ben bir daha hatırlatayım. EEPROMlar, elektriksel olarak yazılabilir silinebilir kalıcı hafızalı entegrelerdir.

Bu gibi çalışma sırasında değişen ve aygıtın çalışma ömrü boyunca saklanması ve kontrol edilmesi gereken veriler  küçük uygulamalarda EEPROMlara saklanırlar genellikle. Sebebi tekrar tekrar yazılabilmeleri (belirli bir sayıda tabiiki) ve BYTE BYTE erişilebilmeleridir.

Kendi hafızasında EEPROM olan denetleyiciler ya da kalıcı hafızaları EEPROM modelinde olan entegrelerde, veri boyutu çok büyük değilse bazı programcılar, yukarıdaki kodlarda olduğu gibi, kendi hafızalarını da kullanmayı seçebilirler.

CCS derleyicisinin kütüphanelerinde "write_eeprom(address, value)" şeklinde bir fonksiyon sayesinde PIC'in dahili EEPROM'una yazabiliyorsunuz. parametre isimlendirmesinden de anlayabileceğiniz gibi, ilk değişken adres, ikinci değikşen ise yazılacak değerdir.

Yine "read_eeprom(address)" fonksiyonuyla, EEPROM'un istenilen adresi okunabilir.

Neyi merak ettiğinizi tam olarak bilemediğimden bu şekilde uzattım. Umarım işinize yarar birşeyler söylemişimdir...

iruraz

Acaba bu kodun yazıldığı şifreli kilit devresinin şeması var mı??