قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية مسلم11
مسلم11
:: عضو ذهبي ::
تاريخ التسجيل: Jun 2009
الدولة: بلاد الشام
المشاركات: 3,679
نشاط [ مسلم11 ]
قوة السمعة:
قديم 01-01-2020, 02:30 PM المشاركة 81   
افتراضي



السلام عليكم ورحمة الله

• شرح البرنامج حسب ماتيسر .
// ENG / ABDALLA HEGAZY ** // DATA / 2019/12/30 ** // controller **
من هنا
#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
الى هنا
وضعت المعطيات الرئيسية وحددت منفذ لكل ما تريد التحكم به .
محرك الارتجاج M11 على المنفذ ٨ من المجموعة C.
محرك الخلاط M62 على المنفذ السابع من المجموعة C .
محرك رش البودرة او الحلزون M61 على المنفذ السادس من المجموعة C .
صمام التعبئة Y32 على المنفذ الخامس .
صمام التفريغY33 ( لم اعلم على اي منفذ ارجو منك التوضيح ) .
على هذا الاساس استخدمت خمس منافذ من المجموعة C وبقي ثلاث .
لاحظ اخي عدم كتابة دالة البرنامج الرئيسية VOID MAIN ام انني مخطئ .
وايضا لم الاحظ PORT و TRIS .
ارجو بعض التوضيح اليسير .
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
هنا قمت على تحديد المسميات لكل حساس حسب ترتيبهم .
المستوى الاول على المنفذ السادس من المجموعة A
PORTA.F5 #define SENSOR_LEVEL_1
المستوى الثاني على المنفذ الثالث من المجموعة D
PORTD.F2 #define SENSOR_LEVEL_2
المستوى الثالث على المنفذ الرابع من المجموعة D
PORTD.F3 #define SENSOR_LEVEL_3
المستوى الرابع على المنفذ الخامس من المجموعة D
PORTD.F4 #define SENSOR_LEVEL_4
المستوى الخامس على المنفذ السادس من المجموعة D
PORTD.F5 #define SENSOR_LEVEL_5
المستوى السادس على المنفذ السابع من المجموعة D
PORTD.F6 #define SENSOR_LEVEL_6
( انهاء الجميع او ايقاف الجميع ) ارجو توضيح هذا السطر .
المنفذ الثامن من المجموعة D
PORTD.F7 #define END_ALL
على هذا النحو استخدمت منفذ واحد من المجموعة A 《《PORT 5 .
وستة منافذ من المجموعة D .
بقي لدينا
ثلاث منافذ من المجموعة C .
منفذان من المجموعة D .
و سبعة من المجموعة A .
وكامل المجموعة B .
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
من هنا
Helical_motor_M61 =0; MOTOR_Y33 =0;
MOTOR_Mixing_M62 =0; MOTOR_vibrator_M11=0; MOTOR_Water_valve_Y32 =0; #define
الى هنا
كنت لاقول انك تريد تحديد حالة المحركات او المنافذ ولكن لم ارى تعليمة PORT وايضا لم الاحظ كتابة سجل كل منفذ TRIS من المنافذ السابقة .
هنا استخدمت المنفذ الثاني من المجموعةD ووضعت عليه منبه يشتغل ٣٥٠ ميلي ثانية و يتوقف ٢٠٠ ميلي .
BEZR PORTD.F1=1; delay_ms(350);
PORTD.F1=0; delay_ms(200);
هذه الجملة جديدة لم اعلم معناها .
اعتقد انها تخص التنبيه الثاني الذي اخبرتني عنه بالشرح
انه على المنفذ الثاني من المجموعة D
#define BEZRR PORTD.F1=1;
تاخير ٢٧٠ ميلي ثانية بحالة عمل
delay_ms(270); PORTD.F1=0;
ثم ايقافه مدة ٥٠ ميلي .
delay_ms(50); PORTD.F1=1;
ايضا اعادة نفس السطرين لكن بمدة ايقاف تصل الى ١.٥ ثانية .( لماذا تم التصميم بهذا الشكل )
delay_ms(270); PORTD.F1=0; delay_ms(1500);
هنا لم افهم سبب وضع المربع .وكلمة #define
حياك الله وبارك بك
اريد التقييم حول هذا الشرح 😁😁😊

اعلانات

الصورة الرمزية عريبى محمود
عريبى محمود
:: ( رحمه الله عليه ) ::
تاريخ التسجيل: Feb 2009
الدولة: لا تسأل الطغاه لماذا طغو بل اسأل العبيد لماذا انحنو
المشاركات: 3,126
نشاط [ عريبى محمود ]
قوة السمعة:
قديم 02-01-2020, 03:03 AM المشاركة 82   
x4


