لینک قسمت معرفی کتابخانه
لینک راهنمای موضوعی مطالب
موضوع این قسمت : ساختن منو _ انجام تنظیمات و مقداردهی آرایه(منو) ها
درود به شما.
همانطور که خاطرتان هست در قسمت 7 از یک متغیر سراسری نام بردم به اسم menu_4pin_handle_config ( گزینه شماره 4)
این متغیر تنظیماتی را در خود نگه میدارد که توابع هندل لیستها و منوها( درمطلب راهنمای استفاده قسمت 7 گزینه 3) برطبق آنها منوها را نمایش میدهند .
تابع my_menu_init را برای مقدار دهی این متغیر و همچین مقدار دهی آرایه ها تعریف کردم . و آخرین تابع در فایل خودش هست منتها به دلیل تاثیر قابل توجه توضیحات مربوط به تنظیمات در جلوگیری از ایجاد ابهام . ابتدا نحوه ی نوشتن این تابع را توضیح میدم.
این متغیر از نوع menu_4pin_handle_config_typedef که یک ساختمان است میباشد.
در تصویر زیر محتویات این ساختمان را مشاهده میکنید .

***********************************
***********************************
متغیرهای خطوط 94 تا 101 :
این متغیرها هم در نمایش منوها و هم در نمایش متغیرها استفاده میشوند( عام هستند)
و توضیحات آنها به صورت زیر است .
***********************************
1 - timeout :
این عنصر زمان تایم اوت را برای کتابخانه را برای کتابخانه مشخص میکند و میتواند بین 0 تا 255 (ثانیه ) باشد .
*** هشدار : هیچوقت آنرا روی صفر تنظیم نکنید ( اصلا زیر 10 ثانیه تنظیم نکید) چون به شما فرصت نخواهد داد که دگمه ای را بفشارید .
***********************************
2 - عنصر item__font_color :
این متغیر میتواند برای تعیین رنگ متن آیتمهای یک منو و سربرگ و پابرگ و غیره استفاده شود . و نکته اینکه توابع تم از این استفاده میکنند و تاثیری در اجرای توابع هندل ندارد .
***********************************
3-screen_height_start :
این یک عدد است که به توابع هندل میگوید محدوده ی نمایش متغیرها و یا آیتمهای یک منو ازچه سطری شروع میشود .
***********************************
4- screen_height_end :
مانند بالا است منتها به توابع هندل میگوید محدوده ی نمایش متغیرها و یا آیتمهای یک منو در چه سطری خاتمه پیدا میکند .
***********************************
5 - عنصر screen_background_func :
این متغیر آدرس تابعی را نگه میدارد که توابع هندل برای ترسیم پس زمینه تصویر (back ground ) از آن استفاده میکنند .
***********************************
6 - menu_header_func :
مانند بالا است فقط به توابع هندل میگوید از چه تابعی برای ترسیم سربرگ ( تیتر ) استفاده کند .
***********************************
7- عنصر menu_footer_func :
به توابع هندل میگوید از چه تابعی برای ترسیم پابرگ( قسمت راهنمای کلیدهای ورود و خروج) منو استفاده کند .
*** توجه : از توابع قسمت تم برای موارد 5 و 6 و 7 استفاده خواهد شد.
***********************************
دو متغیر دیگر وجود دارند به نام های list و data که مربوط به تنظیمات اختصاصی برای منو ( لیست ) ها و متغیرهای تنظیمی هستند .
***********************************
8 - عنصر list :
این متغیر برای تنظیمات مربوط به نمایش منوها و زیرمنوها ( لیستها ) استفاده میشود .
و از نوع ساختمان است که اجزای آن را در تصویر زیر میبینید.

8-1-item_height_space:
این متغیر ارتفاع مستطیلی که نام آیتم در آن نمایش داده خواهد شد را برای تابع هندل کردن منوها مشخص میکند .
8-2-item_height_distance :
این متغیر فاصله بین مستطیلهایی را که آیتمها در آن نمایش داده میشوند را برای تابع هندل منو مشخص میکند.
8-3-selected_show_func:
هنگامی که کلیدها ی بالا یا پایین فشرده میشوند . آیتم فعال تغییر خواهد کرد و باید به شیوه ای متفاوت نمایش داده شود .
این متغیر، آدرس تابعی را که برای نمایش آیتم فعال باید استفاده شود را در خود نگه میدارد.
8-4-unselected_show_func:
این متغیر آدرس تابع برای نمایش آیتم انتخاب نشده را در خود نگه میدارد .
8-5-show_scrollbar :
تابعی که در این متغیر قرار داده شود برای نمایش اسکرول بار نمایش داده خواهد شد .
**توجه:
توابعی که آدرس آنها در موارد3-8 و 4-8 و 5-8 قرار میگیرند . مربوط به تم مورد استفاده میباشند .
**************************************
9-متغیر data :
این متغیر از نوع یک ساختمان میباشد و تنظیمات را در خود نگه میدارد که تابع هندل کردن متغیرها از آن استفاده میکند.
تعریف این ساختمان مطابق تصویر زیر است .

