اما مايخص داله setting
كنت بالبدايه اتعامل مع داله الانتربت فكنت ارسل لها قيمه معينه لاحظ الكود لداله انتربت
في اخر كود يوجد هذا امر
ماذا يعني
معناها اذا وصلت الى البن 16 من متكامله 74HC595 لابد من عوده من جديد وعليه لابد من اعاده ريست ولكي تعمل شاشات سفن سكمنت
فكانت الفكره عند تعديل الوقت والتاريخ بيظهر جزء جزء فكانت الفكره ان رقم 16 ابدله بمتغير في وضع طبيعي اجعله =16 وبتالي تشتغل 16 خانه من سفن سكمنت
وعند اعاده ضبط الوقت والتاريخ في البدايه راح اضبط السنه لذا كم خانه تحتاج الجواب اربعه خانات لاظهار السنه والبيقيه اظهرها تباعا لغرض يفهم مستخدم بأنه يريد التعديل على هذا او ذاك
لذا عند ضبط السنه اجعل متغير =4 اي كود اعلاه يصبح
وبتالي تظهر فقط السنه
وعند الضغط على OK راح اجعل se تعد الى 6 لان اشهر تحتاج خانتين واضافه الى السنه تصبح 6 خانات
مهم لما جربت هذه طريقه اصبح البك يخرف كثير وظهرت مشاكل كثيره ففكرت ماهي طريقه مناسبه لذا كان الحل الغي انتربت عند ظبط الوقت والتاريخ واصنع داله جديده تؤدي مهمه تشغيل سفن سكمنت
كود:
if(sw1_setting==0)
{
INTCON =0; // disable interupts
set=7;
setting2=255;
delay_ms(10);
while(sw1_setting==0);
delay_ms(10);
set_DS1307(0,255);// store data and clock in setting_DS1307
setting();
}
لاحظ الكود عند الضغط على مفتاح الضبط اوقفت الانتربت لاسباب شرحتها اعلاه
في داله setting واجهتني مشكله أخرى وهي زمن العرض
انا جعلت عند الضغط على مفتاح الزياده او نقصان بتأخير زمني مقداره 250ms
ولكن هذا زمن كبير راح يخلي سفن سكمنت بترتعش ولاتستقر
زين كيف اخليها مستقره؟؟؟
الجواب لازم كرر عرض البيانات على سفن سكمنت بأستمرار خلال زمن 250ms طيب ماأفتهمت يعني أشلون بتكرر ذلك دون ان تسبب اي ارتعاش بسفن سكمنت
لاحظ الكود
كود:
void display_setting(char data2)
{
for (cont=0;cont<data2;cont++)
{
if(cont==0 ){
res_pin=0;
res_pin=1;
sh_cp_pin=0;
sh_cp_pin=1;
ds_pin=1;
}
sh_cp_pin=0;
sh_cp_pin=1;
st_cp_pin=0;
st_cp_pin=1;
portb=~segment[num[cont]];
delay_ms(1);
ds_pin=0;
}
}
لاحظ بكود انه كل زياده او نقصان الرقم راح يوجد تأخير زمني مقداره ربع ثانيه ولكن كما تلاحظ بالكود اعلاه انه 250ms تمت تجزئتها
بس واحد يسئل وهو لما تعرض فقط السنه كم هو زمن مستغرق لتشغيل كل شاشات الجواب هو 4ms لان سنه تحتاج اربعه خانات ولكي اخذ فقط 250 ms اذن كم مره اكرر 4
لاحظ
كود:
if(sw2_inc==0){
if(set !=0)set_DS1307(set,0);
for(gg=0;gg<x;gg++)
{
display_setting(kk);
}
}
واذا اريد ضبط الاشهر راح اشغل 6 سفن سكمنت يعني كم زمن 6ms واذا ردت ضبط الايام راح تشتغل 8 سفن سكمنت يعني زمن كلي 8ms
راح تلاحظ مشكله وهي كلما كثرت سفن سكمنت يصبح زياده او نقصان رقم بطيئ جدا لاني حلقه تكرار هي مهمتها تكرر تشغيل سفن سكمنت لزمن معين غايه منه
1- عدم تنفيذ زياده اونقصان رقم بسرعه كبيره
2- التخلص من اي ارتعاش بشاشه سفن سكمنت
لاني كررت اوامر تشغيل سفن سكمنت لزمن مثلا 250ms
لذا فكرت بهذا الحل
شاهد هذا كود مره اخرى
كود:
if(sw1_setting==0)
{
set--;
kk=kk+2;
if(kk==10)kk=9;
if(kk==6)x= 42; // delay for display 6 msec then x=250/6=42
else if(kk==8)x=32; // delay for display 8 msec then x=250/8=32
else if(kk==9)x=28; // delay for display 9 msec then x=250/9=28
else if(kk==11)x=23; // delay for display 11 msec then x=250/11=23
else if(kk==13)x=20; // delay for display 13 msec then x=250/13=20
else if(kk==15)x=17; // delay for display 15 msec then x=250/15=17
else if(kk==17)x=15; // delay for display 17 msec then x=250/17=15
delay_ms(250);
if(set==0)
{
setting2=0;
set_DS1307(8,24);
intcon=0xA0;
return;
}
}
ماذا تلاحظ كلما زدت عدد سفن سكمنت قللت قيمه x طبعا يوجد تعليق اما كل قيمه x لماذا وضعتها بقيمه فلانيه غرض منها الحفاظ على وقت تأخيري ثابت وهو 250ms