اخواني سلام عليكم
لما دخل باسورد مثلا 123456789 يتقبل مايكرو شفره بشكل طبيعي
حيث يتم خزنها في ايبروم ولما اضغط على زر stop في بروتيس ومن ثم أعيد تشغيل بروتيس ادخل شفره التي قمت بكتابتها سابقا يعمل بشكل طبيعي
ولكن لما اخرج من بروتيس وأعيد أدخل باسورد 123456789 لايتقبله أبدا
علما عند أدخال اي رقم يتم خزنه في ايبروم وبعد ضغط على انتر يقوم مايكرو بقراءه شفره مخزونه مسبقا في ايبروم وويقارنها مع شفره التي تم خزنها
هذا هو كود ادخال شفره
كود:
void test_password(char address)
{
GIE_BIT=0;//Global Interrupt disable bit
delay_ms(20);//delay between read eeprom and write eeprom
if(kp is 4 && pp>0)// cancel password
{
pp--;
eeprom_write(address,pp);
lcd_chr(2,pp+1,' ');
}
else if(kp !=4 && kp!=255)
{
if(pp< 15) // passaword length max. 15 can be change and one for store number of password
{
pp++;
if(equation is 0) {lcd_chr(2,pp,'*'); }
else if(equation is 1)
{
if(number is 2)number=12; //char security[]={8,19,5,6,12,17,14,14,12};
else if(number is 2)number=12;
else if(number is 4)number=14;
else if(number is 7)number=17;
else if(number is 9)number=19;
lcd_chr(2,pp,number+97);
}
eeprom_write( (pp+address),number); //must be write pp for write address start from 1
eeprom_write(address,pp);
}
}
delay_ms(20);//delay between read eepro and write eeprom
GIE_BIT=1;//Global Interrupt Enable bit
}
حيث هنا اولا قمت بالغاء تفعيل الانتربت وانتظرت 20 ملي ثانيه وبعدها اذا تم ضغط على الارقام من كيباده يتم خزن الارقام في ايبروم
طبعا كود أعلاه يمثل داله فرعيه وهذا كود أستدعاء داله
كود:
if(kp !=12 && state_alarm !=1)// password before change
{
test_password(16);
}
حيث 16 يمثل قيمه address
ايضا خزنت طول شفره في موقع address
اما شفره تخزن في موقع address+pp حيث pp يمثل طول شفره
**************************************************
بعدما اضغط على انتر سوف أدخل في هذه الاكواد
كود:
while(kp is 12 && eeprom_read(16)>0) // if switch(#) enter is pressed
{
message( input_pass,1);
for(x=0;x<=eeprom_read(16);x++)
{
if( (eeprom_read(x+16)is eeprom_read(x)) ) state_password=1;
else {
state_password=0;
break; // password vaild and exit from for
}
}
في داله for تعتمد على طول شفره والتي تم خزنها في موقع 16
بعدها اقارن بيانات التي تم ادخالها وهي مخزونه من موقع 17 مع بيانات ابتداءا من موقع 1
علما انه حسب كود اقارن طول شفره اصليه مخزونه بموقع 0 مع طول شفره التي تم أدخالها مخزونه بموقع 16
عندما يسجل مايكرو اي رقم غير متساوي يخرج ويعطي رساله خطأ
انا استغليت ايبروم للكتابه والقراءه بدلا من استخدام متغيرات
مشكله الي عندي كما ذكرت بالبدايه انه اذا غيرت شفره وضعت 123456789 مثلا
ثم اطفا بروتيس من زر stop واعيد تشغيله وادخل رمز 123456789 اوكي يخبرني كود صحيح
انا وضعت لنفسي هذا كود لارى هل يتم خزنت البيانات في ايبروم ام لا
كود:
for(x=0;x<9;x++)
{
k1=eeprom_read(x);
lcd_chr(2,x+1,k1+48);
timer(20);// 65 msecond
}
لما اطفئ بروتيس واعيد تشغيله يظهر على شاشه 123456789
ولكن لما اخرج من بروتيس تماما ثم اعيد تشغيله ارى الارقام تظهر على شاشه تغيرت ويعرض لي 777 فقط ومسح بيانات التي تم خزنها اين مشكله ياخواني