التعديل على مفتاح start
كود:
if (sw_start==0 && show_speed_price==0)
{
old_state=1; // inc switch is pressed
}
عند الضغط على مفتاح start فانه سوف يتم فانه old_state=1 وهذا متغير مهمته انه مادام انت ضاغط على سويج لايقوم بأي شيء حتى ترفع يدك ولكي يتحقق هذه عمليه لازم نكتب الشرط كتالي
كود:
{
if(sw_start==1 && old_state==1)
old_state=0;
sw_start_flag=1;
}
وهنا تلاحظ انه سويج sw_start=1 معناه سويج تم تحريره وبما ان متغير old_state=1 اظن سوف نجعل sw_start_flag=1 وهذا متغير سوف يقوم بأحتساب الزمن خاصه بضغط مفتاح ولتمن 250ms طبعا لايتم كتابه ديلي بــ 250ms لان هذا سوف يخرب عمل سفن سكمنت
وبعد انقضاء 250ms يتم تصفير اعداد وقت وflag وهنا يزيد متغير جديد اسمه start2
كود:
if(sw_start_cont>130 && old_state==0)
{
sw_start_flag=0;
sw_start_cont=0;
start2++;
}
طبعا بعد ذلك سوف يتم تنفيذ هذا الكود
كود:
if( start==0 && start2==1 )
{
start=1;
kk=0;
transfer_display=4; // show message "start"
old_value=0;
colomn=0;
end_digit=5;// run only 5 7seg
message_cont=0;
flag_measuring_speed=1;
}
وهنا سوف يعرض رساله start من خلال متغير transfer_display=4
اما colomn=0 و old_value=0 معناه أيبدأ من اول سفن سكمنت
كود:
else if(transfer_display==4)
{
for(x=0;x<8;x++) //
{
if(colomn>=2 && start==3)stop_price=3; // stop_price using to display message start and stop for Price
// start message message_start={s,t,a,r,t} but stop message message_start{s,t,x , x,x,o,p} x mean cancel
else stop_price=0;
if(Check_bit((message_start[colomn+stop_price]) ,7-x))DS1=1;
else DS1=0;
SH1=0;SH1=1;
}
}
كما ايضا يتم تفعيل داله قياس السرعه لغرض أحتساب الكلفه
من خلال جعل متغير flag_measuring_speed=1
=================================================
بعدها سوف يتم تنفيذ هذا الكود لان start=1 معناه أبدء العمليه وبالطبع سوف تبدأ من القيم الافتراضيه او يعني القيم اوليه
كود:
if(start==1 && message_cont>1000)//2sec
{ // finish for display message start
start=2;
transfer_display=5;// show Price value
old_value=0;
colomn=0; // run 7seg start from 1
end_digit=6;// run 6 7seg
if(Price_change==0)value_start=price_initial_1;// Price start from 125
else if(Price_change==1)value_start=price_initial_2;// Price start from 200
distance=0;// initial value
Price_cont=0;// reset counter time
//calculate_price();// now only display 0.125 after that start calcalute
check_price=1;// this char equal 1 if complete measuring distance , where every 3 sec complete mesauring
}
وبعد أكتمال حساب السرعه سوف ينفذ مايكرو هذا الكود
كود:
if(start==2 && check_price==1)calculate_price();
طبعا لان start=2 حتى تمنع من دخول الى القيم اوليه لكي لايؤثر على احتساب السعر
طبعا check_price مهمته متى ما يكتمل مايكرو من أحتساب السرعه وهس تحدث لكل 3 ثواني تصبح قيمته =1 وبتالي يتم تنفيذ كود أحتساب السعر وفي داله احتساب السعر يتم تصفير هذا المتغير لغرض أحتساب سرعه جديده وهكذا
وعند الضغط على مفتاح start مره اخرى يتم تنفيذ الكود وهو مهمته اظهار مره كلمه stop ومره قيمه اجره حاليه
كود:
else if(start2==2 && (start==2||start==3) && message_cont>500 ) // now the 7seg will display Price value or message stop every 1 second
{
start=3;
flag_measuring_speed=0;//disenable function speed_measuring();
if(oscilation==0 )
{
transfer_display=4; // show message "stop"
end_digit=4;
}
else {
transfer_display=5; // show Price value
end_digit=6;
}
oscilation=~oscilation;
old_value=0;
colomn=0; // start from 1 7seg
message_cont=0;
}
وعند الضغط على start مره اخرى
هذا الكود يرجعنا الى داله الرئيسيه لاظهار الوقت والتاريخ بسبب جعل متغير kk=255 وايضا يتم خزن السعر او اجره الكليه في ايبروم
كود:
else if(start2>=3 )
{ // return to main code " display date , clock
kk=255;
if(start==3)// store Price value in eeprom
{
store_total_price += value_start;
EEPROM_Write(0,0);// store 0 in address 0 this flag mean the data storing in eeprom
EEPROM_Write(1,store_total_price/10000);//123456 /10000=12
EEPROM_Write(2,store_total_price/100%100);//123456 /100 =1234%100=34
EEPROM_Write(3,store_total_price%100);
led_clear=1;
}
start=0;
start2=0;
transfer_display=0;// now start display date and clock;
}