به نام خدا سلام خدمت دوستان! امروز براتون آموش نمایش متن و ساعت در ال سی دی کاراکتری رو آماده کردم! خیلی آموش کامل و خوبیه و از سایت agd.ir کپی کردم! امیدوارم مفید باشه براتون!
در این قسمت به آموزش راه اندازی lcd کاراکتری خواهیم پرداخت. برای راه اندازی این نوع ال سی دی ها از ارتباط موازی یا پارالل استفاده خواهیم کرد البته ال سی دی های دیگری هم وجود دارند که از ارتباط سریال برای راه اندازی آن استفاده می شوند که اغلب قیمت بالایی دارند.
ال سی دی های کارکتری اغلب دارای 14 پایه هستند که 8 پایه برای انتقال اطلاعات 3 پایه برای کنترل نرم افزاری یک پایه برای کنترل سخت افزاری و دو پایه تغذیه می باشد در جدول زیر اطلاعات پایه ها رو می توانید مشاهده کنید:
توضیحات |
نام |
پایه |
پایه (-) تغذیه |
vss |
1 |
پایه(+) تغذیه |
vcc |
2 |
کنترل درخشندگی صفحه |
VEE |
3 |
انتخاب دستور داده |
RS |
4 |
فعال ساز خواندن یا نوشتن |
R/w |
5 |
فعال ساز |
E |
6 |
دیتا |
DB0 |
7 |
دیتا |
DB1 |
8 |
دیتا |
DB2 |
9 |
دیتا |
DB3 |
10 |
دیتا |
DB4 |
11 |
دیتا |
DB5 |
12 |
دیتا |
DB6 |
13 |
دیتا |
DB7 |
14 |
پایه + روشنایی صفحه( +بک لایت) |
A |
15 |
پایه – روشنایی صفحه(- بک لایت) |
k |
16 |
در این قسمت از آموزش فقط به نحوه اتصال و راه اندازی LCD خواهیم پرداخت و به نحوه کارکرد و رجیستر های راه اندازی داخلی آن پرداخته نخواهد شد.
برای شروع یک پروژه جدید ایجاد کرده و ذخیره کنید (در مطالب قبلی نحوه ایجاد پروژه آموزش داده شده)
سپس از منوی Project > configure صفحه تنظیمات پروژه رو باز کنید در آنجا از تب C compiler به تب Libraries تب Alfanumeric LCD alcd.h رفته و تیک Enable Alfanumeric LCD support را بزنید با فعال کردن این گزینه منویی باز می شود که از شما می خواهد پایه های اتصال میکرو به ال سی دی را مشخص کنید چون در این پروژه از پورت A استفاده شده تغییری در نحوه اتصال پایه ها ندادیم در پایان ok را بزنید.
حال باید فایل کتابخانه ای ال سی دی را به پروژه اضافه کنید:
حال باید با چند تابع آشنا شوید:
lcd_init(lcd_columns);
این تابع باید در داخل تابع اصلی و قبل از همه توابع دیگر ال سی دی استفاده شود این تابع ال سی دی را آماده کار کرده و به جای lcd_columns باید تعداد ستون های ال سی دی وارد شود.
lcd_clear();
این تابع lcd را پاک کرده و مکان نما را در سطر و ستون صفر قرار می دهد.
lcd_gotoxy(x,y);
تابع فوق مکان نمای ال سی دی را در سطر x و ستون y قرار می دهد و باید به جای x و y عدد سطر و ستون مورد نظر جا گذاری شود.
lcd_putchar(c);
این تابع برای نمایس یک کارکتر بر روی ال سی دی استفاده میشود بجای c کارکتر مورد نظر قرار می گیرد
lcd_puts(str);
این تابع برای نمایش یک رشته که در حافظه SRAM در avr قرار دارد به کار میرود
lcd_putsf(str);
تابع فوق برای نمایش یک رشته در حافظه فلش استفاده می شود.
خوب حالا به نوشتن یک برنامه و نحوه بستن مدار می پردازیم:
در این پروژه از یک ال سی دی 2×16 استفاده می کنیم که براحتی در بازار قابل یافت می باشد که در رنگ های مختلف با نور صفحه یا بدون نور صفحه آن موجود است در نوع مجهز به نور پشت صفحه، ال سی دی دارای 2 پایه اضافی 15 و 16 است که به ترتیب پایه + و – نور صفحه می باشد که باید به ولتاژ 3 ولت یا با یک مقاومت 330 اهم یا 470 اهم به 5 ولت وصل شود.
پایه 3 یا VEE پایه تنظیم کنتراست تصویر است که معمولا به یک پتانسیومتر که یک سر پتانسومتر به ال سی دی پایه دیگر به خط منفی و پایه دیگر به مثبت وصل می شود وصل می کنند ولی بهترین کار استفاده از یک مقاومت 4.7کیلو اهم بین پایه VEE و خط منفی است.
در این پروژه و اغلب پروژه ها ال سی دی به صورت 4 بیتی راه اندازی می شود و به ندرت از حالت 8 بیتی استفاده می شود.در حالت 4 بیتی از پایه های 7 تا 10 ال سی دی استفاده نمی شود برای بستن ال سی دی از مدار زیر استفاده کنید:
#include <mega32.h>
مثال بعدی:
در مثال بلا همه چیز گویاست بجز خط 3 و 15 که جدید هستند.در خط 3 کتابخانه ای به برنامه اضافه شده که برای کار با متغییر های رشته ای است(منظور از رشته متغییر های غیر عددی مانند حروف الفبا) این کتابخانه که بعدا در موردش توضیح داده خواهد شد برای برش دادن یا اضافه کردن یا … برای اعمال تغییرات بر روی متغییر های رشته ای است.در اینجا یک تابع از این کتابخانه در خط 15 استفاده شده است چون نمی توان مستقیما متغییر i را بر روی ال سی دی نشان داد آن را تبدیل به یک متغییر رشته ای می کنیم که بدین صورت می باشد:
sprintf(متغییر عددی,“متن دلخواه“,متغییر رشته ای);
تابع بالا متغییر عددی را در قسمت دلخواه متن دلخواه قرار داده و در متغییر رشته ای ذخیره می کند که در مثال بالا متغیر i را بجای d% قرار داده و در متغییر 16 کارکتری b ذخیره می کند. بجای متن دلخواه در مثال بالا از هر متنی می توانید استفاده کنید فقط در هر جایی از متن که می خواهید متغییر i نمایش داده شود باید d% بنویسید یک نمونه دیگر:
sprintf(b,"test %d lcd.",i);
در جلسات آینده در مورد این توابع توضیح داده خواهد شد.
دانلود فایل شبیه سازی پروتئوس و پروژه مثال دوم ( لینک کمکی )
مثال 3:
ساخت یک تایمر ساده با ال سی دی
در مثال بالا در خط 19 می خواهیم متغییر ها را تبدیل به رشته کرده و فرم دهی کنیم تا در بین هر عدد : نشان داده شود باز به جای هر متغییر از d% استفاده می کنیم و در پایان به تعداد d% ها متغییر ها را به ترتیب قرار می دهیم که اول h نمایان گر ساعت m برای دقیقه و s برای ثانیه در تابع قرار می دهیم .در ضمن در قسمت متن دلخواه چند عدد space یا خط فاصله زده شده تا ساعت در هنگام افزایش و کاهش درست نمایش داده شود
“%d:%d:%d “
در صورتی که متوجه نمی شوید منظور چیست، مقدار فاصله فوق را حذف کرده سپس برنامه را کامپایل کرده و در پرتئوس اجرا کرده و منتظر باشید 59 ثانیه بگذرد تا ببینید چه اتفاقی خواهد افتاد.
در خط 20 نیز مکان نما را به سطر و ستون اول یا صفر ال سی دی بر می گردانیم می توانید این دستور را حذف کنید تا ببینید چه اتفاقی رخ خواهد داد یا می توانید از تابع lcd_clear() به جای آن استفاده کنید این عملیات را انجام دهید تا یاد بگیرید ولی در نهایت همان دستور انتقال مکان نما بهتر جواب می دهد
دانلود این پروژه (فایل شبیه سازی پروتئوس و پروژه) (لینک کمکی)
تمرین: به پروژه فوق سه کلید برای تنظیم ثانیه و دقیقه و ساعت اضافه کنید.
منبع: agd.ir
این سایت منبع که زدم خیلی سایت خوبیه چون همه مطالبش به صورت ساده و با مثال بیان شده میتونید برید تو سایتش ازش استفاده کنید....!