دائرة للتحكم بتعبئة خزان ماء اوتوماتيكيا وعرض حالة الخزان على ليدات وشاشة LCD ومنع تشغيل المضخة في حال تعطل احد الحساسات
https://up.top4top.net/downloadf-1162yswfz1-rar.html
كود:
#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;
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.7=1;
PORTA.6=0;
PORTA.5=0;
PORTA.4=0;
PORTA.3=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; //ليد الافراغ مطفئ
PORTA.7=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;
PORTA.7=0;
lcd_gotoxy(2,0);
lcd_puts("Second Level");
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;
PORTA.7=0;
lcd_gotoxy(2,0);
lcd_puts("Second Level");
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;
PORTA.7=0;
lcd_gotoxy(3,0);
lcd_puts("Level One");
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;
PORTA.7=0;
lcd_gotoxy(3,0);
lcd_puts("Level One");
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;
PORTA.7=0;
lcd_gotoxy(5,0);
lcd_puts("Empty");
lcd_gotoxy(0,1);
lcd_puts("................");
}
//////////////////////////////////////////////
}
}