آموزش آردوینوپروژه های آردوینو

راه اندازی lcd گرافیکی ks108 با آردوینو

در این مقاله با راه اندازی lcd گرافیکی ks108 با آردوینو آشنا میشویم. کد برنامه و اتصالات به طور کامل توضیح داده خواهد شد.

پروژه اتصال KS108 به آردوینو

استفاده از ال سی دی گرافیکی در پروژه ها جذابیت زیادی ایجاد میکند و میتواند داده های زیادی را به شکل متن، عکس، شکل ها و … نمایش دهد. کتابخانه GLCD توسط Michael Margolis امکان استفاده از نمایشگرهای گرافیکی 128×64 را فراهم می کند. طراحی با فونت های مختلف، بیت مپ، خطوط، دایره ها و پیکسل های مجزا همگی پشتیبانی می شوند. کتابخانه در فایل دانلودی انتهای صفحه قرار داده شده است.

پروژه اتصال KS108 به آردوینو

مدار راه اندازی KS108 با آردوینو

نحوه اتصال پایه های آردوینو به ال سی دی گرافیکی KS108 در تصاویر زیر نشان داده شده است. اتصالات برای ال سی دی در مدل Tensy++ و Tensy2 متفاوت است. بنابراین اتصالات را با توجه به مدل دقیق ال سی دی KS108 انجام دهید.

مدار راه اندازی KS108 با آردوینو
Tensy++

Tensy2

نمایشگر به یک پتانسیومتر تنظیم کنتراست نیاز دارد. یک پتانسیومتر با مقدار 5K یا 10K به خوبی کار می کند. ترمینال مرکزی پتانسیومتر باید به پین ​​Contrast Adjust (Vo) متصل شود. دو پایانه جانبی باید به پین (Vee) و GND متصل شوند.  پایه ریست باید به +5 ولت وصل شود. قبل از استفاده از ال سی دی، لازم نیست پین ریست را پایین بیاورید.

پایه های LCD KS108

KS108 در حقیقت درایور 64*64 است. برای یک ال سی دی گرافیکی 128*64 دو KS108 نیاز است. اگر دقت کنید متوجه میشوید که ال سی دی گرافیکی 128*64 در حقیقت از دو ال سی دی جداگانه تشکیل شده است.

پایه های LCD KS108

  • دو پایه CS1 و CS2 برای انتخاب کردن درایور مورد نظر ما استفاده میشوند. CS1 كنترل كننده سمت چپ و CS2 كنترل كننده سمت راست است.
  • پین R/W نوع عملیاتی را که توسط ال سی دی انجام میشود را انتخاب میکند. برای نوشتن روی ال سی دی گرافیکی باید این پایه را LOW کنیم و برای خواندن باید این پایه را HIGH کنیم.
  • پین D/I اگر HIGH باشد عملکرد انتقال دیتا و اگر این پایه LOW باشد عملکرد انتقال دستور العمل انتخاب میشود.
  • ابتدا داده ها را روی خطوط مربوط به داده قرار میدهیم و سپس پایه های R/W و D/I را تنظیم میکنیم در نهایت پایه Enable را Low و HIGH میکنیم.

قطعات مورد نیاز

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

کد LCD KS108 برای آردوینو

کد راه اندازی LCD KS108 ساده هست. شما میتوانید در نرم افزار آردوینو در منوی Flie به قسمت Example بروید و از قسمت ks0108 فایل GLCDexample را انتخاب کنید.

کد کامل و کتابخانه در فایل دانلود انتهای صفحه قرار داده شده است. در اینجا قسمت های مهم کد را بررسی میکنیم.

در ابتدا کتابخانه های مورد نیاز فراخوانی میشود.

#include <ks0108.h> // فراخوانی کتابخانه LCD
#include "Arial14.h" // فراخوانی فونت
#include "SystemFont5x7.h" // فراخونی فونت
#include "ArduinoIcon.h" // فراخوانی تصویر 

سپس یک داده از نوع لانگ و دو داده از نوع عدد صحیح ایجاد میکنیم.

unsigned long startMillis;
unsigned int loops = 0;
unsigned int iter = 0;

در قسمت setup باید پیکربندی ها را انجام دهیم. ما توابع فراخوانی ال سی دی گرافیکی و همچنین نمایش تصویر را انجام میدهیم.

