Nije me bilo neko vreme...
Shpiki hvala na pomoci, googlao sam i trazio... evo dokle sam stigao.
Code:
char keypadPort at PORTD; //moduli za keypad 4x4
char keypadPort_Direction at DDRD;
sbit LCD_RS at PORTA2_bit; //moduli za LCD displej
sbit LCD_EN at PORTA3_bit;
sbit LCD_D4 at PORTA4_bit;
sbit LCD_D5 at PORTA5_bit;
sbit LCD_D6 at PORTA6_bit;
sbit LCD_D7 at PORTA7_bit;
sbit LCD_RS_Direction at DDA2_bit;
sbit LCD_EN_Direction at DDA3_bit;
sbit LCD_D4_Direction at DDA4_bit;
sbit LCD_D5_Direction at DDA5_bit;
sbit LCD_D6_Direction at DDA6_bit;
sbit LCD_D7_Direction at DDA7_bit;
char PIN[4], pom[4], UPIN[4], PUK[8], UPUK[8]; //inicijalizacija promenjivih
unsigned short int k=0,znak=0, BNP=0, BNP2=0, p;
int Broj(unsigned short int k){ // f-ja koja vraca vrednost unetu sa tastature
switch (k) {
case 1: p = '1'; break; // koju vrednost vraca keypad 4x3
case 2: p = '2'; break;
case 3: p = '3'; break;
case 5: p = '4'; break;
case 6: p = '5'; break;
case 7: p = '6'; break;
case 9: p = '7'; break;
case 10: p = '8'; break;
case 11: p = '9'; break;
case 14: p = '0'; break;
}
return p;
}
void main(){
DDRA=255;
DDRD=0;
Keypad_init(); //inicijalizacija
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,6,"PIN:");
PIN[0]='1'; //postavljanje PIN-a
PIN[1]='9';
PIN[2]='0';
PIN[3]='5';
PUK[0]='1';
PUK[1]='1';
PUK[2]='1';
PUK[3]='1';
PUK[4]='1';
PUK[5]='1';
PUK[6]='1';
PUK[7]='1';
znak=0;
while(1){ // beskonacna petlja
if(BNP<3){
while(k<4){ // petlja sa promeljivom k za Broj
znak = Keypad_Key_Press(); //promeljivoj znak dodeljuje se vrednost koju vraca f-ja Keypad_Key_Press()
Broj(znak); //f-ja koja transformise vrednost unetu sa tastature u realnu vrednost
while(znak!=0){ //unos PIN-a
UPIN[k]=p; //smestanje PIN-a u prom p
Lcd_Chr(2, k+1,'*'); //ispisuje se * na displeju
delay_ms(4);
znak=0;
k++;
}
}
if(k==4){ // unesen poslednji deo PIN-a
k=0; //postavlja se brojac na nulu
while(1){ //beskonacna petlja
if(PIN[0]==UPIN[0] &&
PIN[1]==UPIN[1] &&
PIN[2]==UPIN[2] &&
PIN[3]==UPIN[3]){ // provera PIN-a sa UPIN-om
delay_ms(2);
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1, 2, "PIN prihvacen"); // Ukoliko se PIN i UPIN poklapaju ispisuje se poruka na displeju
LCD_Out(2, 3, "DOBRODOSLI");
delay_ms(3);
break;
} //eof if
else{ // ukoliko se ne poklapaju // brojac pogresno unetih PIN-ova
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1, 1, "Pogresan PIN"); // ispis na LCD-u u slucaju pogresnog unosa PIN-a
LCD_Out(2, 1, "Pokusajte ponovo");
delay_ms(2);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
BNP++;
} //eof else
break;
} //eof druge While(1)
} //eof if(k==4)
Lcd_Out(1,6,"PIN:");
}
else if(BNP2<9){
Lcd_Out(1,6,"PUK:");
while(k<8){
znak = Keypad_Key_Press(); //promeljivoj znak dodeljuje se vrednost koju vraca f-ja Keypad_Key_Press()
Broj(znak); //f-ja koja transformise vrednost unetu sa tastature u realnu vrednost
while(znak!=0){ //unos PIN-a
UPUK[k]=p; //smestanje PIN-a u prom p
Lcd_Chr(2, k+1,'*'); //ispisuje se * na displeju
delay_ms(4);
znak=0;
k++;
}
}
if(k==8){ // unesen poslednji deo PIN-a
k=0; //postavlja se brojac na nulu
while(1){ //beskonacna petlja
if(PUK[0]==UPUK[0] &&
PUK[1]==UPUK[1] &&
PUK[2]==UPUK[2] &&
PUK[3]==UPUK[3] &&
PUK[4]==UPUK[4] &&
PUK[5]==UPUK[5] &&
PUK[6]==UPUK[6] &&
PUK[7]==UPUK[7]) { // provera PIN-a sa UPIN-om
delay_ms(2);
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1, 2, "PUN prihvacen"); // Ukoliko se PIN i UPIN poklapaju ispisuje se poruka na displeju
LCD_Out(2, 3, "DOBRODOSLI");
delay_ms(3);
break;
} //eof if
else{ // ukoliko se ne poklapaju // brojac pogresno unetih PIN-ova
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1, 1, "Pogresan PUK"); // ispis na LCD-u u slucaju pogresnog unosa PIN-a
LCD_Out(2, 1, "Pokusajte ponovo");
delay_ms(2);
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
BNP2++;
} //eof else
break;
} // eof while(1)
} // eof if
Lcd_Out(1,6,"PUK:");
} //eof else if
else if(BNP==9){
Lcd_Cmd(_LCD_CLEAR);
LCD_Out(1, 2, "Pogresan PUK");
LCD_Out(2, 3, "KARTICA BLOKIRANA");
}
}
Problem mi predstavlja EEPROM koji ne mogu bas da shvatim, pa sam odlucio prvo da uradim bez njega pa kasnije da ga ubacim. Dakle EEPROM ce mi biti potreban za memorisanje BNP (Broj neuspelih pokusaja PIN-a) i BNP2 (Broj neuspelih pokusaja PUK-a). Citao sam i gledao sampleove ali ne znam gde i kako da ubacim u kod.
P.S zanemariti deo komentara kod PUK koda, samo su prekopirani jer je kod kopiran pa modifikovan :D
Ako moze neka konkretnija pomoc bio bih zahvalan... Pozdrav