NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3638 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 10 از 10

موضوع: کمک برای برنامه ال سی دی کیل

  1. #1
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    20
    تشکر
    13
    تشکر شده 5 بار در 4 پست

    پیش فرض کمک برای برنامه ال سی دی کیل

    سلام
    راستش من چند وقت پیش با یه سری کد هایی برخورد کردم که هنوز هم موندم کارش چیه و چی کار می کنه (در کتابخونه ال سی دی ) . اومدم از شما دوستان بپرسم
    اولیش این هست که برای rs ال سی دی هست این شکلک های =| برای چیه و هم چنین : و...
    کد:
    #define LCD_RS(x)     ((x) ? (CONTROL_GPIO_SET |= PIN_RS) : (CONTROL_GPIO_CLR |= PIN_RS));
    در این کد هم که ... اون قسمتی که offset توش هست برای چیه؟ و هم چنین باز هم =| چیه و چی کار می کنه و اون u32 data برای تعریف متغیر 32 بیتی هست؟ یا اینتیجر 32 بیتی؟؟؟ و...
    کد:
    static __inline unsigned char lcd_send (unsigned short byte) 
    {
      u32 data ;
      DATA_MSB_Nibble_GPIO->FIODIR |= (0xff<<LCD_MSB_Nibble_OFFSET);  
        DATA_LSB_Nibble_GPIO->FIODIR |= (0xff<<LCD_LSB_Nibble_OFFSET); 
      data = (byte>>8)&0xff;
        DATA_MSB_Nibble_GPIO->FIOCLR |= (0xff<<LCD_MSB_Nibble_OFFSET);
      DATA_MSB_Nibble_GPIO->FIOSET |= data<<LCD_MSB_Nibble_OFFSET;
        wait();
        data = byte & 0xff;
        DATA_LSB_Nibble_GPIO->FIOCLR |= (0xff<<LCD_LSB_Nibble_OFFSET);
        DATA_LSB_Nibble_GPIO->FIOSET |= data<<LCD_LSB_Nibble_OFFSET;
      wait();
    
      return(1);
    }
    دوستای عزیز اگه کمی توضیح بدین خیلی محبت کردین
    ممنون
    ویرایش توسط hesam20 : 07-01-2014 در ساعت 19:36

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    20
    تشکر
    13
    تشکر شده 5 بار در 4 پست

    پیش فرض سوال

    اقا یه سوال دیگه هم داشتم اون هم اینه که این دستور system_init() چی کار می کنه ؟ برای چی هروقت از این دستور استفاده می کنم uart میکرو گیر می کنه؟

  4. #3
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    معمولا تمامی کامپایلر های زبان c ( کیل ، ccs pic c ، iar ، کدویژن و... ) از زبان استاندارد c پشتیبانی میکنن و در اونا دستورات یکسان هست ، اگر شما متن دستور رو در گوگل جستوجو کنید ، سریع تر به نتیجه میرسید .

    اولیش این هست که برای rs ال سی دی هست این شکلک های =| برای چیه و هم چنین : و...
    کد:
    #define LCD_RS(x)     ((x) ? (CONTROL_GPIO_SET |= PIN_RS) : 
    (CONTROL_GPIO_CLR |= PIN_RS));
    دستور :؟ یا دستور دو نقطه علامت سوال دقیقا مثل دستور شرطی if هست و میشه :
    کد:
    if (x==0)
    CONTROL_GPIO_SET |= PIN_RS
    else
    CONTROL_GPIO_CLR |= PIN_RS
    دستور CONTROL_GPIO_SET ظاهرا برای یک کردن پایه های پورت استفاده میشه . اگر شما عددی رو در این رجیستر یا متغیر قرار بدید ، محتوای قبلی اون پاک میشه و محتوای جدید جایگزین میشه ، به عنوان مثال :
    CONTROL_GPIO_SET=0x1
    با دستور بالا اولین بیت از این متغیر / رجیستر یک شد .
    اگه در جای دیگه از برنامه بخواییم پایه 2 رو یک کنیم باید بنویسیم :
    CONTROL_GPIO_SET=0x2
    در این حالت مقدار قبلی از بین میره ، پس با دستور =| مقدار رجیستر یا متغیر رو مقدار جدید or میکنیم و نتیجه رو در متغیر یا رجیستر میزاریم ، مثال :
    CONTROL_GPIO_SET=| 0x2
    در این حالت هم پایه یک و هم پایه 2 ست میشه .
    در این کد هم که ... اون قسمتی که offset توش هست برای چیه؟ و هم چنین باز هم =| چیه و چی کار می کنه و اون u32 data برای تعریف متغیر 32 بیتی هست؟ یا اینتیجر 32 بیتی؟؟؟ و...
    offset رو توی برنامه پیدا نکردم ، اما u32 همون اینتیجر 32 بیتی هست ( unsigned int )
    اقا یه سوال دیگه هم داشتم اون هم اینه که این دستور system_init() چی کار می کنه ؟ برای چی هروقت از این دستور استفاده می کنم uart میکرو گیر می کنه؟
    در کل نرم افزار keil و سایر کامپایلر های arm دارای توابع داخلی برای راه اندازی امکانات جانبی نیستند و برای هر بخش یک کتابخونه نوشته شده .دستور system_init() هم بسته به نوع کتاب خونه ای که استفاده میکنید میتونه عملکرد های مختلفی داشته باشه ، بهتر کل پروژه رو ارسال کنید .

  5. کاربران : 4 تشکر کرده اند از شما 1nafar برای ارسال این پست سودمند:


  6. #4
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    20
    تشکر
    13
    تشکر شده 5 بار در 4 پست

    پیش فرض

    اقا دست شما درد نکنه واقعا لطف کردین فقط یک سوال دیگه هم بود که اگه زحمت نشه جواب بدین
    ینجا(در کد 14 خطی بالا) خط اول اون دستورات قبل از نام تابع برای چی هست؟؟
    در ضمن اون قسمت data=byte & 0xff این خط چی کار می کنه ؟؟
    باتشکر فراوان
    ویرایش توسط hesam20 : 07-01-2014 در ساعت 23:12

  7. #5
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2009
    نوشته ها
    55
    تشکر
    26
    تشکر شده 50 بار در 25 پست

    پیش فرض

    سلام
    همونطوریکه استاد 1nafar فرمودند بیشتر مشکلات شما مربوط به اصول برنامه نویسی c هست و ربطی به کیل نداره
    منهم اوایل شروع با آرم همین مشکلو داشتم
    متاسفانه با اون چند تا دستور ناقصی که تو درس برنامه نویسی زبان c تو اکثر دانشگاهها درس میدن به درد کار با میکرو نمیخوره من پیشنهاد میکنم اول چند تا کتاب برنامه نویسی خوب و پیشرفته رو بخونی 90 درصد مشکلات حل میشن.
    در مورد سوال آخری متغیر data در بالا از نوع 32بیتی تعریف شده با اون دستور مطمعن میشه عددی که در data ریخته میشه بیشتر از 8 بیت نیست
    . که باز اینهم بر میگرده به همون اصول برنامه نویسی و نه به کیل
    موفق باشید.

  8. تشکرها از این نوشته :


  9. #6
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    20
    تشکر
    13
    تشکر شده 5 بار در 4 پست

    پیش فرض پاسخ

    نقل قول نوشته اصلی توسط mahdi74 نمایش پست ها
    سلام
    همونطوریکه استاد 1nafar فرمودند بیشتر مشکلات شما مربوط به اصول برنامه نویسی c هست و ربطی به کیل نداره
    منهم اوایل شروع با آرم همین مشکلو داشتم
    متاسفانه با اون چند تا دستور ناقصی که تو درس برنامه نویسی زبان c تو اکثر دانشگاهها درس میدن به درد کار با میکرو نمیخوره من پیشنهاد میکنم اول چند تا کتاب برنامه نویسی خوب و پیشرفته رو بخونی 90 درصد مشکلات حل میشن.
    در مورد سوال آخری متغیر data در بالا از نوع 32بیتی تعریف شده با اون دستور مطمعن میشه عددی که در data ریخته میشه بیشتر از 8 بیت نیست
    . که باز اینهم بر میگرده به همون اصول برنامه نویسی و نه به کیل
    موفق باشید.
    ممنون درست می فرمایید اتفاقا این حرف رو یک سری از دوستان دیگه هم می زنن ولی چون من تازه از بیسیک دارم میام به سمت ارم و کیل با این مشکلات مواجه میشم حتی تا الان 2 3 تا کتاب در مورد ارم و زبان سی خریدم ولی هیچ کدوم مفید و پیشرفته نیستن و همشون میرن سراغ تاریخ زبان سی و از جاهای دیگه صحبت میکنن و تا حالا کتاب مفید نتوستم پیدا کنم اگه شما منبعی می دونید که بتونه کمک کنه ممنون میشم راهنمایی بفرمایید

  10. #7
    کاربر علاقه مند
    تاریخ عضویت
    Jul 2013
    نوشته ها
    20
    تشکر
    13
    تشکر شده 5 بار در 4 پست

    پیش فرض یک سوال

    سلام
    یک سوال کوچک داشتم ، نتتونستم توی این کتاب ها پیدا کنم بی زحمت شما دوستان ما رو راهنمایی بفرمایید
    در مورد برنامه ال سی دی هست همون
    کد:
    data = (byte>>8)&0xff;
    کد:
    LPC_GPIO0->FIODIR &= (~(0xff<<15));
    کد:
    id1=(LPC_GPIO0->FIOPIN >>15)&0xFF;
        id2=(LPC_GPIO0->FIOPIN >>4)&0xFF;
        id = id2|(id1<<8);
    خط اخر

    اگه زحمت نشه این 3 تا خط رو توضیح بدین بی نهایت ممنون میشم

  11. #8
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2009
    نوشته ها
    55
    تشکر
    26
    تشکر شده 50 بار در 25 پست

    پیش فرض

    سلام
    ببین اینکه چرا این برنامه به این صورت نوشته شده برمیگرده به شماتیکی که برای مدار استفاده شده و....

    اما شرح مختصری از دستورات.

    قطعه کد سوم خط اولش معادل عدد هشت بیتی خوانده شده از پایه های 15 تا 23 پورت 0 رو در متغیر id1 میریزه
    خط دومش عدد 8 بیتی خوانده شده از پایه های 4 تا 12 از پورت 0 رو در متغیر id2 میریزه
    خط سومش متغیر های id1 , id2 رو که 8 بیتی هستند به یک متغیر 16 بیتی تبدیل میکنه و نتیجه رو در متغیر id میریزه.
    قطعه کد دومت پایه های 15 تا 23 از پورت 0 رو به عنوان ورودی تعریف میکنه
    کد اولی هم متغیر byte رو در 8 بیت کم ارزش متغیر data میریزه.

  12. کاربران : 2 تشکر کرده اند از شما mahdi74 برای ارسال این پست سودمند:


  13. #9
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2009
    نوشته ها
    55
    تشکر
    26
    تشکر شده 50 بار در 25 پست

    پیش فرض

    دوست عزیز
    امیدوارم از توضیحات بالا جوابت رو گرفته باشی .

    اگر این توضیحات برات کافی نیست احتمالا مشکلت در درک عملیات بیتی هست مثل and , or , shift و غیره
    ابتدا باید یک مقدار با این دستورات آشنا بشی مثلا عدد 0xff رو اگر با یک عدد and کنی چی میشه و اگر or کنی چی میشه و.....

    موفق باشی.

  14. #10
    عضو جدید aiohalaziz آواتار ها
    تاریخ عضویت
    May 2013
    نوشته ها
    14
    تشکر
    11
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام بر شما
    من هم در سی کمی لنگ میزنم
    این دستور که در ابتدا برای تعریف تابع استفاده کرده یعنی چه؟!

    static __inline unsigned char lcd_send (unsigned short byte)

    ststic__inline چیه و ...!؟

موضوعات مشابه

  1. کسی دیتاشیت این آی سی داره؟؟
    توسط jonbakhsh در انجمن سایر موارد
    پاسخ: 0
    آخرين نوشته: 08-10-2012, 23:24
  2. افزوده شدن کارشناسی مهندسی رباتیک به رشته های فراگیر دانشگاه پیام نور
    توسط ROBOTICS در انجمن اخبار کامپیوتر و IT و مسابقات رباتیک
    پاسخ: 0
    آخرين نوشته: 01-01-2011, 18:47
  3. دروس دوره کارشناسی مهندسی رباتیک دانشگاه swinburne
    توسط processor در انجمن مفاهیم اولیه در رباتیک
    پاسخ: 2
    آخرين نوشته: 08-10-2010, 11:45
  4. دروس دوره کارشناسی مهندسی رباتیک دانشگاه swinburne
    توسط ROBOTICS در انجمن مفاهیم اولیه در رباتیک
    پاسخ: 2
    آخرين نوشته: 08-10-2010, 11:45

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •