آموزش, ARM, STM32, آموزش STM32 با توابع LL, توصیه شده

آموزش STM32 با توابع LL قسمت 34: رابط گرافیکی برای wave player

رابط گرافیکی wave player

در دو قسمت قبلی در مورد ساخت wave player با stm32 صحبت کردیم، در این بخش می‌خواهیم یک رابط گرافیکی برای wave player طراحی کنیم پس با سیسوگ همراه باشید.

رابط گرافیکی wave player

برای نمایش اطلاعات گرافیکی مورد نظر از نمایشگر Nokia 1661 استفاده می‌کنیم که در این مقاله شرح داده شده است و کتابخانه آن قابل دانلود است.

پس برای شروع کار، مثل گذشته به سراغ ایجاد پروژه می‌رویم.

 

ایجاد پروژه

در این قسمت نیز برای سهولت کار فایل‌های مربوط به پروژه قبلی را کپی می‌کنیم و سپس تغییرات موردنیاز را در آن اعمال می‌کنیم. چون در کتابخانه مذکور، پایه‌های موردنیاز برای کار با LCD قابل تنظیم هستند، نیازی به تغییر پروژه از طریق Cube MX نیست و به‌سادگی به سراغ نوشتن کد می‌رویم.

 

نوشتن کد پروژه

ابتدا فایل‌های کتابخانه nokia1661 را به پوشه پروژه اضافه می‌کنیم، محتویات این پوشه باید به‌صورت زیر باشد:

 

رابط گرافیکی wave player

  یک پوشه دیگر نیز برای نوشتن توابع مورد نیاز برای رابط گرافیکی ایجاد می‌کنیم.

رابط گرافیکی wave playerاکنون وارد فایل nokia1661_Hw.h می‌شویم تا تغییرات مورد نیاز را در آن اعمال کنیم. ابتدا نوع میکروکنتر را STM انتخاب می‌کنیم؛

سپس  پورت و پایه‌های مربوط به LCD را مشخص می‌کنیم (در اینجا پایه‌های PC1 تا PC4 انتخاب‌شده‌اند) همچنین کتابخانه stm اضافه‌شده را کامنت می‌کنیم و به‌جای آن بخش‌های موردنیاز را قرار می‌دهیم:

حالا باید به سراغ فایل nokia1661_lcd_driver.c برویم. در این فایل برای نمایش کاراکتر و رشته از تابعی استفاده‌شده که از فونت موردنظر ما پشتیبانی نمی‌کند. فونت موجود در کتابخانه دانلود شده نیز برای این نمایشگر کمی کوچک به نظر می‌رسد. پس برای خوانایی بهتر و داشتن رابط گرافیکی زیباتر تابعی برای نمایش فونت 8 در 15 را جایگزین تابع موجود می‌کنیم؛

   باید فونت مورد نظرمان را نیز به این فایل اضافه کنیم. این فونت از این لینک یا از لینک گیت‌هاب در انتهای متن قابل دریافت است؛

کار ما با این فایل نیز تمام‌شده است. برای زیبایی رابط گرافیکی wave player، می‌خواهیم یک عکس پس‌زمینه هم به پروژه اضافه کنیم. برای این منظور یک تصویر با عرض 121 پیکسل و ارتفاع 60 پیکسل در نظر گرفتیم (می‌توانید تصویر دلخواهی با ابعاد متفاوت را به آرایه 16 بیتی RGB تبدیل کنید و یا از همین تصویر موجود در فایل پروژه استفاده کنید). در پوشه‌ای که برای رابط گرافیکی ایجاد کردیم یک فایل برای ذخیره اطلاعات این تصویر می‌سازیم (waveplayer_LCD_Wallpaper.h) و در اون اطلاعات مربوط به‌اندازه تصویر و محل قرار گرفتن آن و همچنین داده مربوط به خود تصویر را ذخیره می‌کنیم؛

حالا باید به سراغ فایل waveplayer_LCD_Utility.h برویم تا توابع موردنیاز را در آن اعلان کنیم؛

فایل waveplayer_LCD_Utility.h باید در nokia1661_lcd_driver.h نیز اضافه شود تا بتوان از تابع تأخیر استفاده کرد.

سپس ا توابع اعلان‌شده را در فایل waveplayer_lcd_driver.c تعریف می‌کنیم؛

