به نام خدا سلام خدمت دوستان! امروز براتون آموش نمایش متن و ساعت در ال سی دی کاراکتری رو آماده کردم! خیلی آموش کامل و خوبیه و از سایت 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 در کدویژن

نحوه تنظیم lcd در کدویژن(روی تصویر برای بزرگنمایی کلیک کنید)

حال باید فایل کتابخانه ای ال سی دی را به پروژه اضافه کنید:


#include <mega32.h>
#include <alcd.h> //فایل کتابخانه ال سی دی کارکتری
void main (void){
 
}


حال باید با چند تابع آشنا شوید:

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 ال سی دی استفاده نمی شود برای بستن ال سی دی از مدار زیر استفاده کنید:

نحوه اتصال LCD

نحوه اتصال LCD

 #include <mega32.h>

#include <delay.h>
#include <alcd.h> //فایل کتابخانه ال سی دی کارکتری
void main (void){
lcd_init(16); //تابع اصلی برای راه اندازی ال سی دی 16 ستونه
lcd_clear(); // پاک کردن صفحه
lcd_putsf("The Name OF GOD ");//نوشتن یک متن با حداکثر 16 کاراکتر
lcd_gotoxy(0,1);//انتقال مکان نما به سطر دوم و ستون اول
lcd_putsf("   WWW.AGD.IR");
}

مثال بعدی:


#include <mega32.h>
#include <delay.h>
#include <stdio.h> //کتابخانه ای برای کار با رشته ها بعدا توضیح داده خواهد شد
#include <alcd.h> //فایل کتابخانه ال سی دی کارکتری
void main (void){
int i;
char b[16]; //یک متغیر 16 کارکتری تعریف کردیم
 
lcd_init(16); //تابع اصلی برای راه اندازی ال سی دی 16 ستونه
lcd_clear(); // پاک کردن صفحه
lcd_putsf("The Name OF GOD ");//نوشتن یک متن با حداکثر 16 کاراکتر
delay_ms(1000);
lcd_clear();
i=15;
sprintf(b,"i =%d",i);//این دستور مربوط به کتابخانه رشته هاست و در جلسات آینده توضیح داده خواهد شد
lcd_puts(b); // متغییر رشته ای را بر روی ال سی دی نمایش می دهیم
}


در مثال بلا همه چیز گویاست بجز خط 3 و 15 که جدید هستند.در خط 3 کتابخانه ای به برنامه اضافه شده که برای کار با متغییر های رشته ای است(منظور از رشته متغییر های غیر عددی مانند حروف الفبا) این کتابخانه که بعدا در موردش توضیح داده خواهد شد برای برش دادن یا اضافه کردن یا … برای اعمال تغییرات بر روی متغییر های رشته ای است.در اینجا یک تابع از این کتابخانه در خط 15 استفاده شده است چون نمی توان مستقیما متغییر i را بر روی ال سی دی نشان داد آن را تبدیل به یک متغییر رشته ای می کنیم که بدین صورت می باشد:

sprintf(متغییر عددی,متن دلخواه,متغییر رشته ای);

تابع بالا متغییر عددی را در قسمت دلخواه متن دلخواه قرار داده و در متغییر رشته ای ذخیره می کند که در مثال بالا متغیر i را بجای d% قرار داده و در متغییر 16 کارکتری b ذخیره می کند. بجای متن دلخواه در مثال بالا از هر متنی می توانید استفاده کنید فقط در هر جایی از متن که می خواهید متغییر i نمایش داده شود باید d% بنویسید یک نمونه دیگر:


sprintf(b,"test %d lcd.",i);


در جلسات آینده در مورد این توابع توضیح داده خواهد شد.

دانلود فایل شبیه سازی پروتئوس و پروژه مثال دوم  ( لینک کمکی )

مثال 3:

ساخت یک تایمر ساده با ال سی دی


#include <mega32.h>
#include <delay.h>
#include <stdio.h> //کتابخانه ای برای کار با رشته ها بعدا توضیح داده خواهد شد
#include <alcd.h> //فایل کتابخانه ال سی دی کارکتری
void main (void){
int s=0,m=0,h=0;//متغییر ساعت دقیقه و ثانیه
char b[16]; //یک متغیر 16 کارکتری تعریف کردیم
 
lcd_init(16); //تابع اصلی برای راه اندازی ال سی دی 16 ستونه
lcd_clear(); // پاک کردن صفحه
lcd_putsf("The Name OF GOD ");//نوشتن یک متن با حداکثر 16 کاراکتر
delay_ms(1000);
lcd_clear();
    while(1){ // حلقه بی نهایت
        s++; // اضافه کردن به ثانیه
        if(s>59){m++;s=0;}
        if(m>59){h++;m=0;}
        if(h>23){h=0;m=0;s=0;}
        sprintf(b,"%d:%d:%d      ",h,m,s);//فرم دهی به متغییر ها
        lcd_gotoxy(0,0);//انتقال مکان نما به سطر و ستون اول
        lcd_puts(b);// نمایش ساعت
        delay_ms(1000);//یک ثانیه تاخیییییییر
        //چون خود میکرو دارای تاخیر می باشد برای دقت بیشتر تاخیر
        //فوق را کم و زیاد کنید اصولا باید مقداری کمتر از 1000 داشته باشد
    }
}


در مثال بالا در خط 19 می خواهیم متغییر ها را تبدیل به رشته کرده و فرم دهی کنیم تا در بین هر عدد : نشان داده شود باز به جای هر متغییر از d% استفاده می کنیم و در پایان به تعداد d% ها متغییر ها را به ترتیب قرار می دهیم که اول  h نمایان گر ساعت m برای دقیقه و s برای ثانیه در تابع قرار می دهیم .در ضمن در قسمت متن دلخواه چند عدد space یا خط فاصله زده شده تا ساعت در هنگام افزایش و کاهش درست نمایش داده شود

“%d:%d:%d            “

در صورتی که متوجه نمی شوید منظور چیست، مقدار فاصله فوق را حذف کرده سپس برنامه را کامپایل کرده و در پرتئوس اجرا کرده و منتظر باشید 59 ثانیه بگذرد تا ببینید چه اتفاقی خواهد افتاد.

در خط 20 نیز مکان نما را به سطر و ستون اول یا صفر ال سی دی بر می گردانیم می توانید این دستور را حذف کنید تا ببینید چه اتفاقی رخ خواهد داد یا می توانید از تابع lcd_clear() به جای آن استفاده کنید این عملیات را انجام دهید تا یاد بگیرید ولی در نهایت همان دستور انتقال مکان نما بهتر جواب می دهد

دانلود این پروژه (فایل شبیه سازی پروتئوس و پروژه)   (لینک کمکی)

تمرین: به پروژه فوق سه کلید برای تنظیم ثانیه و دقیقه و ساعت اضافه کنید.


منبع: agd.ir

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