كود:
#include <mega32.h> // تعريف المايكرو المستخدم من اجل التعامل مع مكتبة هذا المايكرو
bit x=0,y=0,z=0,on=0; // تعريف اربع متحولات من نوع بت
#include <alcd.h> // تعربف مكتبة ال سي دي من اجل استخدام الدوال الخاصة بها
/////////////////////////////////////////////////////////////////////////////////////
void main(void) // دالة الماين يتم الدخول اليها عند كل اول تشغيل لمرة واحدة
{ //لتعريف البورتات من دخل وخرج وشاشة ال سي دي الخ
PORTA=0x07;
DDRA=0xF8;
PORTC=0x00;
DDRC=0x00;
ACSR=0x80;
SFIOR=0x00;
lcd_init(16);
WDTCR=0x0B;
//////////////////////////////////////////////////////////////////////////////////////
while (1) // هنا البرنامج الرئيسي
{
#asm("wdr") //عمل ريستارت لمؤقت الحراسة فاذا تاخر البرنامج بسبب اي خطأ سيطفح عداد المؤقت
//وسيتم عمل رست للبرنامج دون تدخل منك
/////////////////////////////////////
if((PINA.0==0&&PINA.1==1&&PINA.2==1)||(PINA.0==1&&PINA.1==0&&PINA.2==1)||(PINA.0==0&&PINA.1==0&&PINA.2==1)||(PINA.0==0&&PINA.1==1&&PINA.2==0))
{
PORTA.6=0;
lcd_gotoxy(5,0); //هذا الشرط اذا تم تعطل احد الحساسات الموجودة في الخزان
lcd_puts("ERROR"); //ستتوقف المضخة ويعطي كلمة خطأ على الشاشة
}
//////////////////////////////////////////////
if(x!=PINA.0||y!=PINA.1||z!=PINA.2)
{
x=PINA.0; //هذا الشرط لعمل مسح للشاشة فقط عند تغير حالة احد الحساسات
y=PINA.1;
z=PINA.2;
lcd_clear();
}
//////////////////////////////////////////////
if(PINA.0==0&&PINA.1==0&&PINA.2==0) // هذا الشرط عندما تكون الثلاث حساسات مغلقة دليل على ان الخزان ممتلئ
//سيتم الدخول وتنفيذ التعليمات الموجودة ضمن الاقواس
{
on=0; //هذا البت تكون حالته البدائية صفر وعند فراغ الخزان سيتحول الى واحد ليمنع توقف المضخة اثناء تعبئة الخزان سنستعمله في الشروط قي الاسفل
PORTA.6=0; //مخرج المضخة متوقف عندما يكون الخزان ممتلئ
PORTA.3=1; //ليد الدلالة على ان الخزان ممتلئ
PORTA.4=0; //ليد الوسط مطفئ
PORTA.5=0; //ليد الافراغ مطفئ
lcd_gotoxy(4,0); //مكان الكتابة على الشاشة في السطر صفر يعني العلوي والعامود الرابع يعني سنترك اربع محارف بدون الكتابة عليها ونكتب من بعدها لتكون الكلمة في الوسط
lcd_puts("Full of"); //كلمة تعني ان الخزان ممتلئ يمكن تغييرها بالمعنى اللذي تريدين
lcd_gotoxy(0,1); // مكان الكتابة في السطر الثاني
lcd_puts(">>>>>>>>>>>>>>>>"); //كتابة هذا الرسم ليدل على امتلائ الخزان
}
//////////////////////////////////////////////
if(PINA.0==1&&PINA.1==0&&PINA.2==0&&on==0) //هذا الشرط سيتم الدخول اليه عند الافراغ عندما يتم تغير حالة الحساسات من الاعلى نحو الاسفل
//ويكون البت اللذي ذكرناه قيمته صفر دليل على اننا في حالة افراغ للخزان
{
PORTA.6=0;
PORTA.3=0; //هي التعليمات صارت واضحة مافي داعي لكتابتها
PORTA.4=1;
PORTA.5=0;
lcd_gotoxy(5,0);
lcd_puts("Center");
lcd_gotoxy(0,1);
lcd_puts("<<<<<<<<<<<<....");
}
else if(PINA.0==1&&PINA.1==0&&PINA.2==0&&on==1) //هذا الشرط تتمة للشرط اللذي قبله ولكن عندما يكون الخزان قد افرغ سيتحول البت اون الى واحد
//ليمنع ايقاف المضخة اثناء التعبئة والدلالة على اننا في حالة ملئ للخزان
{
PORTA.6=1;
PORTA.3=0;
PORTA.4=1;
PORTA.5=0;
lcd_gotoxy(5,0);
lcd_puts("Center");
lcd_gotoxy(0,1);
lcd_puts(">>>>>>>>>.......");
}
//////////////////////////////////////////////
if(PINA.0==1&&PINA.1==1&&PINA.2==0&&on==0) // نفس الشرط السابق ولكن تحت الوسط
{
PORTA.6=0;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
lcd_gotoxy(1,0);
lcd_puts("Below the waist");
lcd_gotoxy(0,1);
lcd_puts("<<<<<<<.........");
}
else if(PINA.0==1&&PINA.1==1&&PINA.2==0&&on==1)
{
PORTA.6=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
lcd_gotoxy(1,0);
lcd_puts("Open the pump");
lcd_gotoxy(0,1);
lcd_puts(">>..............");
}
//////////////////////////////////////////////
if(PINA.0==1&&PINA.1==1&&PINA.2==1) //عند فراغ الخزان ستصبح قيمة جميع الحساسات واحد
{
on=1; //سيصبح قيمة هذا البت المهم واحد وتعمل المضخة والليد الخاص بالفراغ
PORTA.6=1;
PORTA.3=0;
PORTA.4=0;
PORTA.5=1;
lcd_gotoxy(5,0);
lcd_puts("Empty");
lcd_gotoxy(0,1);
lcd_puts("................");
}
//////////////////////////////////////////////
}
}