void setup(){
  delay(500); // تاخیر 500 میلی ثانیه
  GLCD.Init(NON_INVERTED); // پیکربندی ال سی دی
  GLCD.ClearScreen(); 
  GLCD.DrawBitmap(ArduinoIcon, 32,0, BLACK); //رسم تصویر
  GLCD.SelectFont(System5x7); // تغییر فونت
  countdown(5); 
  GLCD.ClearScreen();
  introScreen();              // نمایش بعضی از موارد
  GLCD.ClearScreen();
}

تابع intro Screen به شکل زیر است:

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
void introScreen(){
  GLCD.SelectFont(Arial_14); // تعیین فونت
  GLCD.GotoXY(20, 2); // تعیین مکان
  GLCD.Puts("GLCD version "); // نمایش متن
  GLCD.PrintNumber(GLCD_VERSION);
  GLCD.DrawRoundRect(16,0,99,18, 5, BLACK); // رسم مستطیل
  GLCD.SelectFont(System5x7); // تغییر فونت
  showCharacters();
  countdown(5);
}

تابع showCharacters برای نمایش کاراکتر استفاده میشود به شکل زیر است:

void showCharacters(){
  byte line = 3; //شروع از خط چهارم
  for(byte c = 32; c <=127; c++){
     if( (c-32) % 20 == 0)
         GLCD.CursorTo(1,line++); // تغییر مکان
     GLCD.PutChar(c); 
  }   
}

تابع drawSpinner برای رسم استفاده میشود و به شکل زیر است:

void drawSpinner(byte pos, byte x, byte y) { 
  // یک شکل رسم میشود و چرخانده میشود
  switch(pos % 8) {
  case 0 : GLCD.DrawLine( x, y-8, x, y+8, BLACK); break;
  case 1 : GLCD.DrawLine( x+3, y-7, x-3, y+7, BLACK); break;
  case 2 : GLCD.DrawLine( x+6, y-6, x-6, y+6, BLACK); break;
  case 3 : GLCD.DrawLine( x+7, y-3, x-7, y+3, BLACK); break;
  case 4 : GLCD.DrawLine( x+8, y, x-8, y, BLACK); break;
  case 5 : GLCD.DrawLine( x+7, y+3, x-7, y-3, BLACK); break;
  case 6 : GLCD.DrawLine( x+6, y+6, x-6, y-6, BLACK); break; 
  case 7 : GLCD.DrawLine( x+3, y+7, x-3, y-7, BLACK); break;
  } 
}

تابع countdown به شکل زیر است و برای ایجاد شمارش معکوس استفاده میشود:

void countdown(int count){
    while(count--){ // انجام شمارش معکوس
     GLCD.CursorTo(0,1); // تنظیم موقعیت نمایش
     GLCD.PutChar(count + '0');
     delay(1000); 
  }  
}

حالا در قسمت loop کد اصلی و تکرار شونده پروژه را مینویسیم.

void loop(){ // تابع تکرار شونده
  iter = 0;
  startMillis = millis();
  while( millis() - startMillis < 1000){ // دوره برای یک ثانیه
    GLCD.DrawRect(0, 0, 64, 61, BLACK); // مستطیل در سمت چپ نمایشگر
    GLCD.DrawRoundRect(68, 0, 58, 61, 5, BLACK); 
    for(int i=0; i < 62; i += 4)
      GLCD.DrawLine(1,1,63,i, BLACK); // رسم خطوط
    GLCD.DrawCircle(32,31,30,BLACK); // رسم دایره
    GLCD.FillRect(92,40,16,16, WHITE); // پاک کردن چرخنده قبلی
    drawSpinner(loops++,100,48);       // رسم چرخنده جدید
    //GLCD.FillRect(24,txtLINE3,14,14, WHITE); // پاک کردن مکان قرار گرفتن متن
    GLCD.CursorTo(5,5); // تنظیم موقعیت متن
    GLCD.PrintNumber(++iter); //قرار دادن متن
  } 
  GLCD.ClearScreen(); // پاکسازی نمایشگر
  GLCD.CursorTo(14,2); // موقعیت متن
  GLCD.Puts("FPS= "); // نمایش یک رشته
  GLCD.PrintNumber(iter); // نمایش عدد 
}

موارد موجود در فایل : کتابخانه های مورد نیاز

4 (3 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

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

2 نظر

  1. سلام نحوه اتصالات خیلی مبهمه من متوجه نشدم میشه توضیح بدید چجوری وصل کردین ؟

    1. سلام عزیز
      متن هایی که به رنگ مشکی نوشته شدند باید اتصال داده بشه مثلا R/W به پایه 8 برد آردوینو

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

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