9-1-عنصر var :
آدرس متغیری که کاربر میخواهد مقدار آن را از طریق رابط کاربری ( اجرای منو روی lcd ) تغییر دهد در این عنصر ساختمان قرار میگیرد .
این عنصر از نوع اشارگر میباشد.
***هشدار :
لازم است کاربر برای متغیرها ی تنظیمی از نوع float , int32_t استفاده نماید درصورتی که آدرس نوع دیگری را در عنصر var واردنمایید،به احتمال زیاد عملکرد کتابخانه دچار اختلال خواهد شد .
9-2- عنصر var_font :
این متغیر از نوع فونت است و فونت برای نمایش مقدار متغیر روی lcd را ذخیره میکند .( با فونت نمایش متن آیتمها و سر برگ و پابرگ تفاوت دارد ) .
9-3- عنصر var_unit_str :
این عنصر آدرس یک رشته را در خود نگه میدارد . که میتواند به عنوان واحد ( unit ) کنار عدد در lcd نمایش داده شود .
مانند V ,A ,PPM ,% , Temp و غیره ....
9-4- عنصر var_font_color :
رنگ متغیری را که در صفحه lcd نمایش داده میشود را تعیین میکند .
9-5-متغیر max_value وmax_value :
هر متغیر تنظیمی یک مقدار حداکثر ویک مقدار حداقل مجاز دارد .
این دوعنصر این مقادیر را در خود نگه میدارند . در صورتی که در حین تنظیم مقدار متغیر از بیشینه فراتر رود به طور اتوماتیک توسط کتابخانه به کمینه بر گردانده میشود و در صورتی که از مقدار کمینه کمتر شود . به مقدار بیشینه خواهد رفت ( عملکرد پیمایش دایره ای )
9-6- عنصر big_step :
گام بزرگ ( معمولی ) برای تغییر مقدار متغیر نمایش داده شده را در خود نگه میدارد . و با هر بار فشردن کلیدهای بالا وپایین مقدار متغیر را به اندازه big_step
تغییر میدهد .
9-7 - عنصر smal_step :
مانند بالا است و مقدار گام کوچک را نگه میدارد و با فشردن کلیدهای بالا یا پایین به همراه کلید ورود به اندازه smal_step به متغیر کم یا اضافه میکند .
این قابلیت فقط برای متغیر های اعشاری وجود دارد .
اگر smal_step صفر باشد ، توابع هندل متغیر ، عنصر var را به عنوان یک متغیر int_32 و اگر 0 نباشد عنصر var را به عنوان float خواهد شناخت .
*** توجه : مقدار گام کوچک باید به صورت معکوس به smal_step وارد شود . به طوا مثال :
برای گام 0.1 smal_step=10
برای گام 0.01 smal_step =100
برای گام 0.5 smal_step=2
برای گام 1 smal_step=1
9-8- عنصر print_var_color :
این عنصر یک union است . ( تعریف آنرا میتوانید در تصویر بالا قبل از تعریف ساختمان مربوط به نوع داده data مشاهده کنید .)
به این union میتوان 2 تابع مختلف نسبت داد . که یکی از آنها به نام var_func آدرس تابعی را نگه میدارد که برای نمایش مقدار متغیر تنظیمی روی lcd استفاده خواهد شد .
و جزء توابع قسمت تم است .
***********************************
***********************************
حال که به نوع داده متغیر سراسری menu_4pin_handle_config میرویم سراغ یک مثال عملی از تنظیم متغیرها .
***********************************
***********************************
تصویر زیر تنظیم این متغیر را در تابع my_menu_init نشان میدهد .

این تصویر مربوط به مثال منوی ساخته شده همراه کتابخانه هست .در اینجا برحسب طراحی منویی که انجام دادم قسمتهایی رو که در طول اجرای منو تغییر نمیکردن رو مقدار دهی کردم .
فوت گوزه گری 6 :
در تابع init ....... قسمت هایی از متغیر سراسری را که در طول اجرای منو تغییر نمیکنند و یا برای یک یا 2 مورد ( تعداد کم ) ممکن است تغییر کنند ، مقدار دهی نمایید .
در تابع init ...... علاوه بر مقداردهی متغیر سراسری .
آرایه ها را هم مقدار دهی کردم که در تصویر زیر میبینید .

همانطور که در قسمت قبل گفتم ، هنگام تعریف توابع عملکردی آیتمها 3 دسته تابع را تعریف کردیم و این مورد به این علت بود که 3 منو داشتیم ( 1منوی اصلی و 2 زیر منو)
بنابراین نیاز بود 3 آرایه تعریف شود . مقدار دهی این 3 آرایه را در تصویر بالا میبینید .
که چطور رشته نام ها و نام توابع عملکردی آیتمها ، به خانه های آرایه نسبت داده شده است .
***********************************
***********************************
در اینجا چند متغیر دیده میشود که مقدار دهی اولیه شده اند .
اینها متغیرهایی هستند که بوسیله کتابخانه منو ، امکان تغییر آنها توسط کاربر هنگام اجرای برنامه فراهم شده است .
این متغیرها میتوانند در جای دیگری باشند و حتی در یک قسمت دیگر کد مقداری دهی اولیه شده باشند .
کتابانه فقط به آدرس آنها احتیاج داد. منتها برای سادگی مثالی که دردسترس کاربران قرار میگیرد متغیر ها همینجا تعریف و مقداردهی شده اند.
مطلب مربوط به این قسمت در اینجا به پایان رسید .
با سپاس از توجه تان .
لینک قسمت قبلی
لینک قسمت بعدی
پستهای مرتبط :
کتابخانه lcd نوکیا 1661
نرم افزار تولید فونت برای میکرو کنترلر
مالکیت معنوی:لطفا کپی نکنید ..لینک بدید.