اخي الحبيب funky112233
من خلال بحثي في المنتدى عثرت على هذا الكود الخاص بالباسسورد
وهو يحتوي على امكانية تغيير الرقم السري (الرقم مكون من ستة رموز) علما اني لم افهم اجزاء من البرنامج
المطلوب هو الاتي :-
1- شرح مفصل لهذا الكود
2- كيف لي ان اجعل امكانية رقمين سريين لشخصين كل شخص له رقم خاص به وعليه فعند ادخال الشخص الفلاني لرقمه تظهر رسالة على الشاشة باسم هذا الشخص
كود:
// global variables declaration
char i = 0 , m = 0 , error = 0 ;
const int number[]={'y','y',3,2,1,'x',6,5,4,'x',9,8,7,'x','x',0 ,'y'} ;
char temp[6] ;
char temp2[6] ;
char attempts = 0 ;
unsigned cnt ;
void interrupt()
{
cnt++;
intcon = 0x20 ;
}
// subroutines
void tone1()
{
sound_play ( 659, 250 ) ;
}
void tone2()
{
sound_play ( 698, 250 ) ;
}
void Tone3()
{
sound_play ( 784, 250 ) ;
}
void melody()
{
cnt = 0 ; tmr0 = 0 ;
while( cnt < 36621 && keypad_read()!= 16 ) // 5-minute alarm until long press on *
{
tone1(); tone2(); tone3(); tone3();
tone1(); tone2(); tone3(); tone3();
tone1(); tone2(); tone3();
tone1(); tone2(); tone3(); tone3();
tone1(); tone2(); tone3();
tone3(); tone3(); tone2(); tone2(); tone1();
}
stop_alarm : portc.f3 = 0 ;
}
void set_new_pass()
{
lcd_cmd(lcd_clear) ;
lcd_out(1,1,"ENTER NEW PASS:") ;
lcd_cmd(lcd_second_row) ;
i = 0 ;
while(portc.f2==0) {}
get_new_pass :
if(portc.f2==0) // if CANCEL button is pressed
{
if(i!=0)
{
while(portc.f2==0) {}
if(eeprom_read(i-1)!=temp2[i-1] && error>0 ) error-- ;
lcd_out(2,i," ") ;
lcd_cmd(lcd_move_cursor_left);
i-- ;
goto get_new_pass ;
}
else goto end_sub ;
}
m = 0 ;
m = keypad_released() ;
while(m==0 || m==14 ||m==16) goto get_new_pass ;
lcd_chr_cp('*') ;
temp[i] = number[m] ;
i++ ;
if(i==6) goto confirm_new_pass ;
goto get_new_pass ;
confirm_new_pass:
while(keypad_released() !=14 && portc.f2==1) {}
if(portc.f2==0) goto get_new_pass ;
for(i=0;i<6;i++)
{
eeprom_write(i,temp[i]) ;
delay_ms(20) ;
}
lcd_cmd(lcd_clear) ;
lcd_out(1,3,"NEW PASS HAS" ) ;
lcd_out(2,4,"BEEN ADDED") ;
delay_ms(2000) ;
end_sub :
lcd_cmd(lcd_clear) ;
}
void check_old_pass()
{
start2:
m = 0 ; i = 0 ; error = 0 ;
lcd_cmd(lcd_clear) ;
lcd_out(1,1,"ENTER OLD PASS:") ;
lcd_cmd(lcd_second_row) ;
wait2 :
if(portc.f2==0) // if CANCEL button is pressed
{
if(i!=0)
{
while(portc.f2==0) {}
if(eeprom_read(i-1) != temp2[i-1])
{
if(error>0) error-- ;
}
lcd_out(2,i," ") ;
lcd_cmd(lcd_move_cursor_left);
i-- ;
goto wait2 ;
}
else goto end_sub ;
}
m = keypad_released() ;
while(m==0 || m==14 || m==16) goto wait2 ;
lcd_chr_cp('*') ;
temp2[i] = number[m] ;
if(eeprom_read(i)!=temp2[i]) error++ ;
i++ ;
if(i==6)
{
while(keypad_released()!=14 && portc.f2==1) {}
if(portc.f2==0) goto wait2 ;
goto compare2 ;
}
goto wait2 ;
compare2:
if(error!=0)
{
lcd_cmd(lcd_clear) ;
lcd_out(1,4,"INVALID!!") ;
while(keypad_released()==0) {}
goto start2 ;
}
else set_new_pass() ;
end_sub:
lcd_cmd(lcd_clear) ;
}
// main program
void main()
{
trisb = 0 ; portb = 0 ;
trisd = 0 ; portd = 0 ;
trisc.f0 = trisc.f1 = 0 ; portc = 0 ;
trisc.f2 =1 ;
trisc.f3 = 0 ;
option_reg = 0x84; // Assign prescaler to TMR0
intcon = 0xA0; // Enable TMRO interrupt
// lcd initialization
lcd_init(&portb) ;
lcd_cmd(lcd_cursor_off) ;
// keypad initialization
keypad_init(&portd) ;
// sound play initialization
sound_init(&portc,0) ;
while(1)
{
start :
if(eeprom_read(0) != 0xff) goto get_current_pass ;
set_new_pass() ;
get_current_pass :
i = 0 ;
error = 0 ; // reset error flag
lcd_cmd(lcd_clear) ;
lcd_out(1,4,"ENTER PASS:") ;
lcd_cmd(lcd_second_row) ;
wait :
m = 0 ;
edit:
if(portc.f2==0) // if CANCEL button is pressed
{
cnt = 0 ;
tmr0 = 0 ;
while(portc.f2==0)
{
if(cnt>=367)
{
set_new_pass() ;
goto start ;
}
}
if(i!=0)
{
while(portc.f2==0) {}
if(eeprom_read(i-1)!=temp2[i-1] && error>0 ) error-- ;
lcd_out(2,i," ") ;
lcd_cmd(lcd_move_cursor_left);
i-- ;
goto wait ;
}
}
m = keypad_released() ;
while(m==0 || m==14) goto wait ;
if(m==16)
{
check_old_pass() ;
goto get_current_pass ;
}
lcd_chr_cp('*') ;
temp2[i] = number[m] ;
if(eeprom_read(i)!=temp2[i]) error++ ;
i++ ;
if(i==6)
{
while(keypad_released()!=14 && portc.f2==1) {}
if(portc.f2==0) goto edit ;
goto compare ;
}
goto wait ;
compare :
for(i=0;i<6;i++)
{
if(temp2[i]!=eeprom_read(i)) error++ ;
}
if(error!=0)
{
lcd_cmd(lcd_clear) ;
lcd_out(1,3,"INVALID PASS") ;
error = 0 ;
attempts++ ;
if(attempts>=3)
{
lcd_out( 2,6,"ALARM" ) ;
portc.f3 = 1 ;
melody() ;
goto get_current_pass ;
}
while(keypad_released()==0) {}
goto get_current_pass ;
}
else
{
lcd_cmd(lcd_clear) ;
lcd_out(1,7,"OPEN") ;
portc.f1 = 1 ; delay_ms(5000) ;
portc.f1 = 0 ;
attempts = 0 ;
}
}
}
وهذه هي صورة الدائرة
http://upload.qariya.info/images/qar...45bb74b068.jpg
هذا ولك جزيل الشكر على ما بذلته من جهد معي
وما توفيقي إلا بالله العلي العظيم