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

أدوات الموضوع

Ahmed Hamam
:: مهندس ::
تاريخ التسجيل: Jun 2014
المشاركات: 35
نشاط [ Ahmed Hamam ]
قوة السمعة:0
قديم 02-07-2014, 09:14 AM المشاركة 1   
ha micro c مساعده من خبراء Twitter FaceBook Google+





السلام عليكم

هذه اول مشاركه لى فى هذا القسم (قسم الميكروكنترول)

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

ولكن عندما وصلت للاستخدامات مع ال 7segmant قمت باستخدام الجمله الشرطيه if ولكن كل مره يحدث خطا فيها

صورة الخطا




كما اسال لو تكرم الاخوه الكرام انا ابرمج فى لغة اخرى ويمكن فى هذه اللغة عمل اكتر من جمله if بداخل بعضها مثال


فهل يمكن عمل مثل هذا فى الmicro c بحيث انه يقارن الشرطين الاثنين وينفذ امر محدد

يا ريت من احد الاعضاء الكرام يترك موضوع يشرح ال 7segmant لان موضوعات القرية تكون سهله فى الفهم وفى ايصال المعلومة بطريقة بسيطه

والسلام عليكم

اعلانات

emad_e.m.s
:: مهندس ::
تاريخ التسجيل: Aug 2009
الدولة: syria
المشاركات: 44
نشاط [ emad_e.m.s ]
قوة السمعة:0
قديم 02-07-2014, 10:01 AM المشاركة 2   
افتراضي


أزل العلامة ; من داخل القوسين في جملة if
كود:
if(portb==0b11111101){portb.f0=1;}

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

الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,334
نشاط [ ناصراحمد2 ]
قوة السمعة:98
قديم 02-07-2014, 04:33 PM المشاركة 3   
افتراضي


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


