Şifreli Keypad ile LCD ve DC motor ileri- geri-hızlı stop

Başlatan Recep METE, 18 Nisan 2014, 21:06:54

Recep METE

Arkadaşlar, şifreli Keypad-LCD ve DC motor çalıştırma projesini sunuyorum.Şifre 5217# 'dir.Şifre doğrulandıktan sonra DC motoru tuşlardan ileri-geri ve hızlıstopla durdurabilirsiniz.Programı durdurmak için gerektiğinde reset tuşunu kullanabilirsiniz.

[/url]][/img]

  
  #include        <16f877.h>
 #fuses          XT,NOWDT,NOPROTECT
 #use            delay(clock=4000000)
 #include        <lcd.c>
 #use            fast_io(c)  
 #use            fast_io(b)             
 #use            fast_io(d)
  #use            fast_io(a)
#use            fast_io(e)

 
 
 #define         sut1 pin_B4                                       
 #define         sut2 pin_B5                      
 #define         sut3 pin_B6  
 
 
 #define         sat1 pin_B0
 #define         sat2 pin_B1                
 #define         sat3 pin_B2                    
 #define         sat4 pin_B3  
 
 
 #define         m1 pin_a0
 #define         m2 pin_a1
 #define         ea pin_a2
 #define         eb pin_a3
#define buton_ileri pin_e0
#define buton_geri  pin_e1
#define buton_stop  pin_e2
 

 
 #define         buzzer      pin_c0   
 #define use_portd_lcd TRUE
            
 
  unsigned int8  tus,e,k,l,m,n;
  unsigned int16 sifre=0;

 void tus_al()// yazılım bu fonksiyona geldiğinde buradan bir
 {            // tus değeri almadan bu fonksiyondan çıkmaz
 don:
 output_low(sut1);output_high(sut2);output_high(sut3);
 if(input(sat1)==0){tus=1;goto brk;}
 if(input(sat2)==0){tus=4;goto brk;}
 if(input(sat3)==0){tus=7;goto brk;}
 if(input(sat4)==0){tus=15;goto brk;}

 output_high(sut1);output_low(sut2);output_high(sut3);
 if(input(sat1)==0){tus=2;goto brk;}
 if(input(sat2)==0){tus=5;goto brk;}
 if(input(sat3)==0){tus=8;goto brk;}
 if(input(sat4)==0){tus=0;goto brk;}                        

 output_high(sut1);output_high(sut2);output_low(sut3);
 if(input(sat1)==0){tus=3;goto brk;}
 if(input(sat2)==0){tus=6;goto brk;}
 if(input(sat3)==0){tus=9;goto brk;}      
 if(input(sat4)==0){tus=14;goto brk;}
 
 output_high(sut1);output_high(sut2);output_high(sut3);
 if(input(sat1)==0){tus=10;goto brk;}
 if(input(sat2)==0){tus=11;goto brk;}
 if(input(sat3)==0){tus=12;goto brk;}
 if(input(sat4)==0){tus=13;goto brk;}
 goto don;  
 brk:
 while(!input(sat1));
 while(!input(sat2));          
 while(!input(sat3));
 while(!input(sat4));                           
 output_high(buzzer);delay_ms(100);output_low(buzzer); 
 }   

 

 void main()
 {            
  set_tris_b(0b00001111);//keypad baglı    
 set_tris_c(0b00000000); 
 set_tris_a(0b00000000); 
 set_tris_d(0b00000000);
 set_tris_e(0b00000111);
 port_b_pullups(true);//*** CMOS girişler voltaja hassastır , en ufak voltajı 0-1 olarak kabul edebilirler.
 //Bunun önüne geçmek için pull-up yada pull-down direnci ile hat 0'a yada 5V'a çekilir ve stabil hale getirilir.
 output_a(0x00);                            
 output_b(0x00); 
 output_c(0x00); 
 output_d(0x00); 
 output_e(0x00); 

 output_high(ea);
   output_low(eb);

  lcd_init();   // LCD hazırlanıyor
basla:

 


 printf(lcd_putc,"\fsifre:");
 delay_ms(500);

 all:
   
  tus_al();
 k=tus;
  
  lcd_gotoxy(9,1);
  printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
 l=tus;
 
  lcd_gotoxy(10,1);printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  m=tus;
  
  lcd_gotoxy(11,1);printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
  
  tus_al();
  n=tus;
  
  lcd_gotoxy(12,1);
  printf(lcd_putc,"%u",tus);
  if(tus==10||tus==11||tus==12||tus==13||tus==14||tus==15) {goto all;}
  delay_ms(300);
 
  tus_al();
  e=tus;
  if(tus==10||tus==11||tus==12||tus==13||tus==15) {goto all;}
  delay_ms(300);
 
 sifre=((k*1000)+(l*100)+(m*10)+(n*1));

if(sifre==5217 && e==14)
 
 
  {
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f   DOGRU SIFRE");
  printf(lcd_putc,"\n  PROJE CALISTI");
  delay_ms(300);
    
 
  while(1) // Sonsuz döngü
   {
      if (input(buton_ileri)) // İLERİ Butonuna basılsı ise
      {
         output_high(m1); // L298 Input1 girişi lojik-1
         output_low(m2);  // L298 Input2 girişi lojik-0
      }

      if (input(buton_geri)) // GERİ Butonuna basılsı ise
      {
         output_low(m1);  // L298 Input1 girişi lojik-0
         output_high(m2); // L298 Input1 girişi lojik-1
      }
      if (input(buton_stop)) // HIZLI STOP Butonuna basılsı ise
      {
         output_low(m1); // L298 Input1 girişi lojik-0
         output_low(m2); // L298 Input1 girişi lojik-0
         // Hızlı stop için burada her iki girişte lojik-1 olabilirdi.
         // Önemli olan Hızlı Stop için, her iki girişin aynı seviyede olması
      }

   }
  
  }
  
  else
  {
  
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f  YANLIS SIFRE");
  printf(lcd_putc,"\nTEKRAR DENEYINIZ");
  delay_ms(1000);
  
  goto basla;
  }
  }
 
 
 
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

