السلام عليكم ورحمة الله وبركاته
تم بفضل الله وحده عمل تطوير للكود الذى كان قد وضعه الأخ العزيز فادى لعمل قفل الكترونى بباسوورد مكون من ستة أرقام
الكود يحتوى على بعض الأفكار البرمجية المهمة مثل :
التعامل مع البرامج الفرعية subroutines
التعامل مع شاشة ال lcd
التعامل مع الكيباد من النوع 4x3
التعامل مع مكتبة الصوت sound library
التعامل مع ذاكرة الايبروم الموجودة فى البيك
لذلك أعتبره من البرامج الهامة والمفيدة
لتحميل المشروع شاملا الكود وملف البروتس اضغط على الرابط التالى
http://filaty.com/f/907/11101/6-DIGIT_PASSWORD.rar.html
وهذا هو البرنامج لمن يجد أى صعوبة فى تحميله من الرابط
كود:
// global variables declaration
char i = 0 , m = 0 , check = 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 attempts = 0 ;
// subroutines
void tone1()
{
sound_play ( 659, 250 ) ;
}
void tone2() {
sound_play ( 698, 250 ) ;
}
void Tone3() {
sound_play ( 784, 250 ) ;
}
void melody()
{
tone1(); tone2(); tone3(); tone3();
tone1(); tone2(); tone3(); tone3();
tone1(); tone2(); tone3();
tone1(); tone2(); tone3(); tone3();
tone1(); tone2(); tone3();
tone3(); tone3(); tone2(); tone2(); tone1();
}
void set_new_pass()
{
char m = 0 ,i = 0 ;
lcd_cmd(lcd_clear) ;
lcd_out(1,1,"ENTER NEW PASS") ;
lcd_cmd(lcd_second_row) ;
get_new_pass :
m = 0 ;
if(portc.f4==0 && i!=0) // if CANCEL button is pressed
{
delay_ms(250) ;
lcd_out(2,i," ") ;
lcd_cmd(lcd_move_cursor_left) ;
i-- ;
goto get_new_pass ;
}
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(portc.f2==1 && portc.f4==1) {}
if(portc.f4==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) ;
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 = trisc.f3 = trisc.f4 = 1 ;
// lcd initialization
lcd_init(&portb) ;
lcd_cmd(lcd_cursor_off) ;
// keypad initialization
keypad_init(&portd) ;
// sound play initialization
sound_init(&portc,0) ;
while(1)
{
if(eeprom_read(0) != 0xff) goto get_current_pass ;
set_new_pass() ;
get_current_pass :
i = 0 ;
check = 0 ;
lcd_cmd(lcd_clear) ;
lcd_out(1,4,"ENTER PASS") ;
lcd_cmd(lcd_second_row) ;
wait :
m = 0 ;
if(portc.f4==0 && i!=0) // if CANCEL button is pressed
{
delay_ms(250) ;
lcd_out(2,i," ") ;
lcd_cmd(lcd_move_cursor_left);
i-- ;
goto wait ;
}
if(portc.f3==0) // if CHANGE button is pressed
{
delay_ms(20) ; // switch debouncing
set_new_pass() ;
goto get_current_pass ;
}
m = keypad_released() ;
while(m==0 || m==14 ||m==16) goto wait ;
if(attempts==3)
{
lcd_out( 2,6,"ALARM" ) ;
melody() ;
goto get_current_pass ;
}
lcd_chr_cp('*') ;
if(eeprom_read(i)!=number[m]) check = 1 ;
i++ ;
if(i==6) goto confirm ;
goto wait ;
confirm :
while(portc.f2==1) {}
compare :
if(check!=0)
{
lcd_cmd(lcd_clear) ;
lcd_out(1,3,"INVALID PASS") ;
while(keypad_released()==0) {}
attempts++ ;
goto get_current_pass ;
}
else
{
lcd_cmd(lcd_clear) ;
lcd_out(1,5," OPEN " ) ;
portc.f1 = 1 ; delay_ms(3000) ;
portc.f1 = 0 ;
attempts = 0 ;
}
}
}
أخيرا ... أرجو ممن يجد تطوير أو تعديل فى البرنامج ألا يبخل علينا لأنه هناك دائما الأفضل طالما هناك فكر جيد وجهد مبذول وقبل كل ذلك توفيق من الله عزوجل
وأرجو ممن يجد أى صعوبة فى فهم شىء من البرنامج أن يسأل وسيجد بإذن الله الجواب فكلنا نتعلم من بعضنا وماشاء الله القرية عامرة بأهلها
نصيحة أخيرة
اعلم أخى الكريم أن الفضل بيد الله وأنه سبحانه وتعالى قد أمدنا بقدرات وهبات نستطيع استغلالها فى عمل الكثير والكثير .. فقط استعن بالله ثم ابدأ بالتفكير وستجد نفسك أنجزت برنامجا كاملا أفضل من ذلك بكثير فلا تهدر نفسك حقها فى الفكر والإبداع وحاول ألا يقتصر دورك على أخذ البرامج الجاهزة .
بالطبع هذا الكلام موجه لكل من يريد أن يتعلم برمجة الميكروكنترولر .... فالبرمجة ليست مجرد أكواد وأوامر تسطر بل فكر وإبداع .
آسف على الإطالة ولكنى وجدت أنها كانت ضرورية لكسر حاجز الخوف أو الرهبة لدى الكثير من المبتدئين ... أرجو أن أكون قد أصبت فى توصيل قصدى .
سبحانك اللهم وبحمدك أشهد ألا إله إلا أنت أستغفرك وأتوب إليك
والسلام عليكم ورحمة الله وبركاته