راه اندازی GLCD

شنبه 29 شهرویور 1393  •  دسته بندی: پروژه های آماده با میکروکنترلر AVR  •  بازدیدها: 7640  •  برچسب ها: | |

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

سخت افزار مورد استفاده: در این مقاله ما از برد آموزشی avr نامینیک مبتنی برتراشه ATMEGA32 استفاده می کنیم. در روی برد، هدر شماره 20 برای ال سی دی گرافیکی در نظر گرفته شده است. این هدر پین های 0 تا 5 پورت d و کل پورت c را در بر گرفته است. یعنی جمعا 14 پین. این مثال برای تمام ال سی دی های گرافیکی که با تراشه ks0108b درایو می شوند کار می کند. به زبان ساده تر همان ال سی دی های موجود در بازار! مثلا ال سی دی LG128643 یا TSM12864E. این تراشه (ks0108b) معروف بوده و ال سی دی های زیادی از آن یا  کپی شده آن استفاده می کنند و بیشتر برای راه اندازی ال سی دی های ماتریسی 128 در 64 نقطه ای استفاده می شود.

کتابخانه های استفاده شده: کتابخانه های جدید دو کتابخانه در خط 8 و 12 هستند. در کتابخانه glcd.h توابعی برای راحت تر کار کردن با ال سی دی تعریف شده و کتابخانه font5x7.h فونت استفاده شده برای نمایش کاراکتر ها است. دقت کنید که ال سی دی های گرافیکی مانند ال سی دی های کاراکتری نیستند و از قبل درون حافظه خود فونتی ندارند. ما در این مثال از یک فونت ساده که هر کاراکتر را در یک مستطیل 5 در 7 نقطه ای نشان می دهد، استفاده کردیم. شما با استفاده از کتابخانه های فونت خود کدویژن یا کتابخانه های فونت به فرمت باینری در اینترنت، هر فونتی را می توانید در ال سی دی گرافیکی استفاده کنید.

تشریح کد: برای شروع کار باید یک نمونه از ساختمانی به نام GLCDINIT_t تعریف کنیم. ما نام این نمونه را glcd_init_data نهاده ایم ( خط 36). وظیفه این ساختمان نگه داری تنظیمات اولیه برای راه اندازی ال سی دی است. حال خاصیت فونت glcd_init_data را با مساوی font5x7 قرار می دهیم (خط 57). در خط 60  و خط 63 دو خاصیت از ساختمان GLCDINIT_t را نشان می دهد. اولی برای خواندن دیتا از حافظه خارجی در ابتدای کار است و دومی برای نوشتن در حافظه خارجی. ما هر دو این خاصیت ها را برابر null دادیم. اما اگر شما این مورد را نیاز دارید، در خطوط 16 تا 30 دو تابع تعریف شده است که یک آرگومان از نوع ساختمان GLCDMEMADDR_t می گیرند. این دو تابع به جای null قرار می گیرند.

