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

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

آموزش STM32 با توابع LL قسمت نوزدهم: راه‌اندازی LCD Nokia به کمک واحد SPI بخش دوم (استفاده از فونت)
آموزش 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 آشنا خواهیم شد.

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

0 نفر

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

توجه

سیاوش
سیاوش

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

دیدگاه ها

4 دیدگاه

  • مصطفی
    ۱۹ تیر ۱۴۰۱

    سلام خدمت شما با تشکر از سایت خوبتون
    من نتونستم فایل font 5×8.h را پیدا کنم امکانش هست لینک دانلود این فایل رو به اشترک بزارید
    ممنون

    • Zeus ‌
      Zeus ‌
      ۲۰ تیر ۱۴۰۱

      سلام دوست عزیز
      فونت های متنوعی رو میتونید از لینک زیر پیدا کنید
      LCD Font

  • حسین
    ۲۳ دی ۱۴۰۰

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

    • سیاوش ایرانپاک
      سیاوش
      ۲۶ دی ۱۴۰۰

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان 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 ‌
  • 1 سال پیش
آموزش قدم به قدم راه اندازی 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 سال پیش
سیـــســـوگ

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