راه اندازی ال سی دی گرافیکی با AVR و نمایش فونت فارسی به زبان c

راه اندازی ال سی دی گرافیکی

ال سی دی های گرافیکی یک نمایشگر مناسب برای نمایش متن و تصاویر میباشند (حتی متن فارسی) و در پروژه های الکترونیک و برنامه نویسی پروژه های میکروکنترلر AVR جهت نمایش اطلاعات خروجی، بسیار پرکاربرد میباشند. ال سی دی های گرافیکی با توجه به تراشه پردازنده خود، که به آنها راه انداز یا درایور میگویند معرفی میشوند. راه انداز های LCD گرافیکی معمولا یا از نوع تراشه های T6963 ساخت شرکت توشیبا و یا KS0108 ساخت شرکت سامسونگ هستند که تراشه های KS0108 معمولا به صورت COB (تراشه قیری) روی برد LCD تعبیه شده اند.

بعد قبل
راه اندازی ال سی دی گرافیکی با AVR و نمایش فونت فارسی به زبان c
راه اندازی ال سی دی گرافیکی با AVR و نمایش فونت فارسی به زبان c
راه اندازی ال سی دی گرافیکی با AVR و نمایش فونت فارسی به زبان c
بعد قبل

ال سی دی های گرافیکی با تراشه KS0108

ال سی دی های گرافیکی با تراشه KS0108 قابلیت تعریف فونت را دارند و هر کدام از این تراشه ها توانایی راه اندازی یک LCD گرافیکی 64*64 را دارند به این معنا که یک LCD گرافیکی 64*128 دارای دو تراشه KS0108 میباشد.از آنجاییکه در این پروژه قصد داریم فونت فارسی را روی ال سی دی نمایش دهیم از یک ال سی دی گرافیکی 64*128 با درایور KS0108 استفاده میکنیم.در کل هدف ما در این پروژه این است که یک ال سی دی گرافیکی را با میکروکنترلر ATMEGA32 راه اندازی کنیم و دستورات مربوط به برنامه نویسی این پروژه و نمایش متن فارسی و تصویر را با زبان برنامه نویسی C در محیط نرم افزار Code-Vision-AVR به شما عزیزان آموزش دهیم.

نقشه شماتیک راه اندازی LCD گرافیکی با میکروکنترلر AVR

شکل زیر سخت افزار مربوط به یک مدار ساده صرفا جهت راه اندازی و نمایش متن و تصویر روی ال سی دی گرافیکی میباشد.

نقشه شماتیک راه اندازی LCD گرافیکی با میکروکنترلر AVR

راه اندازی و پیکربندی LCD گرافیکی به زبان C

حال به بحث برنامه نویسی AVR جهت راه اندازی اولیه ال سی دی گرافیکی ، با زبان برنامه نویسی c در کدویژن میپردازیم:

برنامه کدویژن را اجرا کرده و از کدویزارد استفاده میکنیم و نوع میکرو و فرکانس کاری را مشخص میکنیم،وارد تب Graphic Display میشویم و نوع ال سی دی که استفاده میشود و در اینجا مدل KS0108 128*64 CS1,CS2 میباشد را انتخاب میکنیم و نحوه اتصال پین های ال سی دی گرافیکی به پین های میکروکنترلر را نیز تعیین میکنیم. سپس در همین صفحه کدویزارد از منوی Program گزینه Generate,save and exit را انتخاب میکنیم و سه اسم مشابه نیز انتخاب کرده و یک مسیر برای ذخیره اطلاعات برنامه انتخاب میکنیم و در نهایت کدی که کدویزارد برای ما درست میکند(البته کدهایی که لازم نبود را حذف کرده ایم)  به شکل زیر خواهد بود:

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

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

شما با استفاده از کتابخانه های فونت خود کدویژن یا کتابخانه های فونت به فرمت باینری در اینترنت، هر فونتی را می توانید در ال سی دی گرافیکی استفاده کنید و در این پروژه هدف ما استفاده از فونت فارسی بوده و نه font5x7.h . خط 18 و خط 19 دو خاصیت از ساختمان GLCDINIT_t را نشان می دهد. اولی برای خواندن دیتا از حافظه خارجی در ابتدای کار است و دومی برای نوشتن در حافظه خارجی. ما هر دو این خاصیت ها را برابر NULL دادیم. اما اگر شما این مورد را نیاز دارید، در خطوط 4 و 10 دو تابع تعریف شده است که یک آرگومان از نوع ساختمان GLCDMEMADDR_t می گیرند که این دو تابع را میتوان به جای NULL قرار داد.در صورتیکه میخواهید مقدار را برابر NULL قرار دهید،میتوانید کلا از نوشتن آنها صرفنظر کنید.