حال با صدا زدن تابع glcd_init در خط 65، ساختمان glcd_lnit_data را که مقدار دهی کرده بودیم به آن پاس می کنیم. تابع glcd_clear در خط 67 کل صفحه نمایش را پاک می کند. تابع glcd_outtextxyf یک متن را از محل داده شده نمایش می دهد. در خط 69 این تابع آدرس سایت نامینیک را از مختصات 20 (طول) و 20 دوم (عرض) نمایش می دهد. برنامه ما در اینجا به پایان می رسد اما یک سری توابع دیگر نیز وجود دارد. از جمله:

     تابع void   glcd_setfont( struct *font ): بعد از include فونت دلخواهتان، نام فونت تعریف شده در آن را به این تابع پاس کنید. مثلا برای کتابخانه  arial_bold14.h نام arial_bold14 را به تابع پاس کنید. این تابع هر جایی بعد از تابع glcd_init قابل صدا زدن است.

    تابع void   glcd_line( int x_start, int y_start, int x_end, int y_end ): این تابع یک خط در مختصات داده شده رسم می کند. دو نقطه اول مختصات شروع و دو نقطه بعدی مختصات پایان خط هستند.

    تابع  void   glcd_setlinestyle( int pixel_size, int line_style) : این تابع فقط برای اشکال گرافیکی است نه متون. تابع قبلی یک خط ممتد با قطر 1 پیکسل رسم می کرد. اگر خواستید خط، دایره، چند ضلعی یا هر چیز دیگری رسم کنید، با این تابع می توانید قطر خطوط و نوع آن مثلا نقطه نقطه بودن را تعیین کنید. با فراخوانی این تابع، تا وقتی در طول برنامه آن را دوباره فرا نخوانید، تنظیمات باقی می ماند. ضمنا یک سری تعاریف برای متغییر دوم تابع وجود دارد مثل GLCD_LINE_DOT_SMALL ، GLCD_LINE_DOT_LARGE ، GKCD_LINE_SOLID و غیره که بافت خط را تعیین می کنند.

   توابع void   setcolor( int pixel_color) و void   setbkcolor( int back_color) : این ال سی دی ها دو رنگ بیشتر ندارند. سیاه و سفید. آرگومان های هر دو تابع فقط مقدار 1 یا صفر را می پذیرند. 1 به معنی سیاه و صفر به معنی سفید است. تابع اول رنگ پیکسل هایی را که رسم می شوند عوض می کند و تابع دوم رنگ کل پس زمینه را. این دو تابع معمولا با هم صدا زده می شوند.

    توابع glcd_rectrel،  glcd_circle ،  glcd_arc ، glcd_rectround ، glcd_getimagee و glcd_putimagee : تابع اول یک مستطیل رسم می کند و 4 آرگومان دارد که به ترتیب دو تای اول مختصات شروع و دو تای دوم مختصات پایان مستطیل است. تابع دوم یک دایره رسم می کند و 3 آرگومان دارد. دوتای اول مختصات مرکز دایره و آرگومان سوم شعاع دایره است. تابع سوم یک کمان رسم می کند و 5 آرگوان دارد. 4 آرگومان اول برای نقطه شروع و پایان کمان، و آرگومان آخر شعاع منحنی  رسم شده بین دو نقطه تعیین شده. تابع سوم عین تابع اول است فقط یک مستطیل با گوشه گرد می کشد. یک آرگوان اضافه دارد که شعاع گوشه ها را مشخص می کند. تابع بعدی تصویر قسمتی از نمایشگر را در حافظه ای ذخیره می کند و 5 آرگومان دارد. با 4 آرگومان اول مختصات مستطیلی از صفحه نمایش را که باید ذخیره شود را تعیین می کنیم. آرگومان آخر، نام یک آرایه متغییری از نوع کاراکتر بدون علامت است که تصویر در آن ذخیره می شود. اگر می خواهید تصویر در حافظه خارجی ذخیره شود به ابتدای مقاله برگردید. و تابع آخر هم عکسی را از حافظه داخلی یا خارجی گرفته و در نمایشگر نشان می دهد.این تابع 4 آرگومان دارد. دو آرگومان اول مختصات شروعی است که عکس از آن نقطه نمایش داده می شود. آرگومان دوم نام متغییری است که عکس در آن ذخیره شده است و آرگومان سوم مشخص می کند تصویری که لود می شود منفی شود. توجه کنید عکسی را که می خواهید نمایش دهید حتما باید به فرمت ماتریسی پیکسل پیکسل یا bitmap بوده و برای استفاده در برنامه به آرایه تبدیل شده با شد. نرم افزار هایی برای تبدیل عکس های بیت مپ به آرایه وجود دارند مثل bitmap2lcd که هم تصویر و هم فونت را برای نمایش در ال سی دی تولید می کند. برای اطلاعات بیشتر و توابع دیگر ال سی دی گرافیکی به مثال های خود کدویژن و اینترنت مراجعه کنید.

/*****************************************************
                   WWW.NAMINIC.COM
*****************************************************/

#include <mega32.h>

// Graphic LCD functions
#include <glcd.h>

// Font used for displaying text
// on the graphic LCD
#include <font5x7.h>

// Function used for reading image
// data from external memory
unsigned char read_ext_memory(GLCDMEMADDR_t addr)
{
unsigned char data;
// Place your code here

return data;
}

// Function used for writing image
// data to external memory
void write_ext_memory(GLCDMEMADDR_t addr, unsigned char data)
{
// Place your code here

}

void main(void)
{
// Declare your local variables here
// Graphic LCD initialization data
GLCDINIT_t glcd_init_data;

// Graphic LCD initialization
// The KS0108 connections are specified in the
// Project|Configure|C Compiler|Libraries|Graphic LCD menu:
// DB0 - PORTC Bit 0
// DB1 - PORTC Bit 1
// DB2 - PORTC Bit 2
// DB3 - PORTC Bit 3
// DB4 - PORTC Bit 4
// DB5 - PORTC Bit 5
// DB6 - PORTC Bit 6
// DB7 - PORTC Bit 7
// E - PORTD Bit 2
// RD /WR - PORTD Bit 1
// RS - PORTD Bit 0
// /RST - PORTD Bit 5
// CS1 - PORTD Bit 3
// CS2 - PORTD Bit 4

// Specify the current font for displaying text
glcd_init_data.font=font5x7;
// No function is used for reading
// image data from external memory
glcd_init_data.readxmem=NULL;
// No function is used for writing
// image data to external memory
glcd_init_data.writexmem=NULL;

glcd_init(&glcd_init_data);

glcd_clear();

glcd_outtextxyf(20,20,"WWW.NAMINIC.COM");


while (1)
      {
      // Place your code here

      }
}

دانلود سورس کد

در  اینجا شما میتوانید سورس برنامه را دریافت ،کامپایل و پروگرم نمایید و شاهد عملکرد برنامه باشید.

با کلیک بر روی عکس زیر فیلم راه اندازی این پروژه را مشاهده کیند.

این مطلب را به اشتراک بگذارید:

در این باره 1 نظر وجود دارد، شما هم نظر خود را ثبت کنید.
نام:
ایمیل:
نظر:

تعداد کل نظرها: 1

سعید مقامی:
سه شنبه 31 شهرویور 1394 ساعت 17:41:35
سلام
جمع آوری و در دسترس قرار دادن مطالب بسیار ارزشمند بود .
موفق باشید