با سلام .

موضوع این قسمت : معرفی کتابخانه منو 4 دگمه برای میکروهای stm32

با توجه به مطلبی که قبلا در کانال تلگرام وبلاگ اعلام کرده بودم ، کتابخانه منو اماده شده و

در این مطلب آن رو به شما معرفی میکنم .

راستش این کتابخانه یک پیشینه ای داره و یکدفعه به ذهنم نرسید!!

و اما ماجرا چی بود!؟

ماجرا از آنجا آغاز شد که میخواستم یک دستگاه کنترل دما و رطوبت رو با صفحه نمایش lcd کاراکتری بسازم و نیاز به منو بود ... بنابراین افتادم به سرچ توی اینترنت ......هر چی کد در مورد منوهای ساده لیستی ، دیدم به صورت ثابت با if و else پیاده سازی شده بود . خب این راه حل ساده ای هست ولی اگر بخواهید کاربر رفاه خوبی داشته باشه و ایتم های منو یک مقدار مفصل و تودر تو باشه واقعا اوضاع اسف انگیز خواهد شد . ...بنابراین دست به کار شدم و یک ساختاری را با آرایه و به صورت محدود پیاد ه سازی کردم که یک منو لیستی ساده رو با 5 دگمه اجرا میکرد .

بعد از مدتی برای یک کار دیگه که نیاز به منو بود همون شبه کتابخانه ای که خودم نوشته بودم رو منسجم تر کردم و در عمل تبدیل به یک کتابخانه شد.

کتابخانه منو 5 دگمه برای LCD کاراکتری !!!!

قابلیتهای قابل قبولی داشت مثلا قابلیت تنظیم متغیرهای float و int و متغیرهای فلگ رو داشت و میتونستید روبه روی آونها به اندازه3 کاراکتر یک رشته به عنوان واحد تعریف کرد . وهمچنین میشد باهاش کالیبراسیون نرم افزاری انجام داد و داده ها رو هم توی یک حافظه دائم ذخیره کرد.

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

از اون بدتر این بود که به مقدار زیادی رم احتیاج داشت. ولی در عوض حسنش این بود که در نقطه مقابل مصرف رم ، حافظه فلش کمی رو استفاده میکرد

متاسفانه انعطاف خیلی زیادی نداشت ، یعنی به غیر از اون کارهایی که گفتم عملا هیچ قابلیت دیگه ای رو نمیتونستید به اون اضافه کنید .

ایده هایی برای بهتر شدنش به ذهنم رسیده بود ، ولی معلق ماند تا رفتم سروقت tft lcd ها ....

زمانی که تصمیم گرفتم دوباره روی کتابخانه منو کار کنم ، اول توی نت یک سرچ کردم ببینم برای منوهای ساده لیستی ، و با نما یشگر tft کتابخانه مناسبی پیدا میشه یا نه ؟

منوهایی که روی tft های سایز کوچک پیاده سازی شده بود ، ازهمون منوهای if و else بودن و اون GUI هایی که کتابخانه ای بودن برای میکروهای با حجم فلش و سرعت بالا طراحی شده بود ... کم حجم ترینشان که فقط کارکردهای اساسی رو پیاده سازی کنه به 80 کیلوبایت فلش احتیاج داشت !!!!! یعنی ازمیکروهای 128 کیلوبایتی و کمتر، صرف نظر کنید. جدای این مسئله یکسری فونت هم همراه کتابخانه هاشون بود که از نوع ثابت بودن (آخه فونت چه ربطی به کتابخانه منو داره ؟!!!!!... این مربوط به کتابخانه راه اندازی متنی lcd میشه ) و از فونت فارسی هم که خبری نبود .

خلاصه دست به کار شدم و ایده ای رو که داشتم پیاده کردم .

به جرات میگم این زیبا ترین کدی هست که تا الان نوشتم( البته بین کدهایی که خودم نوشتم) . و فکر نمیکنم تا یک مدت طولانی بتونم کدی به این خوبی بنویسم .

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

میتونید منوهای مربوط به کالیبراسیون رو پیاده سازی کنید ...یا قبل از ورود به یک منو یا آیتم یک پیام هشدار نمایش بدید و از کاربر تایید بگیرید .

و متغیر ها رو بعد از تنظیم توی eeprom یا هر حافظه دلخواهی ذخیره کنید و با یک پیام روی صفحه lcd به کاربر اطلاع بدید... و هر کاری که فکر میکنید لازم هست رو میتونید انجام بدید ......