اکنون‌که تمامی توابع و اطلاعات موردنیاز را تعریف کردیم باید رابط گرافیکی را به wave player اضافه کنیم. می‌خواهیم روی نمایشگر اطلاعاتی مثل اسم فایل در حال پخش، مدت‌زمان فایل، زمان سپری‌شده، زمان باقی‌مانده و همچنین نواری برای نشان دادن پروسه را نمایش دهیم. بدین منظور ابتدا برای نمایش پس رنگ پس‌زمینه و اسم فایل به سراغ فایل WAV_Handler.c و تابع scan_files می‌رویم. در ابتدای این تابع LCD را راه‌اندازی می‌کنیم، جهت نمایش اطلاعات و رنگ پس‌زمینه را تعیین می‌کنیم؛

سپس در همین تابع و در قسمت مربوط به پخش فایل، قبل از پخش کردن فایل، اسم آن را نمایش می‌دهیم؛

برای ادامه کار باید تابع wave_play را تغییر دهیم، اما قبل از آن، دو متغیر گلوبال برای نمایش دادن زمان تعریف می‌کنیم؛

متغیر counter را باید در روال مربوط به systick و در فایل SD_Utility.c افزایش دهیم؛

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

حالا به سراغ تابع wave_play می‌رویم. در این تابع متغیرهای موردنیاز برای نمایش زمان را تعریف می‌کنیم و سپس زمان‌ها را در مکان مناسب نمایش می‌دهیم؛

از تابعی که نوشتیم برای نمایش تصویر پس‌زمینه استفاده می‎‌کنیم؛

بعد از آن باید حاشیه‌ی نوار پروسه را ایجاد کنیم؛

در ادامه و در بدنه حلقه while(!(stop || next)) زمان و نوار پروسه را نمایش ‌می‌دهیم همچنین متغیر استاتیک i را قبل از حلقه تعریف می‌کنیم؛

تنها دستور باقی‌ماند صفر کردن متغیر استاتیک i بعد از حلقه است؛

در صورت اتصال صحیح نمایشگر به میکروکنترلر، باید اطلاعات موردنظر شبیه تصویر زیر برروی LCD نمایان شوند؛

رابط گرافیکی wave player

 

   لینک فایل این پروژه روی گیت‌هاب

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

نوشته های مشابه

7 دیدگاه در “آموزش STM32 با توابع LL قسمت 34: رابط گرافیکی برای wave player

  1. Avatar for محسن محسن گفت:

    سلام ممنون از اموزش های خوبتون . چرا قسمت ۳۵ که ارائه دادید قابل دسترسی نیست ممنون

    1. Avatar for elahe elahe گفت:

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

  2. Avatar for مهدی مهدی گفت:

    ممنونم اره من اون زمان هر کار کردم نشد درست یادم نیست کجا گیر کردم اگر این کار را بکنی محمد جان لطف بزرگی کردی چون برنامه ها را الان همه اکثرا با کیوب ام ایکس و hal مینویسن

  3. Avatar for مهدی مهدی گفت:

    اره دیدم ولی اون با کتابخانه استاندارد هر کار کردم که تبدیلش کنم به hal و پروژه ساخته شده با cubemx نشد برای شما اگر شده به ما هم بیزحمت اگر تونستید کدش را بدین

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      بله چون پروژه مربوط با خیلی سال پیش هست و اون موقع که پروژه رو نوشتم هنوز از کتایخانه های LL و HAL خبری نبود
      ولی برای پورت کردن پروژه بر روی کتابخانه های مربوطه کار پیچیده ای لازم نیست و تنها کافی است چند تا فانکشن باز نویسی بشه
      بیشتر بخش های پروژه نیاز به تغییر ندارند.
      ما سعی خواهیم کرد این پورت را انجام بدیم ولی واقعا زمان مشخصی رو الان نمیتونیم اعلام کنیم.

  4. Avatar for مهدی مهدی گفت:

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

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام و درود دوست عزیز
      قبلا پروژه mp3 رو انجام دادیم و توی سایت منتشر کردیم تازه با یه میکروکنترلر معمولی مثل stm32f103ret 🙂
      همه چیز درباره دیکد نرم‌افزاری MP3 به کمک میکروکنترلر – سورس کد – شماتیک
      فایل MP3 چیست و از کجا آمده است؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *