|
السلام عليكم
سوف أتاكد وأعطيك خبر
ان شالله سوف اشرحلك الطريقه
تحياتي
|
كيف أستدعي كلمه start و stop
عند ضغط على مفتاح start
كود:
if (sw_start==0)
{
old_state=1; // inc switch is pressed
}
if(sw_start==1 && old_state==1)
{
old_state=0;
sw_start_flag=1;
}
وبعد أنقضاء الوقت 250 ملي يزداد قيمه start2 لتصبح =1 ولايزال start=0
كود:
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;
}
transfer_display=4 لذهب الى كود داله display_7seg()
كود:
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;
}
}
اما stop
عندما يتم الضغط مره اخرى على start هنا سوف تصبح قيمه start2=2 , وطبعا قيمه start=1
كود:
if(sw_start_cont>130 && old_state==0)
{
sw_start_flag=0;
sw_start_cont=0;
start2++;
}
اذن
كود:
else if(start2==2 && message_cont>500 ) // now the 7seg will display Price value or message stop every 1 second
{
start=3;
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;
sw_speed_flag=0;// disenable function speed_measuring();
}
هنا تلاحظ يظهر رسالتين لكل ثانيه وبتالي مره تظهر stop ومره قيمه العداد المسجله
كود:
if(oscilation==0 )
{
transfer_display=4; // show message "stop"
end_digit=4;
}
في داله display_7seg() عندما transfer_display==4 وكذلك start=3
كود:
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;
}
}
تلاحظ الشرط
كود:
if(colomn>=2 && start==3)stop_price=3;
في رساله message_start تم خزن احرف start و stop تلاحظ كلمتين مشتركه في st ولهذا السبب قلت له هل colomn هل اكبر او تساوي 2 فأذا كان نعم شوفلي قيمه start هل = 3 اذا كان نعم ايضا أجعلي stop_price=3 لماذا لكي من قراءه من مصفوفه message_start يقرأ من op ولماذا قلت stop_price=3 لان عدد احرف متبقيه من start هي فقط art وطبعا لازم أتجاوزها لهذا قلت stop_price=3
انظر
كود:
message_start[colomn+stop_price])
اما كيف تظهر قيمه العداد
احنا قلنا كل 1 ثانيه يحصل تبديل في العرض بين كلمه stop وبين قيمه العداد
كود:
else if(start2==2 && message_cont>500 ) // now the 7seg will display Price value or message stop every 1 second
{
start=3;
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;
sw_speed_flag=0;// disenable function speed_measuring();
}
طبعا هو كيف يحصل التبيدل هو بسبب هذا متغير oscilation=~oscilation فكل ثانيه مره يصبح 0 ومره يصبح 255 بسبب وجود علامه نفي ~
اذن في كود display_7seg() وعندما transfer_display=5
كود:
else if(transfer_display==5)
{
for(x=0;x<8;x++) //
{
if( colomn==2 )point=127;
else point=255;
if(Check_bit((segment[price[colomn]]& point) ,7-x))DS1=1;
else DS1=0;
SH1=0;SH1=1;
}
}
تحياتي