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

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

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

در بخش قبلی واحد SPI را راه‌اندازی کردیم و با جزییات آن تا حدودی آشنا شدیم. در این بخش می‌خواهیم به کمک این واحد، یک LCD سریال (Nokia 5110) را راه‌اندازی کنیم. در تصویر زیر نمونه LCD موردنظر و ترتیب پایه‌های آن نشان داده شده است.

برای اطلاع از نحوه صحیح اتصال پایه‌های LCD به میکروکنترلر و تنظیم اولیه آن باید به دیتاشیت دستگاه مراجعه کنیم. طبق شکل نشان داده شده و اطلاعات موجود در دیتاشیت Nokia 5110 ، پایه‌های Gnd و CE باید به پایه Gnd میکرو وصل شوند. پایه‌های Vcc و BL نیز به 5v یا 3.3v میکرو متصل می‌شوند. پایه‌های Reset و DC به ترتیب به  A3 و A4 (که باید در پروژه به‌عنوان پین خروجی تعریف کنیم) و همچنین پایه‌های CLK و DIN به ترتیب به A5 و A7 متصل می‌شوند.

برای شروع کار همانند گذشته پروژه را در Cube MX ایجاد می‌کنیم و تنظیمات دیباگ و کلاک را انجام می‌دهیم. واحد SPI را نیز مانند بخش قبل تنظیم می‌کنیم. پایه‌های A3 و A4 نیز باید به‌عنوان خروجی تعریف شوند. بقیه تنظیمات را مثل قبل انجام می‌دهیم، کد پروژه را ایجاد می‌کنیم و وارد محیط KEIL می‌شویم.

 

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

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

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

حالا باید با توجه به توضیحات دیتاشیت،  LCD Nokia را راه‌اندازی کنیم. بدین منظور، باید ابتدا از طریق پایه A3 که به Reset LCD متصل است، یک ریست اولیه انجام دهیم، سپس از طریق پایه A4، LCD به حالت کدهای دستوری ببریم و 4 دستور مربوط به تنظیم نمایشگر را بفرستیم و در آخر دوباره LCD را به حالت داده برگردانیم:

همان‌طور که در توضیحات دستورات نوشته شده، اولین دستور مربوط به تنظیم اولیه LCD است که مشخص می‌کند که در حالت توان پایین باشد یا نه، و همچنین حرکت افقی یا عمودی موقعیت نوشتن را تعیین می‌کند (بدین‌صورت که 0x20 اطلاعات را افقی و 0x22 اطلاعات را عمودی نمایش می‌دهد). دستور دوم نیز تعیین می‌کند که نمایشگر در چه حالتی نمایش دهد. دستور سوم و چهارم نیز برای تعیین موقعیت اولیه‌ی نوشتن هستند.

اکنون می‌توانیم اطلاعات دلخواهمان را روی LCD Nokia نمایش دهیم. به‌عنوان‌مثال می‌خواهیم پیکسل یا خانه‌های صفحه‌نمایش را به‌صورت یکی در میان سیاه‌وسفید کنیم، با نوشتن کد زیر در حلقه while(1)، خانه‌ها یکی در میان خاموش و روشن می‌شوند و جای آن‌ها عوض می‌شود.

مقدار تعریف‌شده برای تکرار حلقه‌های for، یعنی 6 X 84 تعداد پیکسل‌های LCD را مشخص می‌کند که 6 ردیف و 84 ستون هستند. اگر اتصالات و تنظیمات گفته شده به درستی انجام شده باشد، می‌بینیم که تصویر موردنظر رو نمایشگر ظاهر می‌شود.

 

نمایش یک عکس دلخواه روی LCD

بدین منظور باید عکس موردنظرمان را به ابعاد 6 در 84 (6 ردیف و 84 ستون) درآوریم. سپس آن را فرمت سیاه‌وسفید یا Grayscale درآوریم و به یک آرایه 8 بیتی با اندازه 6 X 84 در آوریم که هر درایه یک پیکسل را مشخص می‌کند. حالا می‌توانیم این آرایه را در کد به‌عنوان یک ثابت تعریف کنیم و در تابع اصلی، به کمک send_SPI به نمایش در آوریم:

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

در بخش بعدی در مورد نحوه استفاده از فونت برای نوشتن روی LCD Nokia صحبت خواهیم کرد.

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

0 نفر

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

توجه

سیاوش
سیاوش

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

دیدگاه ها

4 دیدگاه

  • داود
    ۲۰ دی ۱۴۰۰

    LL_GPIO_TogglePin(GPIO_Port_1, Pin_1);
    LL_mDelay(1);

    چرا وقتی کد بالا را تو حلقه while مینویسم به جای اینکه هر 1 میلی ثانیه تاگل کنه هر 2 میلی ثانیه تاگل میکنه؟

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

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

  • محسن
    ۱۷ دی ۱۴۰۰

    سلام ممنون و عالی بود

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

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

پر بحث ترین ها

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

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