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

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

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

در دو قسمت قبلی در مورد ساخت wave player با stm32 صحبت کردیم، در این بخش می‌خواهیم یک رابط گرافیکی برای 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

 

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

0 نفر

پــــســنــدیـده انـد

توجه

سیاوش
سیاوش

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

دیدگاه ها

7 دیدگاه

  • محسن
    ۱۲ شهریور ۱۴۰۱

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

    • Elahe Khabaz
      elahe
      ۱۹ شهریور ۱۴۰۱

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

  • مهدی
    ۹ شهریور ۱۴۰۱

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

  • مهدی
    ۸ شهریور ۱۴۰۱

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

    • Zeus ‌
      Zeus ‌
      ۸ شهریور ۱۴۰۱

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

  • مهدی
    ۶ شهریور ۱۴۰۱

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک