السلام عليكم
لاظهار كلمه auto , manual عن طريق سليكتر المربوط الى RD1
كود:
sbit sw_select at RD1_bit;
sbit sw_select_Direction at TRISD1_bit;
فرضنا متغير اسمه auto_manu_select لتعبير عن اتو و منول وجعلنا auto_manu_select=0 ثم جعلنا البيك يختبر حاله سليكتر
كود:
// display auto maunal operation
if(auto_manu_select==0 && sw_select==1)
{
auto_manu_select=1;
display_message(duty,1);// auto operation
}
else if(auto_manu_select==0 && sw_select==0)
{
auto_manu_select=2;
i=0;// claer counter
display_message(duty,2);// maun operation
}
حيث تلاحظ بأنه بالبدايه 0=auto_manu_select لذا اذا كان سليكتر على وضع 5 فولت لذلك سيتحقق الشرط
كود:
if(auto_manu_select==0 && sw_select==1)
ونجعل قيمه auto_manu_select=1 لكي يتم تنفيذ الشرط مره واحده فقط دون عمليه تكرار
بعدها نستدعي داله
كود:
display_message(duty,1);// auto operation
وكذلك الحال بالنسبه لمنول
هنا نحتاج الى ترسيت متغير auto_manu_select ولكن يمتى نرست ذلك
الجواب لما يتغير حاله سليكتر من 5 فولت الى 0 فولت او بالعكس
لذا وضعت هذا الكود
كود:
if(auto_manu_select==1 && sw_select==0)auto_manu_select=0;
if(auto_manu_select==2 && sw_select==1)auto_manu_select=0;
لو تلاحظ الكود ستجد auto_manu_select=1 في حاله اتو وقارنته مع سليكتر حيث =0 وبتالي راح يعرف البيك بأنه نظام كان على وضع اتو من خلال auto_manu_select=1 وتم تغيره الى وضع منول عن طريق sw_select=0 لذا هنا علينا ترسيت متغير auto_manu_select اي جعله =0 لكي يتم عرض الرساله
وهكذا الحال بالنسبه لتغير نظام من منول الى اتو
===============================
داله عرض الرسائل
كود:
void display_message( char kk, char select_message )
هذه داله تاخذ متغير الاول يعبر عن duty والاخر يبين اي رساله تريد أظهار
فأذا كانت select_message!=0 هنا ممكن =1 للعرض رساله اتو و2 لعرض رساله منول راجع كود سليكتر للوضعين منول واتو
كود:
if(select_message!=0)
{
if(select_message==1)
{
for(x=0;x<16;x++)txt[x]=message_auto[x];
}
else if(select_message==2)
{
for(x=0;x<16;x++)txt[x]=message_maun[x];
}
txt[16]=0;
lcd_out(2,1,txt);
delay_ms(3000);
temp_flag2=0;
temp_flag1=0;
select_message=0;
}
عندها سيبدأ بنقل رساله مطلوبه من روم الى رام اي خزنها في txt بعدها نحتاج الى تصفير temp_flag2 و temp_flag1 وهذين مسؤلين عن وضع اتو اي أختيار duty وهما يسمحان للبيك بتنفيذ الشرط مره واحده دون تكرار
تلاحظ انه جعلنا select_message=0 بعد فتره 3 ثواني لماذا لكي يتم تنفيذ الكود التالي يعني سواء كان select_message يساوي 0 او لا نحتاج الى تنفيذ هذا الكود بشرط duty !=0
كود:
else
{
value_duty=kk;
duty1 = (value_duty *100)/255;
PWM1_Set_Duty(kk);
if(select_message==0)
{
lcd_out(2,12," ");
for(x=0;x<11;x++)txt[x]=message_duty[x];
txt[11]=0;
FloatToStr(duty1,disp);
disp[4]=0;// reset pointer
strcat(txt,disp );
txt[15]=0;
lcd_out(2,1,txt);
lcd_chr_cp('%');
}
}
وهذا نفس الكود الذي انت تعرفه في الاكواد السابقه يعني ننقل رساله كلمه duty وبعدها نحول قيمه KK الى text ونلحقها ب txt وبعدها ننظهرها على شاشه