Ccs c de kapı kilit şifre programı yazmak için hangi konulara hakim olmak gerek ?
Nasıl bir algoritma kullanmaliyim ?
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.
Ö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;
}
}
(https://s10.postimg.cc/yv79a3gmx/Ekran_Al_nt_s.jpg)