Merhaba projeniz çok beğendim tebrik ederim denedim gayet güzel çalışıyor fakat küçük bir şey sormak istiyorum şifreyi nasıl değiştirebiliri sifre = 5217 yi değistirdigim zaman kabul etmıyor sadee 5217 yı kabul edıyor yardımcı olursanız sevınırım ıyı calısmalar .

Recep METE

Alıntı yapılan: baranekrem9 - 19 Nisan 2014, 00:15:01
Merhaba projeniz çok beğendim tebrik ederim denedim gayet güzel çalışıyor fakat küçük bir şey sormak istiyorum şifreyi nasıl değiştirebiliri sifre = 5217 yi değistirdigim zaman kabul etmıyor sadee 5217 yı kabul edıyor yardımcı olursanız sevınırım ıyı calısmalar .

şifreyi değiştirmek için: 0299-1299-3299-4299...9299 'içinde olan sayıları kullanmalısın.Bu sayıların üstündeki sayıları kullanırsan program hatalı çalışıyor.Değişkenlerle ilgili bir sorun olmalı.Forumda bu sorunu çözmek için konu açtım .
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

#3
Hocam açtığınız konuyu okudum sorun çözüldü bir arkadaşımız sağ olsun halletmiş şifre yazan yeri
password = (((int16)k*1000)+((int16)l*100)+(m*10)+(n*1));

bu şekilde değiştirmek yeterliymiş teşekkürler iyi çalışmalar :)

mesaj birleştirme:: 20 Nisan 2014, 12:24:36

Anlamadığım bir satır var açıklarsanız sevinirim tuş alma fonksiyonun sonlarında söyle bir satır gördüm

output_high(sut1);output_high(sut2);output_high(sut3);


burada bir tanesinin low olması gerekmez mi bu satır tam olarak ne işe yarıyor ?

Kabil ATICI

program 4x4 tuş takımına göre yazılmış ve 3x4'e göre düzenlenmiş. Asılnda 3x4 tuş takımı için  bu bölüm silinebilir. Şemaya bakabilirsiniz...
ambar7

Recep METE

