السلام عليكم ورحمة الله
احمد الله علي توفيقه لقد انهيت كتابة البرنامج في هذة اليله استغرق وقت 7 ساعات في تصميم المحكاة وكتابة البرنامج ..
اليك صورة للمحكاة

كود البرنامج
كود:
// ENG / ABDALLA HEGAZY **
// DATA / 2019/12/30 **
// controller **
// Lcd pinout settings
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D7 at RB5_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D4 at RB2_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB2_bit;
#define MOTOR_vibrator_M11 PORTC.F7
#define MOTOR_Mixing_M62 PORTC.F6
#define Helical_motor_M61 PORTC.F5
#define MOTOR_Y33 PORTC.F4
#define MOTOR_Water_valve_Y32 PORTA.F5
#define SENSOR_LEVEL_1 PORTD.F2
#define SENSOR_LEVEL_2 PORTD.F3
#define SENSOR_LEVEL_3 PORTD.F4
#define SENSOR_LEVEL_4 PORTD.F5
#define SENSOR_LEVEL_5 PORTD.F6
#define SENSOR_LEVEL_6 PORTD.F7
#define BEZR PORTD.F1=1; delay_ms(120); PORTD.F1=0; delay_ms(350);
#define BEZRR PORTD.F1=1; delay_ms(150); PORTD.F1=0; delay_ms(50); PORTD.F1=1; delay_ms(150); PORTD.F1=0; delay_ms(1500);
unsigned X1=0,X2=0,X3=0,M=0,A=0;
unsigned DATA_SHOW=0,DATA_SHOW2=0;
unsigned W1=0,W2=0,W3=0,W4=0;
//===================================//
void AUTO() {
PORTE.F0=1;
W1=0;
while(X1==0)
{
if(W1==0 ){
MOTOR_vibrator_M11=1; MOTOR_Water_valve_Y32 =1; W1=1; }
if( SENSOR_LEVEL_1 ==1 ){ MOTOR_Mixing_M62 =1; }
if( SENSOR_LEVEL_2 ==1 ){ Helical_motor_M61 =1; }
if( SENSOR_LEVEL_3 ==1 ){ MOTOR_vibrator_M11=0; }
if( SENSOR_LEVEL_4 ==1 )
{
MOTOR_Water_valve_Y32 =0; for(X3=0; X3<M; X3++){ delay_ms(60000); }
MOTOR_Y33 =1;
X1=1;
}
}
X1=0;
while( X1==0 )
{
if( SENSOR_LEVEL_1 ==0){
for(X3=0; X3<M; X3++){ delay_ms(60000); }
MOTOR_Y33 =0;
Helical_motor_M61 =0;
MOTOR_Mixing_M62 =0;
MOTOR_vibrator_M11=0;
MOTOR_Water_valve_Y32 =1;
X1 =1;
}
}
X1=0;
}
//====================================//
//************************************//
void MANUAL() {
PORTB.F7=1;
while(1)
{
MOTOR_vibrator_M11 =1;
MOTOR_Water_valve_Y32 =1;
if( SENSOR_LEVEL_1 ==1 ){ MOTOR_Mixing_M62 =1; }
if( SENSOR_LEVEL_2 ==1 ){ Helical_motor_M61 =1; }
if( SENSOR_LEVEL_3 ==1 ){ MOTOR_vibrator_M11 =0; }
if( SENSOR_LEVEL_4 ==1 )
{
MOTOR_Water_valve_Y32 =0; for(X3=0; X3<M; X3++){ delay_ms(60000); }
MOTOR_Y33 =1; // ÝÊÍ ÕãÇã ÇáÊÝÑíÛ //
while( X1==1 )
{
if( SENSOR_LEVEL_1 ==0){
for(X3=0; X3<M; X3++){ delay_ms(60000); }
MOTOR_Y33 =0; X1 =1; }
}
}
}
}
//===========================================//
void SET_PROGRAM() {
X2=0;
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Out(1, 1, " Time settings " );
Lcd_Out(1, 1, "Tim1: /Tim2: " );
while(X2==0)
{
LCD_Chr(1, 15, 48 + ((A / 10) % 10));
LCD_Chr(1, 16, 48 + ( A % 10));
//=======================================//
LCD_Chr(1, 6, 48 + ((M / 10) % 10));
LCD_Chr(1, 7, 48 + ( M % 10));
if(PORTC.F1==1){BEZR M ++; }
if(PORTC.F2==1){BEZR M --; }
if(PORTC.F3==1){BEZR X2=1; }
}
X2=0;
while(X2==0)
{
LCD_Chr(1, 15, 48 + ((A / 10) % 10));
LCD_Chr(1, 16, 48 + ( A % 10));
if(PORTC.F1==1){BEZR A ++; }
if(PORTC.F2==1){BEZR A ++; }
if(PORTC.F3==1){BEZR X2=1; }
}
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(2, 1, "The time is set" );
Lcd_Out(1, 1, "Ready to run" ); delay_ms(6000);
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Out(1, 1, " Water tank " );
Lcd_Out(2, 1, " controller " );
X2=0;
}
//===========================================//
//************************************//
void main() {
TRISB=0; PORTB=0;
TRISD=252; PORTD=0;
TRISC=15; PORTC=0;
TRISA=1; PORTA=0;
TRISE=6; PORTE=0;
ADC_Init(); // Initialize ADC module with default settings //
Lcd_Init(); // Initialize LCD //
adcon1=0x07;
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1, 3, "Hello!"); delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Out(1, 1, " Water tank " );
Lcd_Out(2, 1, " controller " );
BEZRR BEZRR BEZRR delay_ms(3000);
//====================//
while(1){
if (Button(&PORTC, 0, 10, 1)) {BEZR delay_ms(350); SET_PROGRAM();} // SET //
if (Button(&PORTE, 1, 10, 1)) {BEZR AUTO(); }
if (Button(&PORTE, 2, 10, 1)) {BEZR MANUAL(); }
}
}
انشاء الله اشرح لك خطوات البرنامج وكيف يعمل
وللعلم البرنامج مظبوت بكل الخطوات اللتي طلبتها ولو هناك أي اضافات انا متابع معك
يمكنك اختيار وقت الإنتظار في الحالتين اللتي ذكرتهما في طلبك
باقي فقط اضيف كود لحفظ اعدادات للمستخدم ليتذكر البرنامج الأوقات المدخلة عند فصل التيار عن الدائرة واعادة تشغيلة يتم استرجاع البيانات بشكل اوتوماتيك
رابط تحميل المشروع كامل
https://drive.google.com/open?id=1R_...Ojww4WPk-XA-7U
|
بارك الله بك والله شيء رائع
لكن لا اريد شاشة عرض يكفي ليدات فقط كما رايت فكما اخبرتك لقد عرضت عليهم ذلك ولم يوافقوني .
اعجبني جدا التنبيه الصوتي ممتاز تفكير متقدم وعقل متاقلم .
اخي الكريم القاشط مرحلة مستقلة عن مرحلة تحضير الماء المعالج .
و ايضا لاحظت مفتاحان للتشغيل التلقائي .
ان المفتاح الذي ساستخدمه هو مفتاح دوار بثلاث وضعيات spdt يدوي واطفاء وتلقائي .
بالنسبة لجهاز قياس القلوية ايضا مستقل ولكن يقوم على تشغيل برنامج التحضير يدويا عند كل ساعة ان كانت حموضة الماء مرتفعة .
اي يتدخل بتشغيل البرنامج دورة واحدة فقط تلقائيا وهنا يقوم العمل عل وضعه تلقائيا ان كانت الحموضة اقل من ٦ .
بالنسبة لمفاتيح الضبط و المعايرة والتاكيد لماذا تم وضعها هنا .
ان كان من اجل الوقت ارجوك اجعل التحكم بالوقت اما عن طريق مقاومة متغيرة او طرف اوصل عليه ريليه زمنية .
الاسماء صحيحة وكل شيء تمام ان شاء الله .
بالنسبة للتنبيه الصوتي متى يعمل حقيقة يوجد بالغرفة جرس كبير يفيق الميت من موته من شدة صوته لقد ارعبني كثيرا عندما شغلوه .
قالوا من اجل ان يصحي النيام وقلت لهم اعتقد انكم تتقاتلوب كثيرا مع زوجاتكم مساء قالوا لما اجبت لانه لايوجد لدى نساءكم مثل هذا الجرس لاداء الواجب .😂😂😂😂😁😁😁.
شكرا لك