NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 1328 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
صفحه 5 از 56 نخستنخست 12345678910111213141516171819202122232455 ... آخرینآخرین
نمایش نتایج: از 81 به 100 از 1104

موضوع: آموزش emWin

  1. #81
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    این هم برنامه ای که Multitasking رو در emwin نشون میده.
    برنامه برای RTX KEIL نوشته شده. فایل MTMultitasking.c فایل اصلی برنامه است. و فایلهایی هم که در فولدر Config قرار گرفته باید در پوشه همنامش قرار بگیره. از پروژه اصلی تون یه کپی بگیرید و این فایلها رو توش قرار بدهید.
    امیدوارم به دردتون بخوره
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: zip Config.zip (34.9 کیلو بایت, 546 نمايش)

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


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #82
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    سلام. من یه مساله ای رو در فایل GUI_X_Touch_StoreState.c مشاهده کردم.
    درصورتیکه از تایمر برای فراخوانی متناوب تابع استفاده می کنیدحلقه while رو حذف کنید و دوره تناوب تایمر رو روی 20 میلی ثانیه تنظیم کنید. دستور GUI_Delay اخر تابع رو هم حذف کنید
    این فایل برای کار در سیستم عامل آماده شده. به همین علت حلقه while ایجاد شده
    ویرایش توسط mansoory : 24-02-2013 در ساعت 10:14

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


  6. #83
    کاربر علاقه مند
    تاریخ عضویت
    Dec 2007
    نوشته ها
    26
    تشکر
    7
    تشکر شده 11 بار در 7 پست

    پیش فرض

    دوستان و مهندسین عزیز یه سوال
    اینکه حتمآ باید ram جانبی برای اینکه بشه با emwin کار کرد استفاده بشه؟؟؟؟ البته با lpc1788 ؟؟؟؟

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


  8. #84
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hossein_tomari007 نمایش پست ها
    دوستان و مهندسین عزیز یه سوال
    اینکه حتمآ باید ram جانبی برای اینکه بشه با emwin کار کرد استفاده بشه؟؟؟؟ البته با lpc1788 ؟؟؟؟
    نه. الزامی نیست. 1788 خودش 96 کیلوبایت رم داره که بیشترش قابل استفاده است.
    اما درصورتیکه می خواهید از همه قابلیتهای emwin همزمان استفاده کنید و سیستم عامل و FS وغیره هم داشته باشید طبیعیه که رم بالاتری مورد نیازه. 1788 هم که میتونه از رم خارجی استفاده کنه چه بهتر که بهش وصل بشه.
    غیر از اون، اگه ازکنترلر ال سی دی 1788 استفاده می کنید اون وقت دیگه رم خود میکرو جوابگو نیست.
    ویرایش توسط mansoory : 24-02-2013 در ساعت 16:29

  9. کاربران : 5 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  10. #85
    کاربر علاقه مند at91sam7x256 آواتار ها
    تاریخ عضویت
    May 2012
    نوشته ها
    63
    تشکر
    111
    تشکر شده 22 بار در 12 پست

    پیش فرض

    سلام
    دوستان
    این emwin رو میشه روی برد 1768 فروشگاه پیادهسازی کرد lcd 3.2
    کلا میکرو جوابگو هست

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


  12. #86
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    نقل قول نوشته اصلی توسط at91sam7x256 نمایش پست ها
    سلام
    دوستان
    این emwin رو میشه روی برد 1768 فروشگاه پیادهسازی کرد lcd 3.2
    کلا میکرو جوابگو هست
    سلام.
    بله به راحتی. من برد LPC1768-Mini-DK دارم که ال سی دی 2.8 داره و جالبه که سرعت ال سی دی اون با اینکه spi است برای اجرای دستورات emwin خوبه. /البته رم کمی که داره _64کیلوبایت که بیشترش قابل استفاده است_ باعث میشه بعضی ازامکانات رو نتونید استفاده کنید که اونا مربوط به transparent , skin و سایر تزیینات پنجره هاست. ولی اصل کار رو میتونید باهاش انجام بدهید.
    فکر کنم در صفحه 7 چندتا کلیپ کوچیک گذاشتم که می تونید سرعت اجرای emwin رو توی این برد ببینید.
    اگه به رم بالا نیاز دارین یا از فونتهای متنوع truetype استفاده خواهید کرد یااینکه سرعت نمایش بالا نیاز دارید(مثلا انیمیشن یاپخش فیلم) بهتره که از بردهای LPC1788 استفاده کنید
    ویرایش توسط mansoory : 02-03-2013 در ساعت 13:54

  13. کاربران : 3 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  14. #87
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    سلام.
    این فایل ها رو برای راه اندازی ال سی دی -lpc1788 بارم 16مگ آماده کرده ام. توجه کنید که این فایلها باید در مثالی که از lpcware دانلود کرده اید (ورژن 5.18)در فولدرهای همنامش کپی بشه. این فایلها برای مثالهای سی دی همراه برد قابل استفاده نیست.
    در ادامه راه اندازی در rtx رو خواهم گفت
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: zip LPC1788.zip (205.1 کیلو بایت, 815 نمايش)
    ویرایش توسط mansoory : 02-03-2013 در ساعت 12:22

  15. کاربران : 6 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  16. #88
    Banned
    تاریخ عضویت
    Apr 2011
    نام
    مهدی رحیمی
    نوشته ها
    727
    تشکر
    1,015
    تشکر شده 1,448 بار در 579 پست

    پیش فرض

    با سلام به دوستان یه سوال داشتم با توجه به این کور بردی که تو فروشگاه هست که دو نوع داره یه نوعش اس دی رم 32 بیتی داره و یه نوعش 16 بیتی که این مدل داخل فروشگاه فکر کنم نوع 16 بیتیشو داره حالا میخواستم بدونم استفاده از اس دی رم 16 بیتی فقط بخاطر رزولوشن پایین تر این ال سی دی 4.3 هستش ؟؟ مثلا اگه اس دی رم 32 بیتی بزاریم سرعت رفرش تصویرمون بالاتر میره ؟؟ این مورد رو برای ال سی دی 7 و 9 اینچ میپرسم که رزولوشن بالاتری داره و رم بالاتریو میطلبه

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


  18. #89
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    نقل قول نوشته اصلی توسط kamikazi نمایش پست ها
    با سلام به دوستان یه سوال داشتم با توجه به این کور بردی که تو فروشگاه هست که دو نوع داره یه نوعش اس دی رم 32 بیتی داره و یه نوعش 16 بیتی که این مدل داخل فروشگاه فکر کنم نوع 16 بیتیشو داره حالا میخواستم بدونم استفاده از اس دی رم 16 بیتی فقط بخاطر رزولوشن پایین تر این ال سی دی 4.3 هستش ؟؟ مثلا اگه اس دی رم 32 بیتی بزاریم سرعت رفرش تصویرمون بالاتر میره ؟؟ این مورد رو برای ال سی دی 7 و 9 اینچ میپرسم که رزولوشن بالاتری داره و رم بالاتریو میطلبه
    اونطور که emwin در راهنماش گفته، مقدار رم خود ال سی دی (که در 1788 با رم میکرو مشترک شده) با این فرمول حساب میشه:

    تعداد پیکسهای ستون * تعداد پیسکهای سطر * bpp
    bit per pixel=bpp
    نتیجه برحسب بیت است.
    مثلا برای ال سی دی ili9320 رم ال سی دی بصورت زیر محاسبه میشود:
    320*240*18=1382400 بیت یا 172800 بایت.


    اگر شما رم بیشتری داشته باشید می تونید در فایل GUIConf.C فضای بیشتری به emwin اختصاص بدهید تا از اون برای MEMDEVICE استفاده کنه.
    برای توضیح اینکه MEMEDEVICE چیه، فرض کنید که دوتا پنجره رسم کرده ایم. ویکی از پنجره ها را باید move کنیم. اگر بخواهیم اینها را مستقیما به ال سی دی بفرستیم، در هر ریفرش، اینطوری باید ترسیمات انجام بشه:
    1- اول desktop که زمینه است باید ترسیم بشه
    2- پنجره ای که ارتقاع پایین تری داره رسم بشه
    3- پنجره ای که ارتفاع بالاتری داره رسم بشه.
    مشاهده می کنیدکه سه سری اطلاعات باید به ال سی دی منتقل بشه. دراینصورت شما شاهد حرکت یکنواخت پنجره درحال حرکت نخواهید بود. در سرعتهای پایین تر حتی می توانید ترسیم پی در پی مراحل 1 تا 3 رو ببینید. این پر پر زدن تصویر رو در emwin گفته اند Flickering

    حالا اگه از MEMDEVICE استفاده بشه، سی پی یو همه ترسیمات مرحله 1 تا 3 رو روی بلوکی از حافظه پیاده می کنه سپس نتیجه رو در یک مرحله به ال سی دی منتقل می کنه.
    بنابراین پاسخ سوال شما بلی است. حتی اگر بعلت سرعت بالای ال سی دی ها شما متوجه پرپر زدن تصویر نشوید ...
    ویرایش توسط mansoory : 02-03-2013 در ساعت 14:13

  19. کاربران : 7 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  20. #90
    Banned
    تاریخ عضویت
    Apr 2011
    نام
    مهدی رحیمی
    نوشته ها
    727
    تشکر
    1,015
    تشکر شده 1,448 بار در 579 پست

    پیش فرض

    خیلی عالی بود مهندس منصوری توضیحاتتون کامل و بی نقص بود من طراحی برد LPC1788 رو تموم کردم و بردشو دادم بزنن چون روی بردم مشکل فضا داشتم مجبور شدم یه SDRAM سیو دو بیتی بجای 2 تا SDRAM شانزده بیتی بزارم گفتم شاید مشکلی برای اون کسی که بخواد با رزولوشن های پایین کار کنه پیش بیاد که با توضیحات شما رفع شد برای تست برد هم هر دوتا کانکتور ال سی دی 4.3 و 7 رو گزاشتم

    البته یه گله ای از دوستان دارم که خودمم همین مشکل رو دارم وقتی در مورد یه مطلبی چیزای زیادی میدونم خیلی سخت مطلبمو به دیگران میرسونم دلیلشم اینکه تصور میکنم دیگران هم مطالبی رو که من میدونم میدونن و کاملا روش مسلط هستن ولی واقعیتش اینکه خیلی از دوستان مطالبی رو که ما میدونیم نمیدونن و باید یکم سطح توضیحاتمون رو پایین بیاریم
    البته ببخشیدا در مورد همین نرم افزار EMWIN من یه روز کمل داشتم باهاش ور میفرتم ببینم داستانش چیه و اینکه باهاش یه برنامه ای رو کامپایل کنی و چنتا پنجره بسازی و ..... چطور اجرا کنید رو یاد بگیرم
    دوست داشتم مهندس منصوری شما که کاملا روی این نرم افزار تسلط دارید تو یه پست از اول تا اخر یه برنامه خیلی سادرو اموزش بدید که دوستان سردرگم نشن مطالب یکم بینندرو گیج میکنه مخصوصا ما بی تجربه هارو

  21. کاربران : 7 تشکر کرده اند از شما kamikazi برای ارسال این پست سودمند:


  22. #91
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    نقل قول نوشته اصلی توسط kamikazi نمایش پست ها
    خیلی عالی بود مهندس منصوری توضیحاتتون کامل و بی نقص بود من طراحی برد LPC1788 رو تموم کردم و بردشو دادم بزنن چون روی بردم مشکل فضا داشتم مجبور شدم یه SDRAM سیو دو بیتی بجای 2 تا SDRAM شانزده بیتی بزارم گفتم شاید مشکلی برای اون کسی که بخواد با رزولوشن های پایین کار کنه پیش بیاد که با توضیحات شما رفع شد برای تست برد هم هر دوتا کانکتور ال سی دی 4.3 و 7 رو گزاشتم

    البته یه گله ای از دوستان دارم که خودمم همین مشکل رو دارم وقتی در مورد یه مطلبی چیزای زیادی میدونم خیلی سخت مطلبمو به دیگران میرسونم دلیلشم اینکه تصور میکنم دیگران هم مطالبی رو که من میدونم میدونن و کاملا روش مسلط هستن ولی واقعیتش اینکه خیلی از دوستان مطالبی رو که ما میدونیم نمیدونن و باید یکم سطح توضیحاتمون رو پایین بیاریم
    البته ببخشیدا در مورد همین نرم افزار EMWIN من یه روز کمل داشتم باهاش ور میفرتم ببینم داستانش چیه و اینکه باهاش یه برنامه ای رو کامپایل کنی و چنتا پنجره بسازی و ..... چطور اجرا کنید رو یاد بگیرم
    دوست داشتم مهندس منصوری شما که کاملا روی این نرم افزار تسلط دارید تو یه پست از اول تا اخر یه برنامه خیلی سادرو اموزش بدید که دوستان سردرگم نشن مطالب یکم بینندرو گیج میکنه مخصوصا ما بی تجربه هارو
    لطف داری. ما هنوز در مرحله راه اندازی emwin هستیم. واقعیتش این تجربه اول من در پست نوشتنه. دیگه باید ببخشید.
    درباره تسلسل و ترتیب مطالب هم قصدم این بوده که اول بتونیم ال سی دی رو برای emwin درست تعریف کنیم و بعد تاچ و بعد از اون، emwin رو در RTOS راه بیاندازیم. بعدش آموزش اصلی emwin شروع بشه. ولی بحث خیلی به حاشیه میره و من هم از دوستان بازخورد زیادی نمی بینم. به همین دلیل مشخص نیست که موفق شدن که emwin رو راه بیاندازند یا نه؟برای ادامه کار هم اگه نتوانند ال سی دی رو راه اندازی کنند بقیه داستان به دردشون نمیخوره که
    ویرایش توسط mansoory : 02-03-2013 در ساعت 14:26

  23. کاربران : 8 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  24. #92
    Banned
    تاریخ عضویت
    Apr 2011
    نام
    مهدی رحیمی
    نوشته ها
    727
    تشکر
    1,015
    تشکر شده 1,448 بار در 579 پست

    پیش فرض

    مهندس شما کاملا درست میفرمایید منم انشا الله تا اخر هفته قطعات دستم برسه شروع میکنم و بردو منتاژش میکنم بعید میدونم مشکلی داشته باشه ولی مهندس من تمام پستهاتون رو مو به مو دنبال میکردم ولی چون بردی برای تست نداشتم نمیتونستم بیام تو کار
    متاسفانه این برنامه emwin با تمام برنامه هایی که کار میکردیم یکم متفاوته و اگه کسی خوب اونو یاد بگیره و بتونه اونو انتقالش بده به دیگران خیلی کار دوستان راه میافته اگر توجه کنید کار کردن باهاش یه نکات خیلی ریز رو میطلبه که افرادی که باهاش کار کرده باشن میتونن این نکاتو پیدا کنن به هر حال مهندس تا اینجارو خوب پیش رفتید و عالی دارید جلو میرید بی صبرانه منتظر رسیدن قطعات برای شروع هستم

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


  26. #93
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    راه اندازی emwin در RTX:
    یکی از قابلیتهای Emwin اینه که مدیرپنجره ی اون، می تونه در RTOS کار کنه. بنابراین ایجاد یک پنجره مجزا برای هر task در RTOS امکان پذیره.
    من چون به RTX KEIL دسترسی داشتم، در اون محیط emwin رو راه اندازی کردم که البته خیلی ساده است. در فولدری که KEIL نصب شده، به شاخه زیر مراجعه کنید:
    KEIL\ARM\SEGGER\EMWIN\SAMPLE\GUI_X
    اونجا فایلی به نامGUI_X_RTX.c مشاهده می کنید که درواقع چند تا تابع مثل task lock- os-dly-wait و غیره رو برای emwin معرفی کرده. اون فایل رو به پروژه خودتون اضافه کنید.سپس در فایل GUICONF.H ماکروی GUI_OS رو برابر با یک قرار بدهید. ضمنا ماکروی GUI_MAXTASK حداکثر تسکهایی رو که با emwin سروکار دارند معرفی میکنه
    کد:
    __task void 	_mtask(void);
    void _mtask(void)
    {
    		while(1)
    	{
    	//	GUI_Exec();
    		WM_Exec();
    		GUI_X_ExecIdle();
    		
    	}
    
    }
    کاراین تسک اینه که به emwin فرصت اجرای دستورات رو میده. یعنی اگه شما دستور رسم پنجره روبدهید ولی GUI_Exec رو بعدش ننویسید اتفاقی نمی افته!
    درصورتیکه از window manager استفاده نمی کنید بجای دستور WM_Exec از دستور GUI_Exec استفاده کنید.اولویت اینtask رو پایین بگیرید. نکته مهم و اساسی در این مورد اینه که این تسک با وجود اینکه 4تا خط بیشتر نیست ولی به stack بالایی نیاز داره. اگه emwin رو اجرا کردید و دیدید که نمیتونه پنجره رسم کنه اول از همه به مقدار stackی که بهش اختصاص دادید شک کنید. من به عدد 2000 بایت رسیدم. باتوجه به اینکه حافظه میکروهایی مثل 1768 محدودهف نمیشه از تنظیمات پیشفرض RTX در stack استفاده کرد (آنچه که در فایل RTX_Config.c تنظیم می کنید مناسب emwin نیست).
    بنابراین این task را باید بصورت user تعریف کنید و حافظه مناسب رو بهش اختصاص بدهید:

    کد:
    OS_TID	id_main,id_touch,id_ls,id_sim,id_sensors;
    static U64 stk[2000/8],stk2[2000/8];
    این هم تعریف تسک در برنامه:

    کد:
    id_main=os_tsk_create_user(_mtask,2,stk,sizeof(stk));
    یک تسک باstack کوچک حدود 200بایت برای تابع TouchTask __مستقر در فایل Touch_store_state.C__ درست کنید تا ارتباط با تاچ برقرار بشه (در انتهای حلقه while این تابع، از دستور GUI_X_Delay(20) استفاده کنید تا 20 میلی ثانیه تاخیر ایجاد بشه و ضمنا کنترل برنامه به تسک دیگه ای منتقل بشه.اولویت این تسک رو هم پایین قراربدهید. کل تابع TouchTask اینجا نشون داده میشه:
    کد:
    __task 	void 	TouchTask(void);
    
    void TouchTask(void) {
      static U16 xOld;
      static U16 yOld;
      static U8  PressedOld;
      U16 x, y, xDiff, yDiff;
      U32	Pressed;
    
      while(1)
      {
    
    
    
    
    	  Pressed=(LPC_GPIO2->FIOPIN)&(1<<TP_IRQ_PIN_NUM);
    	if(Pressed==0)
    	{
          x = Read_X();// TBD: Insert function which reads current x value
          y = Read_Y();// TBD: Insert function which reads current y value
          //
          // The touch has already been pressed
          //
          if (PressedOld == 1)
          {
            //
            // Calculate difference between new and old position
            //
            xDiff = (x > xOld) ? (x - xOld) : (xOld - x);
            yDiff = (y > yOld) ? (y - yOld) : (yOld - y);
            //
            // Store state if new position differs significantly from old position
            //
            if (xDiff + yDiff > 2)
            {
              xOld = x;
              yOld = y;
              GUI_TOUCH_StoreState(x, y);
            }
          }
          //
          // The touch was previously released
          // Store state regardless position
          //
          else
          {
            if ((x != 0) && (y != 0))
            {
              xOld = x;
              yOld = y;
              PressedOld = 1;
              GUI_TOUCH_StoreState(x, y);
            }
          }
    			
    	}
    	
        //
        // Touch screen is not pressed
        // Store state if it was released recently
        //
    			
      else {
          if (PressedOld == 1) {
            PressedOld = 0;
            GUI_TOUCH_StoreState(-1, -1);
          }
    
        }
    
        //
        // Make sure 
        //
    GUI_TOUCH_Exec();
        GUI_X_Delay(20);
      } ;
    }
    میبینید که در انتهای حلقه while دستور GUI_X_Delay(20) بکار رفته.
    نکته: انجام اینکار درصورتیکه با RTOS کار نکرده اید توصیه نمیشه. بهتره پس از تسلط روی RTX اینکار رو انجام بدهید. مدیر پنجره میتونه بدون RTOS هم کار کنه. خیلی نگران نباشید.

    خب در پست بعدی انشالله کار با emwin رو شروع میکنم. اگه کسی از دوستان هنوز موفق به راه اندازی ال سی دی و تاچ نشده میتونه همینجا مطرح کنه تا با همفکری بتونیم بسرعت مشکل رو حلش کنیم.
    ویرایش توسط mansoory : 02-03-2013 در ساعت 17:25

  27. کاربران : 15 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  28. #94
    کاربر فعال titery آواتار ها
    تاریخ عضویت
    Dec 2011
    نام
    وثوق
    نوشته ها
    166
    تشکر
    363
    تشکر شده 218 بار در 89 پست

    پیش فرض

    سلام به دوستان تو این مدت که نبودم داشتم رو تاچ کار میکردم و به کمک آقای منصوری جواب داد و فایل هایی که آقای منصوری زحمتش رو کشیدند رو برد فروشگاه کار میکنه

  29. کاربران : 3 تشکر کرده اند از شما titery برای ارسال این پست سودمند:


  30. #95
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2007
    نام
    مجید بوکانی نژاد
    نوشته ها
    30
    تشکر
    56
    تشکر شده 30 بار در 15 پست

    پیش فرض

    مهندس وثوق اگه امکان داره فایلایی رو که تا اینجا جواب گرفتینو قرار بدین تا بقیه دوستان هم استفاده کنن،البته اگه تمایلی دارید،یه سوالی هم دارم ؛ وقتی با gui_builder فایل مورد نظرو میسازیم شکل button که موقع ساخت میبینیم با اونیکه موقع کامپایل و دانلود روی lcd میبینیم تفاوت داره،اگه در این مورد هم راهنمایی بفرمایید ممنون میشم

  31. #96
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mbntechco نمایش پست ها
    ...یه سوالی هم دارم ؛ وقتی با gui_builder فایل مورد نظرو میسازیم شکل button که موقع ساخت میبینیم با اونیکه موقع کامپایل و دانلود روی lcd میبینیم تفاوت داره،اگه در این مورد هم راهنمایی بفرمایید ممنون میشم
    احتمالا ماکروی مرتبط به SKIN در پروژه شما فعال است. به صفحه 764 راهنمای emwin مراجعه کنید. skin پیشفرض با حالت کلاسیک که در GUIBUILDER مشاهده می کنید تفاوت داره.

    در فایل guiconf.h این ماکرو را قراردهید:

    کد:
    #define WIDGET_USE_FLEX_SKIN 1
    مقدار 1 موجب استفاده از SKIN پیشفرض خواهد شد و مقدار صفر به معنای حالت کلاسیک است
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: skin.png
مشاهده: 137
حجم: 19.5 کیلو بایت  

  32. کاربران : 8 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  33. #97
    کاربر فعال titery آواتار ها
    تاریخ عضویت
    Dec 2011
    نام
    وثوق
    نوشته ها
    166
    تشکر
    363
    تشکر شده 218 بار در 89 پست

    پیش فرض

    سلام بفرمایید اینم سمپل من Start5.18 picturfe&touch.rar

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


  35. #98
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    سلام
    انشالله که دوستان همگی موفق به راه اندازی ال سی دی و تاچ شده باشند. این آخرین پست منه و درباره Window Manager توضیحاتی خدمتتون میگم:
    Window Manager
    مدیرپنجره های emwinکارش رسم پنجره ها و Widgetها، ریفرش اونها و همچنین تولید رویدادهای مربوط به آنهاست.
    برای شروع کار باید هدرش رو include کنید:
    #include “WM.h”
    شروع تابع MainTask همیشه با GUI_Init است. همونطور که قبلا گفتم کارش راه اندازی ال سی دی و تاچه. برای راه اندازی مدیرپنجره دستور WM_Init رو بلافاصله پس از GUI_Init بنویسید.
    کد:
    void MainTask(void);
    void MainTask(void){
       GUI_Init();
    WM_Init();
      GUI_CURSOR_Show();
      WM_SetDesktopColor(GUI_BLACK);
      #if GUI_SUPPORT_MEMDEV
        WM_SetCreateFlags(WM_CF_MEMDEV);
      #endif
    …
    کدهایی که ملاحظه می کنید تقریبا در تمام برنامه ها باید نوشته بشه. خط سوم GUI_CURSOR_Show همونطور که از نامش پیداست برای اینه که ماوس نمایش داده بشه. اگه شما ماوس رو نمی بینید دلیلش اینه که تاچ درست کالیبره نشده. خط بعدی رنگ دستکاپ رو مشخص می کنه. و در خط بعد درصورتیکه در فایل GUI_Conf.h مقدار ماکروی GUI_SUPPORT_MEMDEVICE رو یک کرده باشید اجرا میشه و پرچم مربوطه رو ست می کنه تا WM از حافظه مجازی استفاده کنه.
    در WM پنجره ها از نوع ساختاری به نامWM_HWIN هستند. پنجره ای به نام DESKTOP به محض این که WM_Init اجرا بشه ساخته میشه. این پنجره همیشه وجود داره و مثل دستکاپ ویندوز پایین ترین پنجره است. اگه با برنامه نویسی تحت ویندوز آشنایی دارید کار راحتی با emwin خواهید داشت. پنجره ها دارای خواصی مانند پنجره های ویندوز هستند. یکی از اون خواص ارتفاع پنجره هاست. Desktop پایین ترین پنجره است و همیشه اولین پنجره ای است که در فرایند WM_PAINT ترسیم میشه. هندل این پنجرهWM_HBKWIN است. هر پنجره می تونه Parent یا Child باشه. توجه کنید که همه Widget ها از نوع پنجره Child هستند. پس دستوراتی که در emwin مربوط به روابط فرزند و والد هست رو از راهنماش بخونید. پنجره های Parent دارای تابعی به نام Callback هستند که در واقع تمامی رویدادهای مربوط به اون پنجره و فرزندانش رو باید در تابع Callback مربوط به اون پنجره مدیریت بفرمایین.
    برای اینکه آموزش روالی داشته باشه بیایید یکی از مثالهای emwin رو باهم مرور کنیم.
    این کارهارو در keil انجام بدهید:
    در شاخه Application اگر فایلی وجود داره حذفش کنید. در عوض فایل WM_Sample.C رو از مسیر Sample\Tutorial به شاخه Application اضافه کنید.
    می تونید کامپایلش کنید و ببینید که چه کارهایی انجام میده.
    خب شرح توضیحات رو از تابع MainTask شروع می کنیم.
    در این تابع ابتدا GUI و WM راه اندازی میشه.
    کد:
    void MainTask(void) {
      GUI_Init();
      WM_Init();
      GUI_SetBkColor(GUI_BLACK);
      WM_SetCreateFlags(WM_CF_MEMDEV);
      WM_EnableMemdev(WM_HBKWIN);
      while (1) {
        _DemoSetDesktopColor();
        _DemoCreateWindow();
        _DemoCreateWindowAsChild();
        _DemoInvalidateWindow();
        _DemoBringToTop();
        _DemoMoveTo();
        _DemoBringToBottom();
        _DemoMoveWindow();
        _DemoHideShowParent();
        _DemoHideShowChild();
        _DemoClipping();
        _DemoRedrawing();
        _DemoResizeWindow();
        _DemoSetCallback();
        _DemoDeleteWindow();
      }
    }
    در تابع فوق پس از مقدار دهی های اولیه دستوری مشاهده می کنید که استفاده از حافظه مجازی رو برای پنجره Desktop مجاز می کنه. درواقع این مساله رو برای همه پنجره ها باید مشخص کنید. توابع حلقه while رو ببینید:
    کد:
        _DemoSetDesktopColor();
     برای اینکه رنگ پنجره Desktop  رو عوض کنه:
    static void _DemoSetDesktopColor(void) {
      GUI_SetBkColor(GUI_BLUE);
      GUI_Clear();
      _DrawInfoText("WM_SetDesktopColor()");
      GUI_Delay(SPEED*3/2);
      WM_SetDesktopColor(GUI_BLACK);
      GUI_Delay(SPEED/2);
      /* Set background color and invalidate desktop color.
         This is needed for the later redrawing demo. */
      GUI_SetBkColor(GUI_BLACK);
      WM_SetDesktopColor(GUI_INVALID_COLOR);
    }
    دستورات کاملا گویا است. دو دستور GUI_SetBkColor وWM_SetDesktopColor باهم فرق می کنند. اولی رنگ پس زمینه و دومی رنگ پنجره Desktop است. داستان مربوط به رنگها رو باید خودتون از راهنما بخونید. خیلی ساده است. نکته جالب اینه که اگه برای دسکتاپ رنگ مشخص نکنید، اون نمیتونه خودش رو ریفرش کنه. بنابراین اثر سایر پنجره ها روش می مونه.
    برای ایجاد تاخیر از دستور GUI_Delay یا GUI_X_Delay استفاده کنید.
    دستور GUI_Clear وظیفه اش پاک کردن صفحه نمایش یا پنجره است. درصورتیکه پنجره ای Active باشه پاک میشه وگرنه دستکتاپ پاک خواهد شد. درصورتیکه WM استفاده نکنید این دستور صفحه رو پاک می کنه (با رنگBkColor پر می کنه)
    خط بعد تابع _DrawInfoText("WM_SetDesktopColor()");رو فراخوانی کرده:
    کد:
    static void _DrawInfoText(char* pStr) {
      GUI_SetColor(GUI_WHITE);
      GUI_SetFont(&GUI_Font24_ASCII);
      GUI_DispStringHCenterAt("WindowManager - Sample", 160, 5);
      GUI_SetFont(&GUI_Font8x16);
      GUI_DispStringAtCEOL(pStr, 5, 40);
    }
    در این تابع ابتدا رنگ قلم رو سفید معرفی کرده سپس فونت رو انتخاب کرده (فونت رو باید با ابزار FontConvertor که در فولدر tools هست بسازید وبه پروژه add کنید. دستور بعدی میگه که یک متنی رو در مختصات 160و5 بنویس با این شرط که از نظر افقی مختصات داده شده وسط متن بیافته. HCenter
    سپس فونت عوض میشه و دستور بعدی هم متنی که ورودی تابع هست رو در مختصات 5و40 مینویسه البته طوری که هم بصورت افقی و هم عمودی در مرکز این مختصات قرار گرفته باشه . عبارت EOL یعنی بقیه خط رو با SPACE تا انتها پر کنه.
    تابع بعدی که خیلی هم مهمه اینه. با یادگیری اون همه چیز درباره پنجره هاروشن میشه:
    کد:
    static void _DemoCreateWindow(void) {
      /* Set callback for background window */
      _cbBkWindowOld = WM_SetCallback(WM_HBKWIN, _cbBkWindow);
      /* Create windows */
      _ChangeInfoText("WM_CreateWindow()");
      GUI_Delay(SPEED);
      _hWindow1 = WM_CreateWindow( 50,  70, 165, 100, WM_CF_SHOW | WM_CF_MEMDEV, _cbWindow1, 0);
      GUI_Delay(SPEED/3);
      _hWindow2 = WM_CreateWindow(105, 125, 165, 100, WM_CF_SHOW | WM_CF_MEMDEV, _cbWindow2, 0);
      GUI_Delay(SPEED);
    }
    گفتیم که هر پنجره باید دارای تابع Callback باشه. پنجره دستکتاپ مهمترین پنجره است و باید دارای تابع cb باشه. دستوری به نام WM_SetCallback کارش اینه که تابع cb یک پنجره رو مشخص می کنه. باید ID پنجره رو به همراه اشاره گر تابع مربوطه بهش معرفی کنید.تابع cb باید الگوی خاصی داشته باشه که بعدا خواهم گفت. دستوری که یک پنجره ایجاد میکنه اسمش WM_CreateWindow است:

    کد:
     _hWindow1 = WM_CreateWindow( 50,  70, 165, 100, WM_CF_SHOW | WM_CF_MEMDEV, _cbWindow1, 0);
    صورت کلی اون به این صورته:
    کد:
    WM_HWIN WM_CreateWindow(int x0, int y0,
    int width, int height,
    U32 Style, WM_CALLBACK * cb
    int NumExtraBytes);
    ارگومانهای اول و دوم مختصات گوشه بالا سمت چپ پنجره است و دو آرگومان بعدی طول و عرض اون پنجره است. آرگومان بعد پرچمهایی است که باید ست کنید. لیست همه پرچمها رو درصفحه350 میتونید ببینید. مهمترینهاش ایناست:
    WM_CF_MEMDEV: برای اینکه از حافظه مجازی استفاده شود (برای ریفرش)
    WM_CF_SHOW: پنجره به محض ایجاد نمایش داده شود
    WM_CF_STAYONTOP: بالاتر از سایرپنجره ها قرار گیرد
    WM_CF_HIDE: در لحظه ایجاد نمایش داده نشود.
    پرچمها رو با |درهم ادغام کنید.

    آرگومان بعدی اشاره گری به تابع Callback این پنجره است که باید بهش معرفی کنید. و آخری هم آرگومان اختیاری است که معمولا صفر مقداردهی می شود.خروجی دستور باید در متغیری از نوع WM_HWIN قرار گیرد که بعوان ID یا Handle پنجره برای دسترسی به اون مورد استفاده قرار میگیره.
    کد:
    static WM_HWIN _hWindow1;
    خب بریم سروقت مهمترین و آخرین چیزی که خدمتتون عرض میکنم:
    CALLBACK ROUTINE
    ابتدا Callback پنجره ِدستکتاب رو ببینیم. قبلا گفتم که این پنجره بلافاصله پس از initialize شدن WM ایجاد میشه و بصورت پیشفرض فاقد تابع callback است. با دستور WM_SetCallback تابع _cbBkWindow رو بعنوان Callback دستکتاپ بهش معرفی کرده ایم. این تابع رو ببینیم:
    کد:
    static void _cbBkWindow(WM_MESSAGE* pMsg) {
      switch (pMsg->MsgId) {
      case MSG_CHANGE_TEXT:
        strcpy(_acInfoText, pMsg->Data.p);
      case WM_PAINT:
        GUI_SetBkColor(GUI_BLACK);
        GUI_Clear();
        GUI_SetColor(GUI_WHITE);
        GUI_SetFont(&GUI_Font24_ASCII);
        GUI_DispStringHCenterAt("WindowManager - Sample", 160, 5);
        GUI_SetFont(&GUI_Font8x16);
        GUI_DispStringAt(_acInfoText, 5, 40);
        break;
      default:{
        WM_DefaultProc(pMsg);
    break;}
      }
    }
    الگوی توابع Callback باید بصورت زیر باشه:
    کد:
    static void _cbBkWindow(WM_MESSAGE* pMsg)
    ساختارWM_MESSAGE پیامی است که از WM به این تابع ارسال میشه. این ساختار دارای عضوهای زیر است: Data,MsgId,hWin, hWinSrc
    عضو MsgId پیام اصلی رو مشخص می کنه. مهمترین پیامی که به یک پنجره فرستاده میشه WM_PAINT است. هر وقت این پیام دریافت بشه پنجره باید خودش رو ترسیم کنه. بنابراین آنچه که میخواهید در پنجره دیده بشه رو باید اینجا بنویسید.(در case WM_PAINT)
    در case WM_PAINT مراحل ترسیم رو مرور می کنیم:
    دستور GUI_SetBkColor رنگ زمینه پنجره فعال (اینجا دستکتاپ) رو مشخص می کنه.
    دستور GUI_Clear پنجره فعال رو پاک می کنه (بارنگی که در دستور قبل مشخص کرده ایم)
    دستور GUI_SetColor رنگ قلم رو مشخص می کنه و دستورات بعدی متنهایی رو در این پنجره می نویسه. متن دوم رو ببینید...
    کیس default بسیار مهمه و همیشه باید به اینصورت پر بشه:
    کد:
    default:{
        WM_DefaultProc(pMsg);
    break;}
    اینکار موجب میشه که پیام WM جهت پردازش سایر پنجره ها (فرزندان) به WM برگردانده شود. این کیس رو برای همه توابع CallBack باید بنویسیم... پیامهای WM خیلی مهم هستند. لیست کامل اونها رو در صفحه335 ببینید. WM_NOTIFY_PARENT یکی از مهمترین پیامهاست و نشون میده که پیامی برای فرزند پنجره اصلی صادر شده است که محتویات آن در data قرارگرفته است.
    خب اگه Callback های دیگه رو هم مطالعه کنید دستورات جالبی در اونها می بینید.
    static void _cbWindow1(WM_MESSAGE* pMsg)
    اجازه بدهید نحوه ساخت پنجره فرزند رو باهم ببینیم:
    کد:
    static void _DemoCreateWindowAsChild(void) {
      /* Create windows */
      _ChangeInfoText("WM_CreateWindowAsChild()");
      GUI_Delay(SPEED);
      _hChild = WM_CreateWindowAsChild(10, 50, 145, 40, _hWindow2, WM_CF_SHOW | WM_CF_MEMDEV, _cbChild, 0);
      GUI_Delay(SPEED);
    }
    دستور WM_CreateWindowAsChild مثل دستور ساخت پنجره معمولیه با این تفاوت که در آرگومان پنجم باید هندل پنجره والد رو بهش معرفی کنید. ضمن اینکه مختصات هم نسبت به پنجره والد سنجیده شده است. Callback پنجره _hWindow2 باید چیز جالبی باشه. چون علاوه بر رویدادهای پنجره والد، باید رویدادهای پنجره فرزند رو هم هندل کنه. البته توی این مثال بهش پرداخته نشده ولی من در مثال دیگه ای خدمتتون خواهم گفت. خب WM بطور اتوماتیک پنجره هایی رو که حرکت یا تغییر دارند بهشون پیام WM_PAINT رو می فرسته. فرض کنید که متنی قراره در پنجره نمایش داده بشه که توی یک متغیر قرار گرفته. و ما محتوای متغیر رو خارج از تابع Callback تغییر بدهیم. حالا WM از کجا بفهمه که باید پنجره ترسیم مجدد بشه؟ با دستور WM_InvalidateWindow بهWM می فهمانیم که پنجره ای نیاز به ترسیم مجدد داره.WM میتونه کل پنجره یا قسمتی از اون که نیاز به ترسیم مجدد داره رو ریفرش کنه WM_CLIPPING رو بخونید.
    اجازه بدهید برای توضیح callback پنجره های فرزند این تابع رو مطالعه کنیم (از فایلWindow_DLG.c)
    کد:
    static void _cbDialog(WM_MESSAGE * pMsg) {
      WM_HWIN hItem;
      int Id, NCode;
      // USER START (Optionally insert additional variables)
      // USER END
    
      switch (pMsg->MsgId) {
      case WM_INIT_DIALOG:
        //
        // Initialization of 'Window'
        //
        hItem = pMsg->hWin;
        WINDOW_SetBkColor(hItem, 0x00000000);
        // USER START (Optionally insert additional code for further widget initialization)
        // USER END
        break;
      case WM_NOTIFY_PARENT:
        Id    = WM_GetId(pMsg->hWinSrc);
        NCode = pMsg->Data.v;
        switch(Id) {
        case ID_BUTTON_0: // Notifications sent by 'Button'
          switch(NCode) {
          case WM_NOTIFICATION_CLICKED:
            // USER START (Optionally insert code for reacting on notification message)
            // USER END
            break;
          case WM_NOTIFICATION_RELEASED:
            // USER START (Optionally insert code for reacting on notification message)
            // USER END
            break;
          // USER START (Optionally insert additional code for further notification handling)
          // USER END
          }
          break;
        // USER START (Optionally insert additional code for further Ids)
        // USER END
        }
        break;
      // USER START (Optionally insert additional message handling)
      // USER END
      default:
        WM_DefaultProc(pMsg);
        break;
      }
    }
    فرض کنید پنجره ای ساخته ایم و یک Button در آن قرار داده ایم. (توجه کنید که Button و همه widgetها از نوع پنجره فرزند هستند) و می خواهیم رویداد های اون رو پردازش کنیم. برای پردازش رویدادهای پنجره های فرزند باید از کیس WM_NOTIFY_PARTENT استفاده کنیم. برای اینکه بفهمیم رویداد مربوط به کدام فرزند است دو متغیر به نام Id و Ncode تعریف شده اند. اولی بادستورWM_GetId آی دی پنجره فرزند را استخراج می کنیم و کنترل می کنیم که چی است
    کد:
    switch(Id) {
        case ID_BUTTON_0: // Notifications sent by 'Button'
          switch(NCode) {
          case WM_NOTIFICATION_CLICKED:
    در این کیس می تونید آنچه را که باید درهنگام کلیک شدن Button_0 باید انجام شود را بنویسید.

    WM پنجره رو می تونه بصورت Dialog هم نمایش بده. این حالتیه که فایل GUIBuilder تولید می کنه. خیلی سخت نیست. توضیح اینه که پنجره به همراه همه Widgetها همزمان تولید میشه. Widgetها دارای IDهایی هستند که در فایل GUI.h مشخص شده ولی شما می تونید اونها رو عوض هم بکنید. فقط مواظب باشید تداخلی پیش نیاد.

    فکر کنم نتونستم اونطور که باید آموزش بدم .مطالب من خیلی پراکنده بوده . به هرحال تجربه اول من در نوشتن پست بوده. امیدوارم ببخشید.مطالب خیلی خیلی زیادی هم مونده .. بهتره agape یا یکی از دوستان که تسلط کافی داره و بیانش هم خوبه بحث رو ادامه بده.

    موفق باشید.
    ویرایش توسط mansoory : 07-03-2013 در ساعت 12:29

  36. کاربران : 20 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  37. #99
    مدیر انجمن
    تاریخ عضویت
    Dec 2009
    نام
    غلامحسن منصوری
    نوشته ها
    359
    تشکر
    408
    تشکر شده 819 بار در 248 پست

    پیش فرض

    SIMULATION!!!!
    سلام دوباره.
    اینم پروژه Visual Studio که برای شبیه سازی Application های emwin است. همه نمونه های emwin که در
    سایتش مشاهده می کنید که فایلهای اجرایی ویندوز هستند، با این پروژه درست شده اند(فکر کنم آقای رییسی دنبال این پروژه بود). انشالله که مفید باشه. فراموش نکنید که هیچ هدر، تابع یا ریفرنسی از میکروی خودتون، نباید در فایل شبیه سازی وجود داشته باشه چون میکرو و Peripheral های اون در این پروژه شبیه سازی نمیشه. این پروژه فقط و فقط برای شبیه سازی emwin است. در راهنمای emwin هم گفته که باید پروژه ها تون رو طوری بنویسید که اپلیکیشن emwin (یعنی فایلی که شامل MainTask است)،از سخت افزارتون مستقل باشه. می تونید هرجا که به سخت افزار اشاره می کنید قبلش این شرط رو قرار بدهید:
    کد:
    #ifndef _WINDOWS
    یا
    کد:
    #ifndef WIN32
    استفاده کنید و در انتها هم endif# رو قرار بدهید

    ابعاد LCD مورد نظرتون رو در فایل LCDConf.C می تونید معرفی کنید.بصورت پیشفرض 320*240 است. درصورتیکه سایز بالاتری استفاده می کنید، فراموش نکنید که رم مورد نیاز رو هم در فایل GUIConf.C افزایش بدهید.

    با توجه به توضیحات بالا، شما برای شبیه سازی برنامه خودتون، باید فایلتون رو که شامل تابع MainTask هست، در شاخه Application قرار بدهید (فایلهای دیگری که ممکن است در این شاخه موجود باشه رو حذف کنید). پس از کامپایل با Visual Studio ، خروجی در فولدر Exe قرار می گیرد. (درحال حاضر برنامه دموی emwin در این فولدر قراردارد)
    این فایل رو براتون آپلود کردم (در گوگل درایو). (جهت دانلود-پس از باز شدن کامل صفحه و نمایش محتویات فایل زیپ شده توسط گوگل، از منوی فایل گزینه دانلود را انتخاب کنید)
    SeggerEval_WIN32_MSVC_MinGW_GUI_V518.zip - Google Drive
    ویرایش توسط mansoory : 09-03-2013 در ساعت 13:44

  38. کاربران : 17 تشکر کرده اند از شما mansoory برای ارسال این پست سودمند:


  39. #100
    کاربر علاقه مند
    تاریخ عضویت
    Nov 2007
    نام
    مجید بوکانی نژاد
    نوشته ها
    30
    تشکر
    56
    تشکر شده 30 بار در 15 پست

    پیش فرض

    سلام مهندس منصوری،سپاس و باز هم سپاس بابت تلاشتون و بابت قرار دادن اطلاعات مفیدتون،خدا خیرتون بده،اینو از ته ته دل میگم.
    یه سوالی دارم،ما روی coreboard یه دونه sdram داریم که تکلیفش معلومه،اما دوتا فلش هم داریم ،nand flash و nor flash ،اگه امکان داره توضیح بدین که این دوتا چه نقشی دارن،اگه فرضو بر این بزاریم که برای کد های بزرگتر از 512 کیلوبایت باید از یکی از این دوتا استفاده کرد اونی که استفاده میشه کدومه و اون یکی چی میشه؟ و اگه قراره برای کدهای بزرگتر از 512 کیلوبایت از فلش خارجی استفاده کنیم از چه تابع یا دستوری باید استفاده کرد.ممنونم از توجهتون

  40. کاربران : 4 تشکر کرده اند از شما mbntechco برای ارسال این پست سودمند:


صفحه 5 از 56 نخستنخست 12345678910111213141516171819202122232455 ... آخرینآخرین

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

  1. [سوال] جزوه آموزشی برد آموزشی lpc1768
    توسط pooriya_nic18 در انجمن LPC series (NXP)
    پاسخ: 5
    آخرين نوشته: 07-12-2013, 14:49
  2. ثبت نام در مسابقات رباتیک وزارت آموزش و پرورش
    توسط elhghasemi در انجمن طراحی و ساخت و آزمایش مدارت الکترونیک
    پاسخ: 0
    آخرين نوشته: 03-08-2012, 21:14

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

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