حال برای اینکه بتوانیم روی ال سی دی بصورت مستقیم فارسی بنویسیم دو پوشه Graphic و FONT را در همانجاییکه فایل های برنامه را ذخیره کرده ایم کپی میکنیم که لینک دانلود این دو فایل را در انتهای همین پروژه در اختیار شما قرار میدهیم و برای فارسی نوشتن ضروری می باشند. سپس در برنامه کدویژن از منوی Project گزینه Configure را انتخاب میکنیم و در پنجره باز شده و تب Input file گزینه Add را انتخاب میکنیم و باید وارد همان دو پوشه ای که در مسیر نصب برنامه کپی کردیم بشویم و دو فایل Font.c و Graphic.c را به برنامه اضاف کنیم.

فراخوانی فونت در برنامه

حال برای اینکه بتوانیم از فونت فارسی نیز استفاده کنیم به برنامه بالا کدهایی را باید اضاف کنیم. در درجه اول فایل های سرآیند مربوط به FONT و Graphic را که در برنامه کپی کرده بودیم اضاف میکنیم و در انتهای قسمت void main برنامه با دستور  ;()LcdFont نوع فونت ، با دستور ;()SetLetter زبان نوشتن را انتخاب میکنیم و با دستور ;()LcdFontSpace فاصله بین حروف را مشخص میکنیم و کدهای خط 5،6،7 و 8 مربوط به نوع فونت میباشند

تا به اینجا نحوه راه اندازی و اضاف کردن فونتها را آموختیم حال به چگونگی نمایش فونت فارسی و تصاویر میپردازیم.برای کار کردن با ال سی دی یکسری توابع و دستورات در فایل کتابخانه ای glcd.h آمده است و تعدادی تابع و دستور نیز برای نمایش متن فارسی در فایل هایی که خودمان به برنامه اضاف کردیم وجود دارد که در مثال زیر نحوه استفاده از آن مشخص شده است.برای نمایش تصاویر نیز را ه های مختلفی وجود دارد که ما روش زیر را پیشنهاد میکنیم:

آماده سازی تصویر جهت نمایش در LCD گرافیکی

ابتدا در مسیر نصب برنامه یک پوشه برای ذخیره تصاویر ایجاد میکنیم. از نرم افزار LCDVISION خود کدویژن استفاده میکنیم به این ترتیب که از منوی Tools گزینه LCDVISION را انتخاب میکنیم، اگر بخواهیم بصورت دستی خودمان تصویری را طراحی کنیم از منوی File گزینه New Image را انتخاب میکنیم و در پنجره باز شده نوع LCD را مشخص میکنیم که در اینجا KS0108 128*64 CS1,CS2 می باشد و همچنین اندازه تصویرمان را نیز بر حسب پیکسل تعیین میکنیم و بعد از طراحی تصویر از منوی File گزینه Save as را انتخاب کرده و تصویر را با فرمت bmp. در پوشه ای که برای ذخیره تصاویر در مسیر نصب برنامه ایجاد کرده بودیم، ذخیره میکنیم.

حال از منوی فایل گزینه Import image را انتخاب کرده و تصویری را که ذخیره کرده بودیم باز میکنیم و یا اگر از قبل تصویر را با فرمت bmp. بصورت آماده داریم،آن را باز میکنیم.حال از منوی File گزینه Export را انتخاب میکنیم سپس بار دیگر از منوی File اینبار گزینه Save Export را انتخاب کرده و در پیج باز شده C Source Code را انتخاب میکنیم و برای نامگذاری آن نیز از همان نام قبلی استفاده میکنیم و به این ترتیب روند ایجاد تصویر را تکمیل کرده ایم.

نمایش تصویر در LCD گرافیکی

حال تنها چیزی که باقی میماند نحوه نمایش آن بر روی LCD میباشد که برای اینکار نیز به این صورت عمل میکنیم که در مرحله اول باید با استفاده از دستور include آدرس و نام عکس را وارد کرد.بعنوان نمونه در این مثال ما در مسیر نصب برنامه یک پوشه به اسم image برای نگهداری تصاویر ایجاد کرده بودیم و تصویرمان را با نام elec98 در این پوشه ذخیره کرده بودیم،بنابراین کدی که برنامه باید اضاف کنیم:

و حال برای نمایش عکس نیز از دستور زیر استفاده خواهیم کرد:
که X و Y موقعیت سطر و ستون نمایش عکس،image نام تابع نمایش عکس است که برای فهمیدن آن باید فایل هگز عکس را باز کرد و mode نیز مربوط به حالت نمایش عکس میباشد که معمولا GLCD_PUTOR انتخاب میشود.

