خانه > آموزش > راه اندازی LCD کاراکتری با LPC1768 در مد 8 بیتی

راه اندازی LCD کاراکتری با LPC1768 در مد 8 بیتی

در مطلب قبل تحت عنوان آشنایی با LCD کاراکتری در مورد انواع LCD های کاراکتری و نحوه عملکرد آن ها و همچنین دستورالعمل های مختلف آن آشنا شدیم. در این مطلب با نحوه اتصال نمایشگر کاراکتری با میکروکنترلر LPC1768 در مد 8 بیتی به همراه چند مثال کاربردی آشنا خواهیم شد.

فرستادن دستور به نمایشگر

در مطلب آشنایی با LCD کاراکتری با دستورالعمل های نمایشگرهای کاراکتری آشنا شدیم. چون در این مطلب به طور مکرر با این کدهای دستورالعمل نیاز داریم مجددا جدول این کدها را در اینجا می آوریم:

lpc1768-lcd-8bit-1
برای بزرگنمایی روی تصویر کلیک نمایید

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

1- پایه RS را صفر منطقی کنیم.

2- پایه RW را صفر منطقی کنیم.

3- کد دستور را بر روی پایه­ های D0 تا D7 قرار دهیم.

4- یک لبه بالا به پایین روی پایه E ایجاد کنیم.

5- به میزان لازم مکث کنیم تا اجرای دستور تکمیل گردد.

نکته: در هنگام ایجاد لبه بالا به پایین باید توجه داشته باشیم عرض پالسی که روی پایه E ایجاد می کنیم از 1 میکروثانیه کمتر نباشد به عبارتی پس از 1 کردن پایه E یک مکث 1 میکروثانیه ای ایجاد کرده و سپس آن را 0 نماییم.

نکته: همان طور که در مطلب آشنایی با LCD کاراکتری اشاره شد تمامی دستورالعمل ها در کمتر از 50 میکروثانیه اجرا می شوند به جز دستورالعمل پاک کردن صفحه نمایش و برگشت به ابتدای نمایشگر.

فرستادن داده به نمایشگر

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

– پایه RS را یک منطقی کنیم.

2- پایه RW را صفر منطقی کنیم.

3- کد اسکی کاراکتر مورد نظر را بر روی پایه­ های D0 تا D7 قرار دهیم.

4- یک لبه بالا به پایین روی پایه E ایجاد کنیم.

5- به میزان لازم مکث کنیم تا فرستادن کاراکتر انجام گیرد.

راه­ اندازی نمایشگر کاراکتری

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

lpc1768-lcd-8bit-21
برای بزرگنمایی روی تصویر کلیک نمایید

بیت هایی که با * مشخص شده اند بیت های بی اهمیت می باشند(مهم نیست 0 باشند یا 1).

اتصال نمایشگر به میکروکنترلر در مد 8 بیتی

در اینجا می خواهیم یک LCD کاراکتری16*2  را به میکروکنترلر LPC1768 متصل کرده و پیغام های دلخواه خود را روی آن نمایش دهیم. به مثال زیر توجه نمایید.

مثال: برنامه­ ای بنویسید که عبارت “SALAM” را در سطر دوم و ستون 5 از نمایشگر نمایش بدهد. برای راه­ اندازی صفحه نمایش، فرستادن دستور، فرستادن داده، پاک کردن صفحه نمایش و جابجایی مکان نما توابعی جداگانه بنویسید. فرض کنید که نمایشگر به صورت شکل زیر به میکروکنترلر متصل شده است:

lpc1768-lcd-8bit-31

حل: ابتدا برنامه را آورده و سپس آن را توضیح می دهیم.

این برنامه از تعدادی تابع تشکیل شده است که به اختصار توضیح می دهیم:

