Tekrardan merhaba.Geçen günlerde bir çılgınlık yapıp butonla yapmaya çalıştığım sisteme keypad ekledim.Siteden aldığım yardımlarla birşeyler yazdım lakin hala çalışmıyor hatayı bulabilip düzeltebilecek varmı acaba? En sonda şifre doğru yazıldığında da alarmın çalışma sebebi çalışıp çalışmadığını anlamak içindir...
(http://imageshack.com/a/img842/8859/2otg.png)
#include <16f877A.h>
#include <internal_eeprom.c>
#include <kbd.c>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=8000000)
#use fast_io(b)
#use fast_io(a)
#define sut1 pin_d4
#define sut2 pin_d5
#define sut3 pin_d6
#define sat1 pin_d0
#define sat2 pin_d1
#define sat3 pin_d2
#define sat4 pin_d3
#define m1 pin_b0
#define m2 pin_b1
#define ea pin_b2
#define eb pin_b3
#define buzzy pin_b4
unsigned int8 tus,a,b,c,d,e=0;
unsigned int16 sifre=0;
int16 password=3146;
void tus_al() // yazilim bu fonksiyona geldiginde buradan bir tus degeri almadan bu fonksiyondan çikmaz
{
don:
output_high(sut1);
if(input(sat1)){tus=1;goto brk;}
if(input(sat2)){tus=4;goto brk;}
if(input(sat3)){tus=7;goto brk;}
if(input(sat4)){tus=10;goto brk;}
output_high(sut2);
if(input(sat1)){tus=2;goto brk;}
if(input(sat2)){tus=5;goto brk;}
if(input(sat3)){tus=8;goto brk;}
if(input(sat4)){tus=0;goto brk;}
output_high(sut3);
if(input(sat1)){tus=3;goto brk;}
if(input(sat2)){tus=6;goto brk;}
if(input(sat3)){tus=9;goto brk;}
if(input(sat4)){tus=11;goto brk;}
goto don;
brk:
while(!input(sat1));
while(!input(sat2));
while(!input(sat3));
output_high(buzzy);
delay_ms(100);
output_low(buzzy);
}
/*
void tarama() //Yazilim bu fonksiyona geldiginde herhangi bir tusa basilmis mi diye bakar ve beklemeden fonksiyondan çikar.
{
output_high(sut1);
if(input(sat1)){tus=1;goto brk;}
if(input(sat2)){tus=4;goto brk;}
if(input(sat3)){tus=7;goto brk;}
if(input(sat4)){tus=10;goto brk;}
output_high(sut2);
if(input(sat1)){tus=2;goto brk;}
if(input(sat2)){tus=5;goto brk;}
if(input(sat3)){tus=8;goto brk;}
if(input(sat4)){tus=0;goto brk;}
output_high(sut3);
if(input(sat1)){tus=3;goto brk;}
if(input(sat2)){tus=6;goto brk;}
if(input(sat3)){tus=9;goto brk;}
if(input(sat4)){tus=11;goto brk;}
brk:
while(!input(sat1));
while(!input(sat2));
while(!input(sat3));
while(!input(sat4));
}
*/
void main()
{
set_tris_b(0b00000000);
set_tris_d(0b00001111);
output_b(0x00);
output_d(0x00);
output_high(ea);
output_low(eb);
write_int16_eeprom(0,password);
basla:
tus_al();
a=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
b=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
c=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
d=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
e=tus;
if(tus==10) {goto basla;}
delay_ms(300);
sifre=((a*1000)+(b*100)+(c*10)+(d*1));
if(sifre==((read_int16_eeprom(0)*1000)+(read_int16_eeprom(1)*100)+(read_int16_eeprom(2)*10)+(read_int16_eeprom(3)*1))&&e==11)
{
output_high(m1);
output_low(m2);
output_high(buzzy);
//delay_ms(10000);
//goto basla;
}
else
{
output_high(m1);
output_low(m2);
output_high(buzzy);
//goto basla;
}
}
write_int16_eeprom(0,password);
Burada eeprom' un (0)'ıncı adresine password değişkenini yüklemişsin.
if(sifre==((read_int16_eeprom(0)*1000)+(read_int16_eeprom(1)*100)+(read_int16_eeprom(2)*10)+(read_int16_eeprom(3)*1))&&e==11)
Burada da (0)-(1)-(2)-(3)'üncü eeprom adreslerinin okunmasını istemişsin.Sıfırın dışında diğer eeprom adreslerinden eeprom okuma istemen hata olarak duruyor.Çünkü diğer eeprom adreslerine birşey yazmamışsın ki okuyasın.
#include <kbd.c>
ccs c kütüphanesinden keypad fonksiyonu eklemişsin sonrada tuş
çalışma fonksiyonunu aşağıdaki gibi kendin yazmışsın.İkisi bir arada çakışıyor.
void tus_al() // yazilim bu fonksiyona geldiginde buradan bir tus degeri almadan bu fonksiyondan çikmaz
{
don:
output_high(sut1);
if(input(sat1)){tus=1;goto brk;}
if(input(sat2)){tus=4;goto brk;}
if(input(sat3)){tus=7;goto brk;}
if(input(sat4)){tus=10;goto brk;}
output_high(sut2);
if(input(sat1)){tus=2;goto brk;}
if(input(sat2)){tus=5;goto brk;}
if(input(sat3)){tus=8;goto brk;}
if(input(sat4)){tus=0;goto brk;}
output_high(sut3);
if(input(sat1)){tus=3;goto brk;}
if(input(sat2)){tus=6;goto brk;}
if(input(sat3)){tus=9;goto brk;}
if(input(sat4)){tus=11;goto brk;}
goto don;
brk:
while(!input(sat1));
while(!input(sat2));
while(!input(sat3));
output_high(buzzy);
delay_ms(100);
output_low(buzzy);
}
dedğiniz yerleri değiştirdim lakin yine çalışmadı.
#include <16f877A.h>
#include <internal_eeprom.c>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=8000000)
#use fast_io(b)
#use fast_io(a)
#define sut1 pin_d4
#define sut2 pin_d5
#define sut3 pin_d6
#define sat1 pin_d0
#define sat2 pin_d1
#define sat3 pin_d2
#define sat4 pin_d3
#define m1 pin_b0
#define m2 pin_b1
#define ea pin_b2
#define eb pin_b3
#define buzzy pin_b4
unsigned int8 tus,a,b,c,d,e=0;
unsigned int16 sifre=0;
int16 password=3146;
void tus_al() // yazilim bu fonksiyona geldiginde buradan bir tus degeri almadan bu fonksiyondan çikmaz
{
don:
output_high(sut1);
if(input(sat1)){tus=1;goto brk;}
if(input(sat2)){tus=4;goto brk;}
if(input(sat3)){tus=7;goto brk;}
if(input(sat4)){tus=10;goto brk;}
output_high(sut2);
if(input(sat1)){tus=2;goto brk;}
if(input(sat2)){tus=5;goto brk;}
if(input(sat3)){tus=8;goto brk;}
if(input(sat4)){tus=0;goto brk;}
output_high(sut3);
if(input(sat1)){tus=3;goto brk;}
if(input(sat2)){tus=6;goto brk;}
if(input(sat3)){tus=9;goto brk;}
if(input(sat4)){tus=11;goto brk;}
goto don;
brk:
while(!input(sat1));
while(!input(sat2));
while(!input(sat3));
output_high(buzzy);
delay_ms(100);
output_low(buzzy);
}
/*
void tarama() //Yazilim bu fonksiyona geldiginde herhangi bir tusa basilmis mi diye bakar ve beklemeden fonksiyondan çikar.
{
output_high(sut1);
if(input(sat1)){tus=1;goto brk;}
if(input(sat2)){tus=4;goto brk;}
if(input(sat3)){tus=7;goto brk;}
if(input(sat4)){tus=10;goto brk;}
output_high(sut2);
if(input(sat1)){tus=2;goto brk;}
if(input(sat2)){tus=5;goto brk;}
if(input(sat3)){tus=8;goto brk;}
if(input(sat4)){tus=0;goto brk;}
output_high(sut3);
if(input(sat1)){tus=3;goto brk;}
if(input(sat2)){tus=6;goto brk;}
if(input(sat3)){tus=9;goto brk;}
if(input(sat4)){tus=11;goto brk;}
brk:
while(!input(sat1));
while(!input(sat2));
while(!input(sat3));
while(!input(sat4));
}
*/
void main()
{
set_tris_b(0b00000000);
set_tris_d(0b00001111);
output_b(0x00);
output_d(0x00);
output_high(ea);
output_low(eb);
write_int16_eeprom(0,password);
basla:
tus_al();
a=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
b=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
c=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
d=tus;
if(tus==10||tus==11) {goto basla;}
delay_ms(300);
tus_al();
e=tus;
if(tus==10) {goto basla;}
delay_ms(300);
sifre=((a*1000)+(b*100)+(c*10)+(d*1));
if(sifre==((read_int16_eeprom(0))&&e==11))
{
output_high(m1);
output_low(m2);
output_high(buzzy);
//delay_ms(10000);
//goto basla;
}
else
{
output_high(m1);
output_low(m2);
output_high(buzzy);
//goto basla;
}
}
[öneri]bir c programına bu kadar goto yakışmamış.[/öneri]
http://profahmet.wordpress.com/2008/05/29/pic16f877-lcd-sifreli-kilit/ (http://profahmet.wordpress.com/2008/05/29/pic16f877-lcd-sifreli-kilit/)
bu devreyi daha önceden kuran var mı acaba
veya bu devrenin baskı devresi lazım
bu konuda forum kullanıcılarından ve yöneticilerinde yardım bekliyorum
#use fast_io(a)
Arkadadaşım bunu " #use fast_io(d) "
yapıp dener misin bir kez daha.
bir sıkıntı çözümü de benden olsun
output_high(sut3);
yapılan yerler hiç low yapılmıyor
Arkadaşım bu kodlar çalışıyor, bunları kullan.Şifre 1234# dir.İsis şemasını aşağıdaki resimdeki gibi düzenlemelisin.Keypadi muhakkak b portuna tak (port_b_pullups(true);) kodu gerektiğinden.Tuşlara her bastığında buzzerden ses geliyor.Breadboarda denenmiştir çok güzel çalışıyor.Bip sesleri bankamatikteki gibi tuşla birlikte gelmektedir.
#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)
#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 buzzer pin_c0
#define use_portd_lcd TRUE
unsigned int8 tus,e;
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 _eeprom()
{
printf(lcd_putc,"\fRsifre:");
delay_ms(500);
all:
tus_al();
write_eeprom(0,1);
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();
write_eeprom(1,2);
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();
write_eeprom(2,3);
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();
write_eeprom(3,4);
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=((1*1000)+(2*100)+(3*10)+(4*1));
}
void main()
{
set_tris_b(0b00001111);//keypad baglı
set_tris_c(0b00000000);
set_tris_a(0b00000000);
set_tris_d(0b00000000);
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_high(ea);
output_low(eb);
lcd_init(); // LCD hazırlanıyor
basla:
_eeprom();
if(sifre==((read_eeprom(0)*1000)+(read_eeprom(1)*100)+(read_eeprom(2)*10)+(read_eeprom(3)*1))&&e==14)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\f DOGRU SIFRE");
printf(lcd_putc,"\n MOTOR CALISTI");
delay_ms(300);
output_high(m1);
output_low(m2);
}
else
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\f YANLIS SIFRE");
printf(lcd_putc,"\nTEKRAR DENEYINIZ");
delay_ms(1000);
goto basla;
}
}
mesaj birleştirme:: 16 Nisan 2014, 21:56:22
Buda isis şeması:
(http://resimhack.com/img/ads%C4%B1z.png)
ares çizimi mevcut mu hocam
Alıntı yapılan: aydınD - 16 Nisan 2014, 09:57:45
ares çizimi mevcut mu hocam
ares cizimi yok arkadaşım.
merhaba @semfero devreyi kurdum isisde kodlardada küçük bir düzenleme yaptım fakat şifreyi yanlıs girsemde doğru kabul ediyor sizce hata ne olabilir yanlıs bir yere değistirdim galiba
#include <16f877A.h>
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOWRT,NOPROTECT,NODEBUG
#use delay(clock=4000000)
#include <lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#define use_portd_lcd TRUE
#define buzzer pin_B7
#define led1 pin_D3
#define sat1 pin_B0
#define sat2 pin_B1
#define sat3 pin_B2
#define sat4 pin_B3
#define sut1 pin_B4
#define sut2 pin_B5
#define sut3 pin_B6
unsigned int8 tus,e;
unsigned int16 sifre=0;
void tus_al()
{
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 eeprom()
{
printf(lcd_putc,"\fPassword : ");
delay_ms(100);
all:
tus_al();
write_eeprom(0,1);
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();
write_eeprom(1,2);
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();
write_eeprom(2,3);
lcd_gotoxy(13,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();
write_eeprom(3,4);
lcd_gotoxy(14,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=((1*1000)+(2*100)+(3*10)+(4*1));
}
void main()
{
set_tris_a(0x00);
set_tris_b(0x0F);
set_tris_c(0x00);
set_tris_d(0x00);
output_a(0x00);
output_b(0x00);
output_c(0x00);
output_low(LED1);
port_b_pullups(true);
lcd_init();
start:
eeprom();
if(sifre==((read_eeprom(0)*1000)+(read_eeprom(1)*100)+(read_eeprom(2)*10)+(read_eeprom(3)*1))&&e==14)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fWelcome");
delay_ms(100);
output_high(LED1);
}
else
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fWrong Password !");
printf(lcd_putc,"\nTry Again");
delay_ms(1000);
goto start;
}
}
Alıntı yapılan: baranekrem9 - 16 Nisan 2014, 20:07:58
merhaba @semfero devreyi kurdum isisde kodlardada küçük bir düzenleme yaptım fakat şifreyi yanlıs girsemde doğru kabul ediyor sizce hata ne olabilir yanlıs bir yere değistirdim galiba
#include <16f877A.h>
#fuses XT,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOWRT,NOPROTECT,NODEBUG
#use delay(clock=4000000)
#include <lcd.c>
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#define use_portd_lcd TRUE
#define buzzer pin_B7
#define led1 pin_D3
#define sat1 pin_B0
#define sat2 pin_B1
#define sat3 pin_B2
#define sat4 pin_B3
#define sut1 pin_B4
#define sut2 pin_B5
#define sut3 pin_B6
unsigned int8 tus,e;
unsigned int16 sifre=0;
void tus_al()
{
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 eeprom()
{
printf(lcd_putc,"\fPassword : ");
delay_ms(100);
all:
tus_al();
write_eeprom(0,1);
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();
write_eeprom(1,2);
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();
write_eeprom(2,3);
lcd_gotoxy(13,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();
write_eeprom(3,4);
lcd_gotoxy(14,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=((1*1000)+(2*100)+(3*10)+(4*1));
}
void main()
{
set_tris_a(0x00);
set_tris_b(0x0F);
set_tris_c(0x00);
set_tris_d(0x00);
output_a(0x00);
output_b(0x00);
output_c(0x00);
output_low(LED1);
port_b_pullups(true);
lcd_init();
start:
eeprom();
if(sifre==((read_eeprom(0)*1000)+(read_eeprom(1)*100)+(read_eeprom(2)*10)+(read_eeprom(3)*1))&&e==14)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fWelcome");
delay_ms(100);
output_high(LED1);
}
else
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fWrong Password !");
printf(lcd_putc,"\nTry Again");
delay_ms(1000);
goto start;
}
}
Baranekrem,write_eeprom içindeki şifreleri değiştireceksin.Sonra sifre yazan yerdeki (
sifre=((1*1000)+(2*100)+(3*10)+(4*1));) şifreleri değiştireceksin.Anlamadığın yer olursa yardımcı olurum.
pardon tam olarak anlayamadım şifre zaten 1234#değil mi ?
Semfero hocam sağolasın şu an çalışıyor.Lcd'yi çıkartıp direk motorlara bağladım şifre yanlışsa motorları çalıştırıyorum.
Bu arada ares çizimini isteyen arkadaş bu devreyi plakete basmam gerekiyor çizimim bittiğinde buraya atarım.
arkadaşlar buda eepromsuz şifreli kilit çok güzel çalışıyor.Kaçırmayın bir yere indirin bunu. Birgün lazım olur.Yukarıda daha önce verdiğim isis şemasına göre çalışıyor.Şifre 2143# , programın içinden değiştirebilirsiniz.ayrıca isis şemasına birde reset düğmesi ekleyin sistemi aç-kapa yaparken gerekiyor.
#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)
#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 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);
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_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==2143 && e==14)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\f DOGRU SIFRE");
printf(lcd_putc,"\n MOTOR CALISTI");
delay_ms(300);
output_high(m1);
output_low(m2);
}
else
{
lcd_gotoxy(1,1);
printf(lcd_putc,"\f YANLIS SIFRE");
printf(lcd_putc,"\nTEKRAR DENEYINIZ");
delay_ms(1000);
goto basla;
}
}
mesaj birleştirme:: 17 Nisan 2014, 12:40:27
Alıntı yapılan: Ancotar - 17 Nisan 2014, 01:21:43
Semfero hocam sağolasın şu an çalışıyor.Lcd'yi çıkartıp direk motorlara bağladım şifre yanlışsa motorları çalıştırıyorum.
Bu arada ares çizimini isteyen arkadaş bu devreyi plakete basmam gerekiyor çizimim bittiğinde buraya atarım.
Arkadaşım son verdiğim programı yükleyip denerseniz motoru kendi portuna lcd kendi portuna takılır.Daha önceki programda yanlışlık yapmışım.Pardon.Bu programın eepromlu olanınındaki hataları düzelttim.Yakında buraya yükleyeceğim.İzlemeye devam edin.
bende devreyi kurmak istiyourum
çizimlerinizi sabırsızlıkla bekleyeceğim
proje yapım aşamalarını da resimlerseniz gerçekten çok faydalı olacaktır
iyi çalışmalar