نمونه ای از پیام تایید قبل از کالیبراسیون رو که برای پروژه یک شرکت انجام دادم ، در فیلم زیر میبینید.

این کد تست پروژه هست که روی بورد blue pill پیاده سازی شده است .

حتی مثل همون کتابخانه متنی که برایtft lcd نوشته بودم و فونتهای مختلف به تعداد نامحدود رو میشد به اون اظافه کرد ، این کتابخانه هم تم های نا محدودی رو میشه بهش اضافه کرد . که در مطالب مربوط به راهنمای استفاده ، به این مطلب خواهم پرداخت .

بعد از این توضیحات میرم سر اصل مطلب :

************************************************************************

پیش نیازها وتوجهات در رابطه با کتابخانه منو:

************************************************************************

1 – این کتابخانه برای کمپایلرهای keil و arm gcc ( نرم افزار true studio از gcc استفاده میکند) نوشته شده است .

2- استاندارد زبان برنامه نویسیc99 - gnu99 میباشد.

3 - کتابخانه به صورت رجیستری و بدون تکیه به کتابخانه های HAL یا SPL نوشته شته شده است.

4 – این کتابخانه شامل بخشی به نام theme است که( قابل تعویض است و) نوع پیشفرض آن به همراه کتابخانه ارائه میشود و وابستگی به قسمتهای گرافیک و متنی کتابخانه tft lcd که در حال حاضر ارائه شده است ، دارد . و تنها با نسخه جدید کتابخانه lcd ( 1.1.3 ) قادر به اجرا شدن میباشد .

هشدار: لازم است که قبلا کتابخانهtft lcd را تهیه کرده باشید( زیرا به همراه کتابخانه منو ارئه نمیشود )

4– کتابخانه برای میکروهای stm32f0xx و stm32f1xx قابل اجرا است .و تحت شرایطی روی میکروهای stm32f4xx اجرا میشود .

************************************************************************

خصوصیات و قابلیتهای کتابخانه :

************************************************************************

1 – این کتابخانه منوها را به صورت لیستی اجرا میکند و کاربر از طریق 4 دگمه به امکانات کتابخانه منو دسترسی دارد .

2 – پیمایش دایره ای دو جهته در نمایش آیتمهای منو و مقادیر تنظیمی:

توضیح:

پیمایش دایره ای به این صورت است که اگر دگمه پایین را بفشارید تا به انتهای لیست برسید ، در صورت ادامه فشردن دگمه پایین ایتم جاری به ابتدای لیست منتقل خواهد شد . و در صورت فشردن دگمه بالا و رسیدن به ابتدای لیست ، ایتم جاری به انتهای لیست منتقل خواهد شد.

در مورد متغیر های تنظیمی هم به همین صورت است .کاربر هنگام تعریف متغیر ، مقادیر بیشینه و کمینه را برای متغیر تعیین خواهد کرد و در صورت کاهش مقدار متغیر و رسیدن به مقدار کمینه ، و ادامه فشردن دگمه پایین ، مقدار دوباره از بیشینه شروع به کاهش خواهد نمود . این عملکرد در جهت عکس نیزصادق است .

مزیت :

این قابلیت سبب رفاه کاربر در هنگام جابه جایی در لیستهای طولانی و هچنین در تنظیم مقادیر ( به طور مثال تنظیم ساعت و دقیقه یا روز و ماه )خواهد شد.

3 – نمایش اسکرول بار :

هنگامی که منو یک لیست طولانی از ایتمها را نمایش میدهد به طوری که تمام آیتمها در صفحه قابل نمایش دادن نیست ، ستون اسکرول به شما نشان خواهد داد که در کدام بخش از منو( ابتدا ، وسط یا انتها ) قرار دارید .

4 – قابلیت تنظیم متغیرهای صحیح :

این کتابخانه از تنظیم متغیرهای علامت دارصحیح با سایز 32 بیت ( -65534 تا 65535 ) پشتیبانی میکند .

5 - تایم اوت :

کتابخانه lcd دارای تایم اوت است .به این معنی که در صورتی که کاربر در طول بازه زمانی مشخصی ( که توسط کاربر قابل تنظیم است ) کلیدی را نفشارد . منو به طور اتوماتیک بسته خواهد شد.

میزان تایم اوت در هنگام اجرای برنامه قابل تغییر است .

میتوانید عملکرد قابلیت های 1 تا 4 و همچنین تایم اوت را در کلیپ زیر ببینید .( چنانچه در منو تنظیم شد ، بعد از 6 ثانیه بیکار بودن از منو خارج میشود )

6 – قابلیت تنظیم برای متغیرهای اعشاری:

این کتابخانه قابلیت تنظیم متغیرهای اعشاری ممیز شناور با سایز 32 بیت (float ) تا حداکثر4 رقم اعشار را دارد .

و این قابلیت برای هر متغیر به طور مستقل قابل تعیین است .

در ضمن امکان تغیر در مقدار صحیح و اعشاری عدد به صورت جداگانه وجود دارد .

لطفا فیلم زیر را برای متغیر تا دو رقم اعشار ببینید.

7- صدای کلیدها:

قابلیت ایجاد صدا برای کلیدها در نظر گرفته شده است .

8- انتخاب فونت ( اندازه متن و نوع فونت ) و رنگ متن برای متغیرها به طور مستقل:

هنگامی که نیاز است که مقدار چند متغیر از طریق منو تنظیم شوند، میتوان فونت (شامل اندازه ) و رنگ متن را برای هر متغیربه طور مستقل تعریف کرد .

9 – تعیین واحد (unit ) برای نمایش کنار متغیرها :

در صورت لزوم در کنار مقدار متغیر میتوان عبارتی را به منظور اطلاع کاربر از واحد متغیر تعریف کرد . به طور مثال A برای آمپر یا V برای ولت و غیره.... تعریف واحد نمایش داده شده به دلخواه کاربر است و حتی میتوان آنرا فارسی تعریف کرد . و برای هر متغیر به طور جداگانه قابل تعریف است .

( در فیلم بالا نمایش داده شده است )

10 – استفاده ازتعداد دلخواهی تم در برنامه و تغییر تم هنگام اجرای منو :

توضیح :

ابتدا کمی توضیح در باره تم لازم است .

این کتابخانه ، سر برگ ، پابرگ ، ستون اسکرول وپشت صحنه ، آیتم انتخاب شده و آیتم انتخاب نشده را بوسیله توابعی نمایش میدهد . مجموعه این توابع را تم نامگذاری کردم .

مزیت :

این کتابخانه قابلیت این را دارد که تعداد نامحدودی تم را به برنامه اظافه کنید .

و برای نمایش هر لیست یا متغیر به طور مستقل یک تم را جهت استفاده به کتابخانه معرفی کنید .

************************************************************************

خصوصیات و قابلیتهای تم پیشفرض :

************************************************************************

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

1 – نمایش متغیرها ی اعشاری و صحیح :

2 – نمایش متغیر از نوع level :

توضیح :

کاربر میتواند انتخاب کند مقدار متغیرهای عددی ، به جای نمایش به صورت عدد ، به صورت تصویری و به شکل یک سیلندر ( مانند چیزی که هنگام تنظیم صدا یا نور صفحه گوشی موبایل میبینید) نمایش داده شود . که برای متغیرهایی از جنس تنظیم نور یا حجم صدا و از این دست مناسب است .

پیمایش دایره ای به همراه نمایش متغیر level را لطفا در فیلم زیر ببینید

3 – قابلیت تشخیص خودکار ابعاد صفحه :

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

لطفا تشخیص خودکار ابعاد صفحه را در فیلم زیر تماشا کنید.

4 – قابلیت تشخیص خودکار اندازه فونت و تطابق اندازه کادر دور آیتمها با آن:

تم پیشفرض به طورخودکار ابعاد فونت را شناسایی میکند و ابعاد کادردور آیتمها را با ابعاد فونت تنظیم میکند . مزیت این کار در این است که کاربر نیازی به تنظیم اندازه کادر نخواهد داشت و در صورت استفاده از فونتهای متنوع و با اندازه های مختلف در منو، زحمت تعین اندازه مناسب کادر را نخواهید داشت .

5 - انتخاب زبان فارسی یا انگلیسی برای پابرگ ( راهنمای ورود و خروج منو):

کاربر میتواند هنگام نمایش منو تعیین کند که قسمت راهنمای منو به زبان فارسی یا انگلیسی نمایش داده شود .

این قابلیت برای هر لیست یا منو به طور مستقل قابل انتخاب است .( اگر قسمتی از صفحه فارسی و قسمتی از صفحه انگلیسی باشد اضح است که فونت مورد استفاده باید شامل هر د و حروف فارسی و انگلیسی باشد )

قابلیت 4 و 5 را لطفا در تصویر زیر ببینید.