استاذ عبدالله ما معنى التعليمه
for(x3=0;x3<m;x++){delay_ms(60000);}
السلام عليكم ورحمة الله وبركاته
اخى الكريم

لكى يتم فهم سطر الكود لابد من وضع الكود بالكامل

من المعروف ان امر For يستـــخدم لتكرار امر معين بعدد مرات .... وهنا لم يتم كتابة عدد المرات بل تم كتابة عدد التكرار بحرف m

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

فيصل الريامي
:: مهندس ::
تاريخ التسجيل: Dec 2018
المشاركات: 36
نشاط [ فيصل الريامي ]
قوة السمعة:
قديم 02-01-2020, 03:20 PM المشاركة 83   
افتراضي


شكرا لك استاذ عبدالله واضح جدا
[quote=عبدالله حجازى;1190550]
استاذ عبدالله ما معنى التعليمه[QUOTE
كود:
for(x3=0;x3<m;x++)
{delay_ms(60000);}

السلام عليكم ورحمه الله

أخي الكريم هذة التعليمة نستخدمها لتكرار أمر معين عدد من المرات وتكون هكذا

كود:
for(x3=0;x3<10;x++){delay_ms(1000);}
لاحظ في هذا الأمر x3=0 وهنا يذيد x3 كل دورة الي ان يصل الي اكبر من 10 لأن حددنا له أن يستمر داخل هذة الحلقة لحين وصول x3 الي 10 ورقم 10 هذا يمكننا تغيرة كما نشاء ..

بالنسبة هذة التعليمه
كود:
for(x3=0;x3<m;x++){delay_ms(60000);}
. هنا لو تلاحظ تم استبدال الرقم 10 بمتغير اسمة m
تم تحديدة بالأزرق وهنا سوف يكون تكرار هذة الحلقة بقيمة المتغير m. وهنا نستخدم هذا الأمر في البرنامج لكي نستفيد منه ونظبط وقتة كما نشاء (60000) وهذا الرقم = انتظار واحد دقيقة وهنا لو المستخدم جعل قيمة m مثلا = 3 فهنا ستكون هذة التعليمة أمر انتظار 3 دقائق والفائدة منها اننا يمكننا في اختيار زمن انتظار وتعديلة في أي وقت بدون ان نطر الي برمجة الميكرو عند كل مرة نغير فيها الوقت

تحياتي


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 03-01-2020, 05:26 AM المشاركة 84   
افتراضي


السلام عليكم ورحمه الله

نبدأ الأن بالتعرف علي أمر أو تعليمه جديده ...
كود:
 #define 
ما فائدة هذة التعليمه ..

1_ تسهل علي المبرمج فهم الكود والتعديل عليه
2_ تقلل في استخدام مساحة كتابة البرنامج

خلينا نشرحها بالتفصيل

مثال عندنا 4 محركات تم ربطهم مع المنفذ C بالترتين من بن 0 الي البن 3. للمنفذ C
اسماء المحركات

المحرك الأول .. motor_1
المحرك الثاني.. motor_2
المحرك الثالث .. motor_3
المحركالرابع. . .. motor_4
طبعا للتحكم في حالة هذة المحركات نكتب الكود هكذا

كود:



            void main() {
            
           TRISC=0; PORTC=0;

             while(1){

          PORTC.F0=1; //  motor_1
          PORTC.F1=1; //  motor_2
          PORTC.F2=1; //  motor_3
          PORTC.F3=1; //  motor_4
          
        delay_ms(1000);
        
          PORTC.F0=0; //  motor_1
          PORTC.F1=0; //  motor_2
          PORTC.F2=0; //  motor_3
          PORTC.F3=0; //  motor_4
          
        delay_ms(1000);

    }
   }
هكذا جعلنا جميع المحركات تشتغل وبعد تنتظر 1 سانيه وتتوقف وهكذا تعيد الدورة

طيب خلينا نكتب الكود بشكل مختلف

كود:
    #define motor_1_on  PORTC.F0=1;
    #define motor_2_on  PORTC.F1=1;
    #define motor_3_on  PORTC.F2=1;
    #define motor_4_on  PORTC.F3=1;
    
    #define motor_1_off  PORTC.F0=0;
    #define motor_2_off  PORTC.F1=0;
    #define motor_3_off  PORTC.F2=0;
    #define motor_4_off  PORTC.F3=0;

            void main() {
            
           TRISC=0; PORTC=0;

             while(1){

           motor_1_on
           motor_2_on
           motor_3_on
           motor_4_on
        delay_ms(1000);
           motor_1_off
           motor_2_off
           motor_3_off
           motor_4_off

          
        delay_ms(1000);

    }
   }
هنا استخدمنا العناوين وتعريف العنوان هذة التعليمه
كود:
#define
وأسم العنوان هوا motor_1_on وما نريد فعله هوا
كود:
PORTC.F0=1;
وعندما نريد استدعاء العنوان يكتب هكذا
كود:
motor_1_on
وهنا عندما يقرأ البرنامج هذا العنوان يذهب الية وينفذ التعليمات الموجودة بعد اسم العنوان مباشر
كود:
PORTC.F0=1;
والأمر المكتوب لهذا العنوان هوا التحكم في البن رقم صفر للمنفذ سي وجعلها = واحد
الأن فهمنا عمل العناوين خلينا نكتب الكود بشكل أخر

كود:
    #define all_motor_on  PORTC.F0=1;  PORTC.F1=1;  PORTC.F2=1;  PORTC.F3=1;

    #define all_motor_off  PORTC.F0=0;  PORTC.F1=0;  PORTC.F2=0;  PORTC.F3=0;

            void main() {
            
           TRISC=0; PORTC=0;

             while(1){

            all_motor_on
       delay_ms(1000);
        
          all_motor_off
       delay_ms(1000);

    }
   }
وهنا هي نتعرف أن يمكننا أن نكتب الكثير من الأوامر للعنواد الواحد كهذا العنوان
كود:
all_motor_on 
لاحظ التعليمات الموجودة امام هذا العنوان هي
كود:
PORTC.F0=1;  PORTC.F1=1;  PORTC.F2=1;  PORTC.F3=1;
وهنا نستفيد ونلاحظ أن العنوان يسهل علينا فهم الكود عندما نريد مراجعة جزئ ما في الكود ..
هي نكتب البرنامج بطريقة اكثر احترافية

كود:
    #define motor_1  PORTC.F0
    #define motor_2  PORTC.F2
    #define motor_3  PORTC.F3
    #define motor_4  PORTC.F4
     
    #define motor_1  PORTC.F0
    #define motor_2  PORTC.F1
    #define motor_3  PORTC.F2
    #define motor_4  PORTC.F3
    
    #define ON  1;
    #define OFF 0;

    #define TEMER  delay_ms(1000);
            void main() {
            
           TRISC=0; PORTC=0;

             while(1){

          motor_1 = ON
          motor_2 = ON
          motor_3 = ON
          motor_4 = ON
          
         TEMER
         
         motor_1 = OFF
         motor_2 = OFF
         motor_3 = OFF
         motor_4 = OFF
         
        TEMER
    }
   }
نلاحظ هنا اننا استخدمنا العنوان المركب أو عنوانين لتنفيذ أمر ما

نحلل الكود كما عرفنا نضع اسم العنوان والبرنامج ينفذ ما امام العنوان خلينا نشوف
ماذ يحدث لو استدعينا هذا العنوان motor_1 لو استدعينا هذا العنوان فا بالتأكيد سيحدث خطأ لأن التعليمة اللتي امام هذا العنوان ناقصة لاحظ PORTC.F0 هذة التعليمه هي الموجودة امام عنوان motor_1 طيب كيف نكمل سيكون كتابة العنوان هكذا motor_1 = ON نحلل هذا العنوان
عرفنا أن هذة التعليمة PORTC.F0 هي تابعة للعنوات motor_1 .. تمام طيب ماذا عن = وايضا ماذا عن ON

كلمة ON هي عنوان للتعليمة
كود:
1;
و = نضعها لكي نكمل الكود ليكون هكذا motor_1 = ON وهنا مافاد هذان العنوانين هم
كود:
PORTC.F0 =1;
لأن لو نلاحظ أن العنوان motor_1 امامة هذة التعليمه PORTC.F0 والعنوان ON امامة هذة التعليمة
كود:
1; 
ولكي نكمل الكود نضع من عندنا = لأن لو لم نضع = سيكون الكود هكذا
motor_1 ON وتعليمات هذان العنوانين ستكون هكذا
كود:
PORTC.F0 1;
وهذا خطأ لذالك تم وضع = بين العنوان الأو اللذي اسمه motor_1 والعنوان الثاني ON ليكون الكود هكذا
كود:
motor_1 = ON
وحصيلة هذة العناوين هي
كود:
PORTC.F0 = 1;
اذا ما عرفنا انه يمكننا استدعاء اكثر من عنوان لكي نشكل جملة أو أمر أو تعليمة




الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 03-01-2020, 05:53 AM المشاركة 85   
افتراضي


نكمل

فوائد العناوين في البرنامج
تخيل أنك خصصت منفذ أو بن معينة للتحكم في ليد خلينا نقول انة تم تخصيص البن رقم واحد للبورت B
مثل هذة التعليمة
لاحظ الكود
كود:
 void main() {
            
           TRISC=0; PORTC=0;

             while(1){




         PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
         PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
         PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
         PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
        PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
         PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
        PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
         PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
        PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
         PORTB.F0=1;
         delay_ms(1000);
         PORTB.F0=0;
         delay_ms(1000);
           
    }
   }
هذا الكود يشعل ويطفئ الليد كل واحد سانية وهنا أمر الإشعال والإيقاف لليد كرر كثيراا
طيب خلينا نقول انه تم تعديل ما ونريد تغيير رقم البن أو المنفذ المربوط معه الليد هل نذهب لكل هذة التعليمات ونغير المنفذ ورقم البن هذا أمر مزعج جداا ومرهق
وما علينا فعله حسننا دعونا نستغل العنوان لهذا الغرض
كود:
    #define LED_ON   PORTB.F0=1;
    
    #define LED_OFF  PORTB.F0=0;

    #define TEMER  delay_ms(1000);
            void main() {
            
           TRISC=0; PORTC=0;

             while(1){


         LED_ON
         TEMER
         LED_OFF
         TEMER
         LED_ON
         TEMER
         LED_OFF
         TEMER
         LED_ON
         TEMER
         LED_OFF
         TEMER
         LED_ON
         TEMER
         LED_OFF
         TEMER
         LED_ON
         TEMER
         LED_OFF
         TEMER
         LED_ON
         TEMER
         LED_OFF
         TEMER

    }
   }
وهنا وبكل سهولة هل نريد تغيير المنفذ ورقم البن المربوط معهه الليد حسنا نذهب للعنوان هذا
كود:
 #define LED_ON   PORTB.F0=1;
ونغير المنفذ ورقم البن هكذا
كود:
 #define LED_ON   PORTC.F7=1;
. وهنا غيرنا ونقلنا الليد علي البن 8 للمنفذ سي بكل سهولة ولأنة عنوان لكلمة LED_ON فهنا كل التعليمات الموجود تتغير لأن محتوي العنوان نفسة تغير كان هذا
كود:
PORTB.F0=1;
واصبح هذا
كود:
 PORTC.F7=1;
الأن عرفنا اهمية استخدام العناوين في البرنامج اليس شئ رائع ان نستخدم هذة العناوين
شئ اضافي انلاحظ انة تمت تسمية الليد كما نحب بمعني بدلا من كتابة التعلية للتحكم في الليد بهذا الشكل
كود:
PORTB.F0=1;
كتبناها بهذا الشكل LED_ON وهنا عند النظر للكود يسهل علينا فهمة الجملة واضحة وضوح الشمس LED_ON تعني الليد مشتعل ولكن لو كتبناها بدون عنوان
كود:
PORTB.F0=1;
سوف نأخذ بعض الوقت لكي نبحث ما هوا الشئ للمربوط مع هذا المنفذ ولكن العنوان LED_ON جاء واضح وصريح

بالنسبة للكود تكرار اضاءة الليد كتبته بغرض توضيح فكرة أو اهمية استخدام العناوين فقط ولكن كان يجب كتابتة بهذا الشكل


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 03-01-2020, 06:30 AM المشاركة 86   
افتراضي


نكمل

كود:
    #define LED_ON   PORTB.F0=1;
    
    #define LED_OFF  PORTB.F0=0;

    #define TEMER  delay_ms(1000);
    
      int X=0;
            void main() {
            
           TRISC=0; PORTC=0;

             while(1){

      for(X=0;X<30;X++){ LED_ON TEMER LED_OFF }


    }
   }
انظر جيداا الي هذا الكود تخيل أن هذا الكود يفعل ما يفعلية كود اضاءة الليد في المشاركة اعلاة حيث هنا بدلا من تكرار اوامر تشغيل واطفاء الليد 30 مرة فقط استخدمنا أمر تكرار محدد من 30 مرة

نشرح الكود وطبعا شرحنا أوامر العناوين ونبدأ هنا من أمر التكرار

كود:
for(X=0;X<30;X++){ LED_ON TEMER LED_OFF }
هذا الأمر جميل جداا حيث يوفر علينا كتابة تكرار أمر معين تخيل مثلا انك تريد تشغيل واطفاء الليد 1000 مرة هل ستكتب أمر تشغيل وأمر ايقاف الف مره هكذا مثلا
كود:
 PORTB.F7=1; delay_ms(1000);PORTB.F7=1;
هل من المعقول تكرار هذا الأمر الف مرة طيب ما هوا الحل
الحل هوا استخدام حلقة التكرار for
وهذة الحلقة تعتمد في تشغيلها علي متغير وهنا اسم المتغير هوا X والأن نفصص الكود
تعليمة for وتكتب هكذا
كود:
for(X=0;X<30;X++){ LED_ON TEMER LED_OFF }
في البداية يدخل البرنامج داخل حلقة for وتحديداا بين هذين القوسين ( ) for ماذا يجد البرنامج حسنا اولا يجد متغير واسمه X=0 وهوا = صفر ثم بعد ذالك يذهب للتعليمة المجاورة يجد انها تقول هل X اصغر من 300 نعم X اصغر من 300 حسنا تذهب للتعليمه التالية++X وتذيد X بواحد حسنا وبعد ذالك يذهب البرنامج الي القوسين المنحنيين { } حسنا ما بداخل هذين القوسين يجد بداخلهم هذة التعليمات { LED_ON TEMER LED_OFF } وهذة التعليمات تقول أن يشتعل الليد وثم يظل مشتعل الي واحد سانية ثم يطفئ الليد وينتظر واحد سانية حسنا الي هنا هل يخرج البرنامج من حلقة التكرار
for بالطبع لا يعود ليعيد الدورة من جديد يذهب الي بداية الحلقة من اليسار ويلقي المتغير X واصبح قيمتة = واحد حسنا يذهب للتعليمة المجاورة يجدها X<30 تقول هل X اصغر من 300 الإجابة نعم لأن X الأن = واحد حسنا يذهب الي التعليمة المجاورة ++X وتقول هذة التعليمة بأن يتم ذيادة X بواحد كلما مر عليها البرنامج وهنا يذهب البرنامج للقوسين المنحني { LED_ON TEMER LED_OFF } وهذة التعليمات تقول أن يشتعل الليد وثم يظل مشتعل الي واحد سانية ثم يطفئ الليد وينتظر واحد سانية
حسنا هل يخرج البرنامج من حلقة التكرار for بالطبع لا ولماذا لا يخرج لأن مازالت قيمة X اصغر من 300 ويذهب ليعيد الدورة مرة ثالثة وفي كل دورة تذداد قيمة المتغير X بواحد ويظل البرنامج يعيد ويكرر الدورات وينفذة الأوامر الموجودة داخل هذة الأقواس { } الي ان تصل قيمة المتغير X الي أكبر من 300 وهنا يخرج البرنامج من حلقة التكرار وهوا خارج من الحلقة يصفر قيمة X ليجعلها = صفر حتي لو رجع اليها مرة اخري يبدأ في التكرار من جديد



الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 03-01-2020, 07:12 AM المشاركة 87   
افتراضي


السلام عليكم ورحمه الله

بالنسبة للأكود وطرق توصيل المتحكم مثلا مع شاشة LCD أو 7SEGMNT أو شاشة جرافيك او شاشة تاتش
وغيرها من اموديولات مثل لوحة مفاتيح كي باد او ربط المتحكم مع ذكرة ايبروم او فلاش او كارت ميموري كل ما يخص هذة الأمور تججة في ملف المساعدة في برنامج MicroC PRO for pic

وهذة بعض الصورة من داخل ملف المساعدة وكيف تدخل الي ملف المساعدة وتختار العناصر













معلومات هامة

عند استخدام سوتشات كثيرة مع الميكركنترول يفصل استخدات مقاومات شد لأسفل وهذ لكي لا نجهد منظم الجهد

ايضا عند استخدام سويتشات بعيدة عن المتحكم يستحسن ان نستخدم العزل الضوئي مع السويتشات البعيدة عن المتحكم لتجنب الشوشرة
يجب تصميم البوردة بخطوط رفيعة جداا والأخص خطوط نقل المعلومات لتجنب الشوشرة عليها
يجب تركيب كرستالة مناسبة لسرعة او المطلوب من المشروع ايضا عند تصميم البورد يجب تقريب الكرستالة من الميكرو لتجنب الشوشرة عليها

بالتوفيق


الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,682
نشاط [ عبدالله حجازى ]
قوة السمعة:
قديم 03-01-2020, 08:32 AM المشاركة 88   
افتراضي


السلام عليكم ورحمه الله

https://www.qariya.info/vb/showthread.php?t=193495

هذا رابط لصنع مبرمجه



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 06:59 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)