نحوه نمایش متن فارسی در LCD گرافیکی

برای نمایش متن فارسی بصورت ساده نیز از دستور زیر استفاده میشود:

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

که در آن SetBkColor مربوط به رنگ پس زمینه و SetFgColor مربوط به رنگ نوشته و X0 و Y0 مربوط به مختصات بالا و سمت راست کادر نوشته و X1 و Y1 مربوط به مختصات پایین و سمت چپ کادر نوشته میباشد و ALINE_RIGHT OR LEFT OR CENTER مریوط به این است که نوشته در کجای کادر قرار بگیرد و bv1 1 or 2 or 3 نیز مربوط به شکل کادرها میباشد و در نهایت برنامه ما بصورت زیر خواهد شد که با کمی مطالعه میتوانید در بحث راه اندازی ال سی دی گرافیکی و نمایش فونت فارسی و تصاویر در آن مسلط شوید.

ویدیو ضبط شده از عملکرد پروژه

 اطلاعات پروژه

 رمز فایل : www.electronics98.com

 حجم فایل : 438 کیلوبایت

 محیط برنامه نویسی : کد ویژن - CodeVisionAVR

 برنامه نویسی شده به زبان : C

 نویسنده : فرهاد اکبری

 تاریخ انتشار : 9 فوریه 2018

11 دیدگاه

  1. سلام و خسته نباشید خدمت تمامی دوستان و تشکر از آقای نور بخش بابت کتابخانه خیلی مفیدشان
    با اجازه آقای نور بخش:
    در این کتابخانه حرف “ک” به درستی تعریف نشده و مشکل داره
    برای رفع این مشکل بنده راهی پیدا کردم و کد کوتاهی به برنامه اضافه کردم و مشکل به زیبایی حل شد.
    دوستانی که میخوان این مشکل براشون حل بشه طبق روند ذیل کد نویسی کنید:
    در تابع PutsPE (برای من خط 506) در کتابخانه Font.c در دستور switch(curnLet) انتهای دستور کد زیر را وارد کنید:
    :case 0x98
    ;curnLet =0xDF
    :break
    و همینطور در دستور switch(nextLet) گد زیر را وارد کنید:
    ;case 0x98
    ;nextLet =0xDF
    :break

  2. با سلام.
    ممنون از سایت خوبتون.
    یک سوال داشتم.
    موقعی که میخوام شبیه سازیو پیاده سازی کنم موقع اجرا این ارورو میده بهم:
    Non-existent pin [] specified by [INVERT]. [LCD1_U2]

    تو اینترنت سرچ کردم چیزی دستگیرم نشد.
    با اینکه تصلا U2 وجود نداره.
    مشکل از کجاس؟

  3. سلام. لطفا همین برنامه نویسی رو به زبان بسکام قرار بدید. با تشکر.

  4. سلام دوست عزیز
    می توانید از آموزش زیر استفاده کنید:
    آموزش راه اندازی و نوشتن متن فارسی در LCD گرافیکی با AVR

  5. خیلی ممنون از لطفتون. مطلب مفیدی بود.

  6. لطفا اگه میشه برنامه نویسی راه اندازی buzzer به زبان بسکام رو قرار بدید.

  7. لینک دانلود مشکل داره چک کنید لطفا

  8. سلام دوست عزیز
    لینک دانلود بررسی گردید و مشکلی یافت نشد. لطفا در صورتیکه از ابزار تغییر آی پی استفاده می کنید آنرا غیر فعال کنید و یا از یک سرویس دهنده اینترنت دیگر جهت دانلود فایل استفاده کنید.

  9. سلام.
    خیلی تشکر از سایت خوبتون.امیدوارم موفق باشید.

  10. فرهاد اکبری

    با سلام و احترام
    ممنون از لطف و محبت شما

  11. من میخام نمایشگرم رو به پورت دیگه ای بزنم
    پین ها رو کجای برنامه دیفاین کردین که پیدا نیست ؟

 شرایط و قوانین ثبت دیدگاه

 فارسی بنویسید و از کیبورد فارسی استفاده کنید.

 لطفاً بیش‌از‌حدِ معمول، شکلک یا ایموجی استفاده نکنید و از کشیدن حروف یا کلمات با صفحه‌کلید بپرهیزید.

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

 از ارسال لینک‌های سایت‌های دیگر و ارایه‌ی اطلاعات شخصی خودتان مثل شماره تماس، ایمیل و آی‌دی شبکه‌های اجتماعی پرهیز کنید.