***در تصویر بالا ضخامت کادر دور متن در مقایسه با تصاویری که در ادامه آمده ، کمتر شده است .

6- استفاده از رنگ پس زمینه جاری lcd به عنوان رنگ پس زمینه منو:

این کار باعث میشود در صورتی که رنگ بگراند را در lcd ( که توسط تابع nlcd_clear صفحه را با آن رنگ ( پاک ) میکند) را تغییر دهید ، رنگ پس زمینه منو به طور اتوماتیک آپدیت خواهد شد .

این گزینه توسط کاربر قابل تنظیم است .

7 - انتخاب حالت چپ چین ، وسط چین و راست چین برای متن آیتمها :

این قابلیت برای تم تعیین میکند که متن را در کدام قسمت صفحه تراز کند( چپ ،راست یا وسط)

لطفا تصاویر مربوط به قابلیت 6 و 7 را در زیر ببینید

رنگ پس زمینه در کتابخانه lcd nokia1661 به زرد تغییر داده شده است و پس زمینه و نوشته ها با این عمل مطابق شده اند .

دیگر تنظیمات تم که توسط کار بر قابل تغیر هستند به شرح زیر است :

*******************************************************

قسمت عمومی :

1 – رنگ پس زمینه سر برگ و پا برگ

2 – رنگ متن موجود در سر برگ و پا برگ .

*******************************************************

قسمت نمایش لیست ( آیتمهای یک منو):

3– رنگ قسمت بگراند آیتم انتخاب شده و انتخاب نشده .

4 – رنگ متن آیتم انتخاب شده و انتخاب نشده .

5– رنگ اسکرول بار و رنگ پس زمینه اسکرول بار .

*******************************************************

قسمت نمایش متغیر های عددی :

6– تعیین تعداد پیشفرض ارقام اعشار در هنگام نمایش مقادیر عددی .( در هنگام اجرای منو قابل تغییر است )

7 – تعیین رنگ پس زمینه محدوده ی اعداد نمایش داده شده ( نه کل صفحه ) که به طور پیشفرض همان رنگ بکگراند صفحه است .

*******************************************************

قسمت نمایش متغیر از نوع level :

8– رنگ پس زمینه تصویر

9– رنگ لبه های سیلندر

10- رنگ قسمت پر سیلندر

11- ضخامت سیلندر

12– فاصله سیلندر از کناره های LCD

************************************************************************

************************************************************************

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

***************************************************************************

راهنمای راه اندازی و استفاده از کتابخانه را لطفا در اینجا ببینید .

***************************************************************************

فایل هگز تست :

برای اطمینان از عملکرد کتابخانه منو دو فایل هگز را برای تست اینجا قرار دادم .

فایل تست برای میکرو stm32f103CBt6 ( بورد blue pill ) و lcd نوکیا 1661

فایل تست برای میکرو stm32f072 c8t6 و lcd نوکیا 1661

لطفا طبق دستور العمل داخل فایلها نسبت به راه اندازی اقدام نمایید .و در صورت بروز مشکل ،کامنت بگزارید یا تماس بگیرید .

***************************************************************************

قیمت نسخه 1.0.1 برای stm32 و کمپایلرهای gcc و کیل : 180,000 تومان

متعلقات همراه : یک منوی ساخته شده که تعدادی از تصاویر و فیلمهای این مطلب مربوط به آن است .

***************************************************************************

نحوه ی خریداز طریق پرداخت مستقیم: برای خرید لطفا اینجا را ببینید

فایلهای لازم ظرف حداکثر 24 ساعت برای شما ارسال خواهد شد .

نکته مهمی که در مورد این کتابخانه وجود داره پشتیبانی از اون هست . چون کتابخانه رو خودم نوشتم هیچ نکته مبهمی برای شما به عنوان استفاده کننده وجود نخواهد داشت .

در صورت بروز هر گونه مشکل یا سوال در این باره لطفا با شماره 09169252500 تماس بر قرار کنید یا کامنت بگذارید.

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@

عضو شوید .

با سپاس.

پستهای مرتبط :

کتابخانه lcd نوکیا 1661

نرم افزار تولید فونت برای میکرو کنترلر

اجرای منو روی tft 3.2 اینچ ( اتصال درایور ili9341 به کتابخانه lcd nokia1661 )

مالکیت معنوی : لطفا از کپی کردن این مطالب خودداری کنید .

کلمات کلیدی :

menu 4 pin button stm32 library lcd tft کتابخانه منو 4 پین دگمه برای stm32 ال سی دی تی اف تی