ARM, STM, STM32, STM32_LL, آموزش, توصیه شده, مقاله

آموزش STM32 با توابع LL قسمت نوزدهم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش دوم (استفاده از فونت)

در بخش قبلی یک LCD Nokia را به کمک واحد SPI را راه‌اندازی کردیم و یک تصویر را روی آن نمایش دادیم. در این بخش قصد داریم یک فونت برای نوشتن در LCD تعریف کنیم و پیام‌های موردنظرمان را روی LCD نمایش دهیم.

با سیسوگ همراه باشید.

قبل از هر چیز، نیاز به یک فونت داریم که ما برای نمونه یک فونت 5×8 در نظر گرفتیم که هدر فایل آن با جست‌وجوی عبارت font 5×8.h قابل‌دسترسی است. چگونگی استفاده از این هدر فایل در ادامه کار شرح داده می‌شود.

ابتدا مانند قبل روند ساخت پروژه را طی می‌کنیم. تنظیم کلاک، دیباگ، واحد SPI و همچنین پایه‌های خروجی را مانند بخش قبل تنظیم می‌کنیم و کد پروژه را ایجاد می‌کنیم تا وارد محیط Keil شویم.

 

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

در ابتدا باید هدر فایلی که در ابتدا گفتیم را به پروژه اضافه کنیم، بدین منظور، هدرفایل را در مسیری که پروژه را ایجاد کرده‌ایم و در پوشه Core و سپس Inc کپی می‌کنیم. اکنون در محیط Keil، از نوارابزار یا از منوی Project و سپس Manage، Project Items را انتخاب می‌کنیم. از پنجره باز شده از طریق کلید Add files… به مسیر پروژه می‌رویم و هدرفایل کپی شده را انتخاب می‌کنیم تا به پروژه اضافه شود و در آخر OK را می‌زنیم.  حالا باید در ابتدای فایل main.c نیز هدرفایل را اضافه کنیم. بدین منظور از دستور زیر استفاده می‌کنیم:

اکنون نیاز به تعریف تأخیرهای موردنیاز داریم. توجه کنید برای اینکه دستورات تغییر موقعیت نوشتن و فرستادن کاراکترها به‌درستی توسط LCD اجرا شوند، باید از تأخیر استفاده کنیم. سه تأخیر به‌صورت زیر تعریف می‌کنیم:

مانند بخش قبلی، تابع send_SPI که از قبل نوشتیم را در این پروژه نیز تعریف می‌کنیم:

به وسیله این تابع، دو تابع برای فرستادن اطلاعات دستوری و نمایشی می‌نویسیم؛

توجه کنید که در این دو تابع، پایه فعال‌سازی چیپ را در شروع و پایان دستورات، فعال و غیرفعال کرده‌ایم. همچنین بعد از فرستادن دستور و داده‌های نمایشی تأخیر قرار داده‌ایم. در پروژه ما تأخیر مناسب برای فرستادن دستور حدود 90 میکروثانیه و برای فرستادن داده‌ها حدود 10 میکروثانیه بود که به‌وسیله تأخیرهای تعریف‌شده در ابتدای پروژه، این دو تأخیر موردنیاز را ایجاد کرده‌ایم (کلاک این پروژه 72 مگاهرتز تنظیم شده است).

برای استفاده از LCD مانند پروژه قبل نیاز به یک فعال‌سازی اولیه داریم که این بار می‌خواهیم به‌وسیله یک تابع این عمل را انجام دهیم؛

برای کنترل نوشتن، دو تابع تغییر موقعیت و پاک کردن صفحه‌نمایش را تعریف می‌کنیم:

اکنون باید به‌وسیله تعریف یک تابع، از کاراکترهایی که در هدرفایل تعریف شده، برای نوشتن استفاده کنیم. به‌عبارت‌دیگر، می‌خواهیم تابعی بنویسیم که یک کاراکتر را دریافت کند، این کاراکتر را در بافر فونت تعریف شده پیدا کند و آن را روی LCD نمایش دهد. تابع مذکور را به صورت زیر می‌نویسیم:

اکنون با استفاده از تابع LCD_send_char می‌توانیم تابع دیگری بنویسیم که بتواند یک رشته را روی LCD نمایش دهد:

حالا همه کدهای مورد نیاز را نوشته‌ایم. میتوانیم به وسیله کدهای نوشته شده اطلاعات دلخواهمان را روی LCD بنویسیم.

مانند قبل، واحد SPI را فعال میکنیم (قبل از حلقه while(1)) :

دستورات زیر را در ادامه می‌نویسیم:

اگر تمامی مراحل به درستی انجام شده باشند، در موقعیت تعیین شده روی LCD Nokia، اطلاعات نمایش داده می‌شود.

 

نکته‌: باید توجه کرد که آرایه نوشته شده برای فونت، با طرز نمایش اطلاعات روی LCD، از نظر افقی یا عمودی بودن انطباق داشته باشد.

 

ریدایرکت کردن Printf برای نمایش اطلاعات روی LDC Nokia

می‌توانیم مانند آموزش قسمت ریدایرکت کردن Printf توسط واحد USART، در این پروژه نیز تابع Printf را برای نمایش اطلاعات روی LCD Nokia ریدایرکت کنیم. بدین منظور ابتدا باید تنظیمات Run-Time Environment که در آموزش مذکور گفته شد را به همان شکل انجام دهیم. سپس تابع stdout_putchar را به صورت زیر تعریف می‌کنیم:

اکنون می‌توانیم از دستور printf برای نمایش اطلاعات روی LCD Nokia استفاده کنیم.

در دو بخش گذشته در مورد نحوه راه‌اندازی LCD Nokia و نمایش عکس و اطلاعات نوشتاری روی آن صحبت کردیم. در بخش بعدی با چگونگی نمایش یک انیمیشن روی LCD آشنا خواهیم شد.

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

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

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

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

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

2 دیدگاه در “آموزش STM32 با توابع LL قسمت نوزدهم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش دوم (استفاده از فونت)

  1. حسین گفت:

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

    1. سلام دوست عزیز. برای آموزش avr منابع زیادی وجود داره. شما میتونید از آموزش جامع avr که روی سایت خودمون هست هم استفاده کنید.
      لینک :
      https://8bi.ir/6mcv6