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=http://hizliresim.com/qqYqOD%5Dhttp://%5Bimg%5Dhttp://i.hizliresim.com/qqYqOD.png)[/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;
}
}
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 .
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 .
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 ?
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...
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.
(http://i.hizliresim.com/b85mp8.png)
#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;
}}
ç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
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
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.
Merhaba, hallettim sorunu topraklamada sorun vardı o yüzden lcdye görüntü gitmiyordu. eepromlu olanını yayınlayabilir misin?
tşkler...
Merhaba hocam,eepromlusunu da yayınlayabilir misiniz?Teşekkürler paylaşım için.
Goto komutu aslinda c nin akisini bozmaktadir fazla tercih edilmez
recep mete bu projenin eepromlu olanını gönderebilir misin bana acaba?
tşkler...