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

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

الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 09-09-2013, 01:03 AM المشاركة 1   
ha سؤال حول توصيل 2 سويتشات مع الميكروكنترول Twitter FaceBook Google+



انا عاوز اعمل برنامج للميكروكنترول يكون كالاتى
عاوز اوصل 2 سويتشات مع الميكروكنترول
عند الضغط على السويتش رقم 1 ينفذ الميكرو امر معين (مثلا اضائة الليد الموصل على البت b0 )
وعند الضغط على السويتش رقم 2 يقوم باضائة الليد الموصل على البيت b1
وعند الضغط على السويتش 1 والسويتش 2 فى نفس الوقت
يقوم بعمل اخر (يضئ مثلا الليد الموصل على البت b3 )
انا بعرف اشتغل مع دالة if وعرفت اخلى كل سويتش يعمل عمل معين مثل اضائة الليدات
ولكن كيف اجعل الميكروكنترول يقوم بتنفيذ امر معين عند الضغط على السويتشين فى وقت واحد ؟؟؟؟

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 09-09-2013, 02:33 AM المشاركة 2   
افتراضي


انا عاوز اعمل برنامج للميكروكنترول يكون كالاتى
عاوز اوصل 2 سويتشات مع الميكروكنترول
عند الضغط على السويتش رقم 1 ينفذ الميكرو امر معين (مثلا اضائة الليد الموصل على البت b0 )
وعند الضغط على السويتش رقم 2 يقوم باضائة الليد الموصل على البيت b1
وعند الضغط على السويتش 1 والسويتش 2 فى نفس الوقت
يقوم بعمل اخر (يضئ مثلا الليد الموصل على البت b3 )
انا بعرف اشتغل مع دالة if وعرفت اخلى كل سويتش يعمل عمل معين مثل اضائة الليدات
ولكن كيف اجعل الميكروكنترول يقوم بتنفيذ امر معين عند الضغط على السويتشين فى وقت واحد ؟؟؟؟
سلام عليكم

هنا باعتقادي انك لازم تستخدم رمز && في داله if
كود:
if(sw1 ==0 && sw2==1)led1=1;
if(sw2==0 && sw1 ==1)led2=1;
if(sw1==0 && sw2==0)led3=1
طبعا اقصد ==0 تم ضغط على سويج و==1 لم يتم ضغط على سويج
طبعا لاتنسى اضافه زمن تاخيري مع كل سويج انا لم اكتبه فقط اوضح فكره
اما sw يعني تم تعريفها مسبقا بانه
كود:
#define sw1   portb.f0
#define sw1_dir     trisb.f0
#define sw2    portb.f1
#define sw2_dir     trisb.f1
*********************************************
لمزيد من معلومات حول رمز && و ||
راجع رابط
http://www.qariya.com/vb/showthread....819#post785819

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

الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 09-09-2013, 11:01 AM المشاركة 3   
افتراضي


سلام عليكم

هنا باعتقادي انك لازم تستخدم رمز && في داله if
كود:
if(sw1 ==0 && sw2==1)led1=1;
if(sw2==0 && sw1 ==1)led2=1;
if(sw1==0 && sw2==0)led3=1
طبعا اقصد ==0 تم ضغط على سويج و==1 لم يتم ضغط على سويج
طبعا لاتنسى اضافه زمن تاخيري مع كل سويج انا لم اكتبه فقط اوضح فكره
اما sw يعني تم تعريفها مسبقا بانه
كود:
#define sw1   portb.f0
#define sw1_dir     trisb.f0
#define sw2    portb.f1
#define sw2_dir     trisb.f1
*********************************************
لمزيد من معلومات حول رمز && و ||
راجع رابط
http://www.qariya.com/vb/showthread....819#post785819
الف شكر انا كده فهمت اللى انا عاوزه
لكن ما معنى هذه
#define


wassim-net
:: مهندس ::
تاريخ التسجيل: Nov 2009
المشاركات: 25
نشاط [ wassim-net ]
قوة السمعة:0
قديم 09-09-2013, 11:33 AM المشاركة 4   
Post


define يعني انك بتعرف المتغيرات الحرفية التي تفهمها انت
لكي تستخدم فيما بعد اسماء المتغيرات اي Variables Names بدل الكود الموافق لها
ارجوا ان تكون فهمت


الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 09-09-2013, 11:43 AM المشاركة 5   
افتراضي


define يعني انك بتعرف المتغيرات الحرفية التي تفهمها انت
لكي تستخدم فيما بعد اسماء المتغيرات اي Variables Names بدل الكود الموافق لها
ارجوا ان تكون فهمت
اة يعنى define متغير مثلة مثل char صح


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 09-09-2013, 01:28 PM المشاركة 6   
افتراضي


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

وتوجد فائده لـ define وهي اذا انت قمت بتعديل كود وغيرت مثلا ليد من porta.f0 الى porta.f3 انت مضطر تغير في كود لغرض تعديل
طيب اذا غيرت امور كثيره ستصعب عليك تغير في كود خصوصا اذا كان كود كبير
هنا تاتي فائده التعريف او define هنا يكفي تغير في عبارات define هو اوتوماتيكيا يغير في كود

ملاحظه// عبارات تعريف اكتبها في بدايه برنامج وهي ليس لها علاقه بحجم كود يعني مهما كانت هذه عباره فلا يزيد حجم كود بت واحد
مثال
كود:
#define led_open             portc.f0
#define led_open_dir         trisc.f0
#define trans                portc.f4
#define trans_dir            trisc.f4
#define led_alarm            portc.f2
#define led_alarm_dir        trisc.f2
#define led_closed            portc.f1
#define led_closed_dir        trisc.f1
#define input                 1
#define output                0
#define on                    1
#define off                   0
#define is                    ==
هنا شرح مثال
ليد مربوط على portc.f0 وهو برسم يعني لما ينفتح باب يشتغل سميته led_open
انا بدلا من اتعامل مع بورت كتبت تالي
كود:
#define led_open             portc.f0
وتعني مايكرو لما يشوف كلمه led_open هي نفسها portc.f0 لماذا لاني عرفتها بكتابه امام كلمه define #
وبعد احتاج الى تعريف الاتجاه
انت تكتب لجعل بورت portc.f0 اخراج تكتب trisc.f0=0
هنا قمت بتعريف اي كتبت led_open_dir واكتبت بعد ذلك trisc.f0 شنو يعني اخبرت مايكرو اذا شفت led_open_dir هي نفسها trisc.f0
وهكذا لبقيه
ايضا عرف == كتبتها كتالي
كود:
#define is     ==
هنا اخبرت مايكرو اذا شفت is هي نفسها ==
وهكذا
*********************************************
مثال افترض ليد مربوط علىporta.f0 وعند ضغط على سويج مربوط علىporta.f1 يعمل ليد وعند ضغط عليه مره اخرى ينطفئ ليد
كود:
void main()
{

porta.f0=0;//off led
trisa.f0=0;//output
trisa.f1=1;// switch input
while(1)
{
 if( porta.f1 ==0)
     {
      k++;
      delay_ms(200);
      }
  if( k==3)k=0;
 if( k ==1)porta.f0=1;//on led
 else if(k==2)porta.f0=0;//off led
}
هنا لما تقرا برنامج بعد فتره من زمن او اذا كان كبير مراح تفهم وراح تسأل نفسك هو شنو porta.f0 وشنو porta.f1 لازم تضطر شوف شنو مربوط على كل بورت
هل يوجد طريقه اكتب فيها كود لكي افهمه بشكل جيد
نعم اعرف الاشياء بمسيمياتها
لاحظ نفس كود
كود:
#define  led      porta.f0
#define led_dir  trisa.f0
#define switch1     porta.f1
#define switch1_dir  trisa.f1
#define on          1
#define off         0
#define pressed     0
#define is          ==
#define input       1
#define output      0

void main()
{
 led_dir=output;
 switch1_dir=input;
 led=off;
 
 while(1)
 {
  if( switch1 is pressed )
     {
      k++;
      delay_ms(200);
      }
    if( k is 3)k=0;
   if( k is 1)led=on;//on led
   else if(k is 2)led=off;//off led
 
 
 }
كلمه define# فقط فقط........فقط لتعريف مايكرو بكلمات غريبه هو لايفهما ولكني انا افهما اي كأنما قمت بترجمه كلمه للمايكرو
ومهما كتبت من اسطر تعريفيه فلا يزيد من حجم كود

****************************سؤال *****************
اذا ردت اغير ليد من porta.f0 الى porta.f5
في كود الاول بدون استخدام تعريف انت مضطر تغير كثير بكود يعني انت لازم تغير بتالي
كود:
void main()
{

porta.f5=0;//off led
trisa.f5=0;//output
trisa.f1=1;// switch input
while(1)
{
 if( porta.f1 ==0)
     {
      k++;
      delay_ms(200);
      }
  if( k==3)k=0;
 if( k ==1)porta.f5=1;//on led
 else if(k==2)porta.f5=0;//off led
}
اما في كود ثاني الي استخدمت فيه تعريف غير فقط في تعريف انظر وانت احكم ايهما افضل في كتابه برنامج هو كلامها نفس كود لكن الاول بلغه مايكرو اما ثاني فهي بلغتك
كود:
#define  led      porta.f5
#define led_dir  trisa.f5
#define switch1     porta.f1
#define switch1_dir  trisa.f1
#define on          1
#define off         0
#define pressed     0
#define is          ==
#define input       1
#define output      0


void main()
{
 led_dir=output;
 switch1_dir=input;
 led=off;

 while(1)
 {
  if( switch1 is pressed )
     {
      k++;
      delay_ms(200);
      }
    if( k is 3)k=0;
   if( k is 1)led=on;//on led
   else if(k is 2)led=off;//off led


 }


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 09-09-2013 الساعة 01:32 PM

الصورة الرمزية remon romany
remon romany
:: عضو نشط ::
تاريخ التسجيل: Feb 2011
المشاركات: 897
نشاط [ remon romany ]
قوة السمعة:0
قديم 10-09-2013, 06:34 PM المشاركة 7   
افتراضي


سلام عليكم
كلمه define ومعناها تعريف وهو ليس متغير اي char لان متغير يحجز بايت في ذاكره انما define مجرد تعريف كلمات
عندما تكتب برنامج انت تتعامل مع اسم بورت ولكن لما تقرا الكود انت مش فاهم شنو يعني هذا كود لانه مكتوب باسم بورت ولازم تعرف شنو مربوط على هذا بورت
توجد طريقه حلوه وهي تعرف اشياء بمسمياتها وهنا استخدم define

وتوجد فائده لـ define وهي اذا انت قمت بتعديل كود وغيرت مثلا ليد من porta.f0 الى porta.f3 انت مضطر تغير في كود لغرض تعديل
طيب اذا غيرت امور كثيره ستصعب عليك تغير في كود خصوصا اذا كان كود كبير
هنا تاتي فائده التعريف او define هنا يكفي تغير في عبارات define هو اوتوماتيكيا يغير في كود

ملاحظه// عبارات تعريف اكتبها في بدايه برنامج وهي ليس لها علاقه بحجم كود يعني مهما كانت هذه عباره فلا يزيد حجم كود بت واحد
مثال
كود:
#define led_open             portc.f0
#define led_open_dir         trisc.f0
#define trans                portc.f4
#define trans_dir            trisc.f4
#define led_alarm            portc.f2
#define led_alarm_dir        trisc.f2
#define led_closed            portc.f1
#define led_closed_dir        trisc.f1
#define input                 1
#define output                0
#define on                    1
#define off                   0
#define is                    ==
هنا شرح مثال
ليد مربوط على portc.f0 وهو برسم يعني لما ينفتح باب يشتغل سميته led_open
انا بدلا من اتعامل مع بورت كتبت تالي
كود:
#define led_open             portc.f0
وتعني مايكرو لما يشوف كلمه led_open هي نفسها portc.f0 لماذا لاني عرفتها بكتابه امام كلمه define #
وبعد احتاج الى تعريف الاتجاه
انت تكتب لجعل بورت portc.f0 اخراج تكتب trisc.f0=0
هنا قمت بتعريف اي كتبت led_open_dir واكتبت بعد ذلك trisc.f0 شنو يعني اخبرت مايكرو اذا شفت led_open_dir هي نفسها trisc.f0
وهكذا لبقيه
ايضا عرف == كتبتها كتالي
كود:
#define is     ==
هنا اخبرت مايكرو اذا شفت is هي نفسها ==
وهكذا
*********************************************
مثال افترض ليد مربوط علىporta.f0 وعند ضغط على سويج مربوط علىporta.f1 يعمل ليد وعند ضغط عليه مره اخرى ينطفئ ليد
كود:
void main()
{

porta.f0=0;//off led
trisa.f0=0;//output
trisa.f1=1;// switch input
while(1)
{
 if( porta.f1 ==0)
     {
      k++;
      delay_ms(200);
      }
  if( k==3)k=0;
 if( k ==1)porta.f0=1;//on led
 else if(k==2)porta.f0=0;//off led
}
هنا لما تقرا برنامج بعد فتره من زمن او اذا كان كبير مراح تفهم وراح تسأل نفسك هو شنو porta.f0 وشنو porta.f1 لازم تضطر شوف شنو مربوط على كل بورت
هل يوجد طريقه اكتب فيها كود لكي افهمه بشكل جيد
نعم اعرف الاشياء بمسيمياتها
لاحظ نفس كود
كود:
#define  led      porta.f0
#define led_dir  trisa.f0
#define switch1     porta.f1
#define switch1_dir  trisa.f1
#define on          1
#define off         0
#define pressed     0
#define is          ==
#define input       1
#define output      0

void main()
{
 led_dir=output;
 switch1_dir=input;
 led=off;
 
 while(1)
 {
  if( switch1 is pressed )
     {
      k++;
      delay_ms(200);
      }
    if( k is 3)k=0;
   if( k is 1)led=on;//on led
   else if(k is 2)led=off;//off led
 
 
 }
كلمه define# فقط فقط........فقط لتعريف مايكرو بكلمات غريبه هو لايفهما ولكني انا افهما اي كأنما قمت بترجمه كلمه للمايكرو
ومهما كتبت من اسطر تعريفيه فلا يزيد من حجم كود

****************************سؤال *****************
اذا ردت اغير ليد من porta.f0 الى porta.f5
في كود الاول بدون استخدام تعريف انت مضطر تغير كثير بكود يعني انت لازم تغير بتالي
كود:
void main()
{

porta.f5=0;//off led
trisa.f5=0;//output
trisa.f1=1;// switch input
while(1)
{
 if( porta.f1 ==0)
     {
      k++;
      delay_ms(200);
      }
  if( k==3)k=0;
 if( k ==1)porta.f5=1;//on led
 else if(k==2)porta.f5=0;//off led
}
اما في كود ثاني الي استخدمت فيه تعريف غير فقط في تعريف انظر وانت احكم ايهما افضل في كتابه برنامج هو كلامها نفس كود لكن الاول بلغه مايكرو اما ثاني فهي بلغتك
كود:
#define  led      porta.f5
#define led_dir  trisa.f5
#define switch1     porta.f1
#define switch1_dir  trisa.f1
#define on          1
#define off         0
#define pressed     0
#define is          ==
#define input       1
#define output      0


void main()
{
 led_dir=output;
 switch1_dir=input;
 led=off;

 while(1)
 {
  if( switch1 is pressed )
     {
      k++;
      delay_ms(200);
      }
    if( k is 3)k=0;
   if( k is 1)led=on;//on led
   else if(k is 2)led=off;//off led


 }
الف شكر للرد الجميل والمفيد ده استاذ حسن


ريم سعد
:: مهندس ::
تاريخ التسجيل: Sep 2013
المشاركات: 4
نشاط [ ريم سعد ]
قوة السمعة:0
قديم 10-09-2013, 06:45 PM المشاركة 8   
افتراضي


أخي حسن شكرا على هذا الشرح الوافي دائما سباق لمساعدة الاعضاء
ولكن لي استفسار في كل المشاريع التي تسخدم السفن سكمن
يكون ربط مع الميكرو مع السفن بتسلسل البورتات
مثل عند الربط على portc يكون
a على portc.f1
b على portc.f2
c على portc.f3 ...... الى اخر بورت هو G على PORTC.F6
اذا كان الربط على PORTC و PORTB
اي a / b / c / d / e تكون على portc
و f / g على portb

هل يمكن تحديدها بالامر #define

إضافة رد

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

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

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


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

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