Yeniden düzenlenmiş,daha stabil:İşte Versiyon v.2.0 çıktı ;D
Arkadaşlar şifreli keypad(eeopromsuz),lcd,dc motor proje çalışması.Üniversite,lise öğrencilerine fikir verebileceği kanaatindeyim.Programda lüzumsuz yerler çıkarılarak daha stabil hale getirilmiştir.Ayrıca aynı anda birçok çalışmayı pice yaptırıyorsunuz.Breadboardda denenmiştir.Tuş sesleri aynı bankamatikteki gibi tuşa basılır basılmaz çıkmaktadır.
Programın Özellikleri:
1-Keypad kullanımı
2-Keypedde şifre kullanımı(eeopromsuz)
3-dc motor(şifre girdikten sonra çalışır)
4-dc motor çalışırken LED yanıp sönerek motorun çalıştığını görme
5-LCD kullanımı,
6-LCD üzerinde şifreyi başkalarının görmemesi için**** şeklinde görünme
7-dc motorun ileri-geri-hızlı durdurma tuşları ile yönlendirilmesi
8-reset tuşu
9-keypad ve buton kullanımının aynı anda aynı pic üzerinde kullanılması
10-Şifredeki hata giderildi.Artık program üzerinde değiştirebiliyorsunuz.
11-Program hatasız çalışmaktadır.
12-Ses uygulaması(buzzer)
13-tuşa basarbasmaz bankamatikteki gibi tuş sesi gelmektedir.
14-Şifre 9876#'dir.Program üzerinden değiştirebilirsiniz.
15-Programın versiyon V.3 hazırlanıyor daha çok işlevlisi çok yakında, izlemeye devam edin ;)
16-Eepromlusunu da yakında yayınlıyacağım.









  
 #include        <16f877.h>
 #fuses          XT,NOWDT,NOPROTECT
 #use            delay(clock=4000000)
 #include        <lcd.c>
 #use            fast_io(c)  
 #use            fast_io(b)             
 #use            fast_io(d)
 #use            fast_io(a)
 #use            fast_io(e)
 #define         sut1 pin_B4                                       
 #define         sut2 pin_B5                      
 #define         sut3 pin_B6  
 #define         sat1 pin_B0
 #define         sat2 pin_B1                
 #define         sat3 pin_B2                    
 #define         sat4 pin_B3  
 #define         m1 pin_a0
 #define         m2 pin_a1
 #define         ea pin_a2
 #define         eb pin_a3
 #define buton_ileri pin_e0
 #define buton_geri  pin_e1
 #define buton_stop  pin_e2
 #define buzzer      pin_c0   
 #define use_portd_lcd TRUE
            
 
  unsigned int8  tus,e,a,b,c,d;
  
  unsigned  int16 sifre=0;

 void tus_al()// yazılım bu fonksiyona geldiğinde buradan bir
 {            // tus değeri almadan bu fonksiyondan çıkmaz
 don:
 output_low(sut1);output_high(sut2);output_high(sut3);
 if(input(sat1)==0){tus=1;goto brk;}
 if(input(sat2)==0){tus=4;goto brk;}
 if(input(sat3)==0){tus=7;goto brk;}
 if(input(sat4)==0){tus=15;goto brk;}

 output_high(sut1);output_low(sut2);output_high(sut3);
 if(input(sat1)==0){tus=2;goto brk;}
 if(input(sat2)==0){tus=5;goto brk;}
 if(input(sat3)==0){tus=8;goto brk;}
 if(input(sat4)==0){tus=0;goto brk;}                        

 output_high(sut1);output_high(sut2);output_low(sut3);
 if(input(sat1)==0){tus=3;goto brk;}
 if(input(sat2)==0){tus=6;goto brk;}
 if(input(sat3)==0){tus=9;goto brk;}      
 if(input(sat4)==0){tus=14;goto brk;}
 
 
 goto don;  
 brk:
 while(!input(sat1));
 while(!input(sat2));          
 while(!input(sat3));
 while(!input(sat4));                           
 output_high(buzzer);delay_ms(100);output_low(buzzer); 
 }   

 

 void main()
 {            
  set_tris_b(0b00001111);//keypad baglı    
 set_tris_c(0b00000000); 
 set_tris_a(0b00000000); 
 set_tris_d(0b00000000);
 set_tris_e(0b00000111);
 port_b_pullups(true);//*** CMOS girişler voltaja hassastır 
 output_a(0x00);                            
 output_b(0x00); 
 output_c(0x00); 
 output_d(0x00); 
 output_e(0x00); 

 output_high(ea);
 output_low(eb);

 lcd_init();   // LCD hazırlanıyor
 basla:

 printf(lcd_putc,"\fsifre:");
 delay_ms(500);

  all:
 
 tus_al();
 a=tus;
 lcd_gotoxy(9,1);
 printf(lcd_putc,"*");
 if(tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 b=tus;
 lcd_gotoxy(10,1); 
 printf(lcd_putc,"*");
 if(tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 c=tus;
 lcd_gotoxy(11,1); 
 printf(lcd_putc,"*");
 if(tus==14||tus==15) {goto basla;}
 delay_ms(300);
  
 tus_al();
 d=tus;
 lcd_gotoxy(12,1);
 printf(lcd_putc,"*");
 if(tus==14||tus==15) {goto basla;}
 delay_ms(300);
 
 tus_al();
 e=tus;

 if(tus==15) {goto basla;}
 delay_ms(300);
  
 
 sifre=(((int16)a*1000)+((int16)b*100)+(c*10)+(d*1));

 if(sifre==9876&& e==14)
 
  {
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f   DOGRU SIFRE");
  printf(lcd_putc,"\n  PROJE CALISTI");
  delay_ms(300);
    
 
  while(1) // Sonsuz döngü
   {
      if (input(buton_ileri)) // İLERİ Butonuna basılsı ise
      {
         output_high(m1); // L298 Input1 girişi lojik-1
         output_low(m2);  // L298 Input2 girişi lojik-0
      }

      if (input(buton_geri)) // GERİ Butonuna basılsı ise
      {
         output_low(m1);  // L298 Input1 girişi lojik-0
         output_high(m2); // L298 Input1 girişi lojik-1
      }
      if (input(buton_stop)) // HIZLI STOP Butonuna basılsı ise
      {
         output_low(m1); // L298 Input1 girişi lojik-0
         output_low(m2); // L298 Input1 girişi lojik-0
         // Hızlı stop için burada her iki girişte lojik-1 olabilirdi.
         // Önemli olan Hızlı Stop için, her iki girişin aynı seviyede olması
      }

output_high(pin_c1);
delay_ms(100);
output_low(pin_c1);
delay_ms(100);

   }
  
  }
  
  else
  {
  
   lcd_gotoxy(1,1);
  printf(lcd_putc,"\f  YANLIS SIFRE");
  printf(lcd_putc,"\nTEKRAR DENEYINIZ");
  delay_ms(1000);
  
  goto basla;
  
 }}
  
 
 
 
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

aydınD

çalışmalarınızdan ve bilgilendirmelerinizden ötürü saygı ve şükranlar
dosya şeklin de de paylaşır mısınız
isis ares c hex

venom00

Merhaba semfero ; dediğin devreyi kurdum kodları derleyince hiçbir hata almadım ancak isis'te çalıştırınca lcd ye görüntü gelmiyor. Nerde hata yaptım acaba yardım edebilir misin ?
tşkler

Recep METE

Alıntı yapılan: venom00 - 18 Aralık 2014, 00:48:51
Merhaba semfero ; dediğin devreyi kurdum kodları derleyince hiçbir hata almadım ancak isis'te çalıştırınca lcd ye görüntü gelmiyor. Nerde hata yaptım acaba yardım edebilir misin ?
teşekkürler
Arkadaşım lcd kütüphanesinde bir sorun olabilir.pin baglantilarinda olabilir. Mesajini yeni farkettim.Tekrar benimle baglantiya gecersen yardımcı olurum. Bu calismanin eepromlunuda yaptim. Çok super oldu. Istersen Onuda yayinliyabilirim.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

venom00

Merhaba, hallettim sorunu topraklamada sorun vardı o yüzden lcdye görüntü gitmiyordu. eepromlu olanını yayınlayabilir misin?
tşkler...

melike aslı

Merhaba hocam,eepromlusunu da yayınlayabilir misiniz?Teşekkürler paylaşım için.

Okan AKÇA

Goto komutu aslinda c nin akisini bozmaktadir fazla tercih edilmez

venom00

recep mete bu projenin eepromlu olanını gönderebilir misin bana acaba?
tşkler...