بالنسبة لسؤالك الاخير نعم يمكنك ذلك .
اولا فى لغة البيسك التى تستخدمها
فان كلمة then معناها (نفذ الاتى ))
وفى لغة الميكروسى يقوم بدور هذة الكلمة القوسين
بمعنى نفذ مابين القوسين
الا فى حالة كان المطلوب امر واحد فلا يحتاج الى اقواس ولا يحتاج ايضا الى end if
اما بالنسبة للبيسك فان كلمة end if تعنى نهاية تنفيذ الامر المشروط
ويقوم بدورها فى الميكروسى غلق القوس ----- ( -----
ولا تستلزم وضع النهاية end if
وبالنسبة لعمل شرط داخل شرط
فقط ضع اقواس نهاية الشروط بعد الشروط والاوامر
كمثال :

كود:
if(x==0)( portd=0b01010101; portd=0b10101010; //نهاية الشرط الاولا لاحظ عدم غلق القوس //// if(x==1)(portc=0; portd=0; ) ) ///القوسين هم للشرطين معا وممكن العدد اكتر ////
بالنسبة للبيسك يوجد else
ويعنى او قم بتنفيذ التالى
وهو نفسة موجود فى الميكروسى
ويتم وضعة بعد نهاية القوس للشرط الذى تريد
=================
وفيما بعد بعد ان تتعمق قليلا فى الميكروسى
سوف تجد هذا الشرط
كود:
#elif
هذا الامر هو نفسة ماسبق شرحة
ولكن فقط يختلف بسيطا وهو وجوب وضع نهاية لة كما فى البيسك او البيزك
كود:
#endif
وحتى ال else الخاص بة يجب ان تضع قبلة علامة #



بالتوفيق ان شاء الله


التعديل الأخير تم بواسطة : ناصراحمد2 بتاريخ 02-07-2014 الساعة 05:09 PM

Ahmed Hamam
:: مهندس ::
تاريخ التسجيل: Jun 2014
المشاركات: 35
نشاط [ Ahmed Hamam ]
قوة السمعة:0
قديم 02-07-2014, 10:33 PM المشاركة 4   
افتراضي


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


بالنسبة لسؤالك الاخير نعم يمكنك ذلك .
اولا فى لغة البيسك التى تستخدمها
فان كلمة then معناها (نفذ الاتى ))
وفى لغة الميكروسى يقوم بدور هذة الكلمة القوسين
بمعنى نفذ مابين القوسين
الا فى حالة كان المطلوب امر واحد فلا يحتاج الى اقواس ولا يحتاج ايضا الى end if
اما بالنسبة للبيسك فان كلمة end if تعنى نهاية تنفيذ الامر المشروط
ويقوم بدورها فى الميكروسى غلق القوس ----- ( -----
ولا تستلزم وضع النهاية end if
وبالنسبة لعمل شرط داخل شرط
فقط ضع اقواس نهاية الشروط بعد الشروط والاوامر
كمثال :

كود:
if(x==0)( portd=0b01010101; portd=0b10101010; //نهاية الشرط الاولا لاحظ عدم غلق القوس //// if(x==1)(portc=0; portd=0; ) ) ///القوسين هم للشرطين معا وممكن العدد اكتر ////
بالنسبة للبيسك يوجد else
ويعنى او قم بتنفيذ التالى
وهو نفسة موجود فى الميكروسى
ويتم وضعة بعد نهاية القوس للشرط الذى تريد
=================
وفيما بعد بعد ان تتعمق قليلا فى الميكروسى
سوف تجد هذا الشرط
كود:
#elif
هذا الامر هو نفسة ماسبق شرحة
ولكن فقط يختلف بسيطا وهو وجوب وضع نهاية لة كما فى البيسك او البيزك
كود:
#endif
وحتى ال else الخاص بة يجب ان تضع قبلة علامة #



بالتوفيق ان شاء الله





السلام عليكم

مشكور جدا استاذ ناصر انا فهمت الكود وطريقة كتابته والتعامل مع الداله الشرطيه if فى الميكرو سى ولكن انا عن نفسى افضل البيزك لانى تعاملت معها كثير وكتابتها اسهل ومباشرة لكن ما علينا

قمت بتنفيذ نفس الكود والحمد لله عمل build بنجاح ولكن عند التشغيل لم يعمل معى الشرط فهل انا كتبته غلط ؟

صورة الشرط



ومشكور استاذى لما تقدمه من مساعدات للاعضاء والمستجدين بارك الله فيك

والسلام عليكم


الصورة الرمزية ناصراحمد2
ناصراحمد2
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: EGYPT
المشاركات: 1,334
نشاط [ ناصراحمد2 ]
قوة السمعة:98
قديم 02-07-2014, 11:02 PM المشاركة 5   
افتراضي


السلام عليكم ورحمة الله وبركاتة
اكيد الشرط لم يعمل ولن يعمل بهذا الشكل
ولكن سوف يتم عمل build للكود عادى وهذا الخطا بالتحديد لا يكشفة البرنامج .
الخطا بسيط جدا
وهو انك استخدمت = مرة واحدة
والصح هو ==
if(portd==0x3f)
)
المطلوب تنفيذة .....
(

------------------------------------------
اما من ناحية السهولة
فاى شىء تجيدة تجدة سهل
واى شىء لا تجيدة او فى بداية تعلمة تجدة صعب
ولكن نصيحتى :
تعلم من كل شىء شىء


Ahmed Hamam
:: مهندس ::
تاريخ التسجيل: Jun 2014
المشاركات: 35
نشاط [ Ahmed Hamam ]
قوة السمعة:0
قديم 02-07-2014, 11:24 PM المشاركة 6   
افتراضي


السلام عليكم ورحمة الله وبركاتة
اكيد الشرط لم يعمل ولن يعمل بهذا الشكل
ولكن سوف يتم عمل build للكود عادى وهذا الخطا بالتحديد لا يكشفة البرنامج .
الخطا بسيط جدا
وهو انك استخدمت = مرة واحدة
والصح هو ==
if(portd==0x3f)
)
المطلوب تنفيذة .....
(

------------------------------------------
اما من ناحية السهولة
فاى شىء تجيدة تجدة سهل
واى شىء لا تجيدة او فى بداية تعلمة تجدة صعب
ولكن نصيحتى :
تعلم من كل شىء شىء



مشكور استاذ ناصر على سرعة الرد والنصيحة الممتازه (اعرف شئ عن كل شئ ولا تعرف كل شئ عن شئ ) هذه النصيحة مفيده جدا

لقد لاحظت فعلا فى دروساستاذ احمد سمير فايد انه يقةم بوضع علامتين (=)فى الشرط ولم اكن اعرف السبب وعند كتابتى كتبته ب (=) 1 فقط وعندما عمل build ظننت اننى على صواب

ولكن الواحد بيتعلم وجارى التجربه وان شاء الله يعمل الكود

والسلام عليكم





Ahmed Hamam
:: مهندس ::
تاريخ التسجيل: Jun 2014
المشاركات: 35
نشاط [ Ahmed Hamam ]
قوة السمعة:0
قديم 03-07-2014, 02:17 AM المشاركة 7   
افتراضي




السلام عليكم

لقد قمت بعمل جملة if بالطريقة التى وضحتها لى استاذ ناصر ومع ذلك لم تعمل فلماذا وهذه صوره الدائره المنفذ عليها الكود




وهذه الاكواد المستخدمه

كود:
void main() {

   trisB=0;
   trisD=0;
   portD=0;
   portB=0;
   



         //----timer1-------
            loop:

      portb=0b0000110;
      delay_ms(1000);
      portb=0b11011011;
      delay_ms(1000);
        portb=0b1001111;
        delay_ms(1000);
        portb=0b1100110;
        delay_ms(1000);
         portb=0b1101101;
         delay_ms(1000);
         portb=0b1111101;
         delay_ms(1000);
         portb=0b0000111;
         delay_ms(1000);
          portb=0b1111111;
          delay_ms(1000);
          portb=0b1101111;
          delay_ms(1000);
        //-----------------------------------------
        
          if( portb==0x3F)
                {
                      portd=0b0000110;
      delay_ms(1000);
                            }

            goto loop;
   
   
   
}

انا سوف استخدم الشرط فى زياده 1 الى السفن سجمنت الثانيه الموصله على بورت d وهذه طريقة قد تكون متعبه وتكبر من الكود ولكن انا دائما فى لغة برمجة البيسك استعين بالشرط فى اى شئ حتى انفذه وطبعا يكون الكود كبير لانى احاول استخدم ال if بطريقة حتى اعوض عن اكواد اخرى لا اعرفها

_ يا ريت من الاخوه من لديه موضوع عن التعامل مع 7segment فليرفقه

وجذاكم الله خيرا
والسلام عليكم




Ahmed Hamam
:: مهندس ::
تاريخ التسجيل: Jun 2014
المشاركات: 35
نشاط [ Ahmed Hamam ]
قوة السمعة:0
قديم 03-07-2014, 03:40 AM المشاركة 8   
افتراضي


السلام عليكم



الحمد لله اشتغلت if معى ولكن لاحظت شئ غريب انها تعمل اذا فقط قمت بوضع (>--< ) ولكن عند وضع (=) او (==) لا تعمل وتسبب تعطل البرنامج بالكامل لا اعرف السبب عموما سوف اتعلم المزيد عنها والحمد لله قمت بعمل البرنامج بنجاح وهذه صورته

http://im89.gulfup.com/DE5iHK.jpg

يقوم بزياده 1 الى السفن سجمنت الثانيه عند وصول الاولى الى رقم 9
قد يبدوا بسيط وتافه للمحترفين ولكنه بالنسبة لىكنززززز
هههههههههه

وهذا الكود المستخدم حدث فيه تغيير كلى صراحه المتغيرات وفرت كثير اسطر مقارنة بالكود السابق كما اعطت امكانيات اكتر

كود:
void main() {
  int x [9] ={ 6,91, 79,102, 109,125,7, 127,111 };
  int i =0;
  int y =0;

  //------------------------------
   trisB=0;     portD=0;   trisD=0;      portB=0;

    while(1){
     portb= x[i];
     delay_ms(500);
     i++;
     if (i > 8) {
         portd=x[y] ;
         delay_ms(500);
         y++;
      i = 0;
      
     }
     
    }






   
   
}

اتمنا ان يستفيد الجميع
والسلام عليكم

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025