تابع (void lcd_cmd(uint8_t cmd: ارسال دستورالعمل به نمایشگر

همان طور که از نام تابع مشخص است این تابع یک عدد بدون علامت 8 بیتی دریافت کرده و چیزی برنمی گرداند. ورودی این تابع همان کد دستورالعملی هست که باید به نمایشگر فرستاده شود. این تابع با انجام مراحلی که برای ارسال دستورالعمل ابتدای همین مطلب توضیح داده شد یک کد دستوری را به نمایشگر فرستاده و در نهایت 500 میکروثانیه تا اجرای کامل دستور مکث می کند. دقت کنید که جهت احتیاط و اینکه ممکن است این برنامه برای کلاک های مختلفی اجرا شود مکث های برنامه بیش از مقدارلازم در نظر گرفته شده اند.

تابع (void lcd_putchar(uint8_t data: ارسال کاراکتر به نمایشگر

این تابع یک کد اسکی دریافت کرده و آن را طبق مراحل فرستادن داده به نمایشگر که در ابتدای همین مطلب توضیح داده شد برای نمایش به LCD می فرستد. لازم به یادآوری است که در زبان C نیاز به حفظ کردن کدهای اسکی نیست و برای بدست آوردن کدهای اسکی فقط کافیست کاراکتر مورد نظر را در بین دو عدد کاراکتر نقل قول(‘)  قرار دهیم برای مثال کد اسکی کاراکتر A برابر است با ‘A’ .

تابع ()void lcd_clear : تابع پاک کردن نمایشگر

توجه نمایید که میزان مکث لازم برای دستورالعمل پاک کردن صفحه نمایش بیش از دیگر دستورات است. هرچند که در اینجا نیز به طور محافظه کارانه ای میزان مکث از مقدار لازم بیشتر در نظر گرفته شده است.

تابع (void lcd_init(void : راه اندازی نمایشگر

این تابع بر طبق فلوچارت راه اندازی نمایشگر دستورالعمل های مورد نیاز برای راه اندازی را  با فراخوانی تابع ()lcd_cmd به نمایشگر می فرستد.

تابع (void lcd_gotoxy(uint8_t row,uint8_t col : بردن مکان نما به سطر و ستون دلخواه

این تابع با دریافت دو پارامتر سطر و ستون مکان نما را به محل دلخواه انتقال می دهد. لازم است دقت شود که شماره گذاری سطر و ستون در این تابع از صفر شروع می شود.

در تابع main هم ابتدا با فراخوانی تابع ()lcd_init نمایشگر راه اندازی شده و سپس با دستور (lcd_gotoxy(1,4  مکان نما به سطر دوم و ستون پنجم برده می شود و در ادامه نیز کاراکتر های کلمه SALLAM پشت سر هم به نمایشگر فرستاده می شوند.

نمایش رشته ها به صورت یکجا

برای نمایش پیام های مشخص بر روی LCD با این روش باید کاراکترهای پیام خود را به صورت کاراکتر به کاراکتر به نمایشگر بفرستیم. این کار باعث طولانی شدن برنامه می شود. روش راحت تر این است که کل پیام را به صورت یک جا بفرستیم. برای این کار بهتر است که ابتدا پیام مورد نظر را در داخل یک رشته ذخیره کنیم.  همانطور که می دانید رشته، آرایه ای از کاراکترهاست که با کارکتر NULL یا ‘0\’ پایان می یابد. برای مثال می توان پیام SALLAM را به صورت زیر در داخل رشته disp ذخیره کرد:

کارکتر ‘0\’  برای مشخص کردن انتهای رشته می باشد. به صورت راحت تر می توان این رشته را به صورت زیر تعریف کرد:

در این صورت به صورت خودکار کامپایلر کاراکتر ‘0\’ را در انتهای رشته اضافه می کند. می توان مثل آرایه ها به هر یک از درایه های این رشته دسترسی داشت. برای مثال [disp[0 برابر است با ‘A’. حال می توان به سادگی با تعریف یک تابع به نام ()lcd_puts به صورت زیر به صورت یکجا این رشته را نمایش داد:

اگر با اشاره گرها در زبان C آشنایی ندارید مطلب اشاره گرها در زبان C را مطالعه بفرمایید. با استفاده از این تابع کافیست به سادگی آدرس شروع این رشته را به عنوان آرگومان به تابع بدهیم یعنی آدرس [disp[0 را:

با این کار این تابع در داخل یک حلقه for تا رسیدن به انتهای رشته که با ‘0\’ مشخص شده است هر بار یکی به اشاره گر افزوده و محتویات داخل آدرس را بر روی نمایشگر نمایش می دهد. البته در زبان C با آوردن فقط نام آرایه به تنهایی می توان به آدرس اولین درایه اشاره کرد یعنی [disp[0& با disp فرقی نمی کند پس می توان به صورت زیر نیز تابع disp را فراخوانی کرد:

هرچند که برای نمایش پیام های مشخص مثل SALLAM لازم به تعریف رشته نیز نمی باشد و به طور ساده زیر هم می توان عمل نمود!

نمایش متغیرها

مسئله دیگری که وجود دارد این است اگر بخواهیم مقدار یک متغیر را نمایش دهیم باید چه کار کنیم؟ یعنی مثلا یک متغیر i در برنامه وجود دارد که یک شمارنده است و در طی برنامه تغییر می کند. حال می خواهیم مقدار این متغیر را نمایش دهیم. برای این کار می توانیم از دستور ()sprint در کتابخانه stdio.h استفاده کنیم.

دستور ()sprint:

برای درک عملکرد ()sprint به مثال زیر توجه نمایید:

بعد از اجرای این تابع چیزی که در داخل متغیر disp قرار می گیرد به صورت زیر است:

 lpc1768-lcd-8bit-4 sprintfاین تابع محتویات داخل دو عدد کوتیشن (“) را به صورت رشته در داخل متغیر رشته ای disp ذخیره می کند. تنها نکته ای که وجود دارد علامت % است. تابع ()sprint به این علامت حساس است! وقتی به این کاراکتر می رسد خود این کاراکتر را داخل disp ذخیره نمی کند بلکه نگاه می کند که به کاراکتر بعد از آن که در اینجا d هست. می فهمد که یک متغیر از نوع عدد صحیح را باید در داخل خانه بعدی disp ذخیره کند. چه متغیری را؟ متغیری که بعد از کوتیشن می آید: در اینجا i. همین! با این کار کد اسکی ارقام i در خانه های بعدی disp ذخیره می شوند. به طور خودکار این تابع آخر رشته را با 0\ می بندد. به تفاوت کد اسکی رقم 0 با کد اسکی 0\ دقت نمایید. حال کافیست با استفاده از تابع ()lcd_puts رشته disp را فراخوانی نماییم.

کاراکتر d در اینجا مشخص کننده نوع متغیر می باشد و در زبان c می توان از انواع مختلفی استفاده کرد که در جدول زیر آورده شده است:

lpc1768-lcd-8bit-5

خوب امیدوارم که این مطلب براتون مفید بوده باشه. اما حتما مطلب ارتباط با LCD کاراکتری در مد 4 بیتی رو هم مطالعه بفرمایید.

موفق باشید. یاعلی.

درباره ی مدیر سایت

۲ دیدگاه

  1. سلام.خسته نباشید.اگر پایه های LCD رو به پین های متفاوتی از میکرو وصل کرده باشیم باید چکاری کنیم ؟

پاسخ دهید

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