اة يعنى 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
وهكذا لبقيه
ايضا عرف == كتبتها كتالي
هنا اخبرت مايكرو اذا شفت 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
}