تئوری آزمایش :
در این آزمایش طرز استفاده از LCD و اتصال به میکروکنترلر آموزش داده شده است. مختصری درباره پایه های LCD شرح خواهیم داد.
Vcc : تغذیه LCD توسط این پایه تامین می گردد.
GND : زمین را به این پایه متصل می کنیم.
Vcontrast : توسط پتانسیومتر تعبیه شده درجه درخشندگی LCD را تعیین م ی کنیم.
E : این پایه پایه فعال ساز LCD می باشد که با ارسال یک پالس یک به صفر با حداقل 450 نانومتر LCD فعال می گردد.
R/W : به وسیله این پایه می توان حالت خواندن و یا نوشتن را در LCD تعیین نمود.
RS : این پایه تعیین می کند که اطلاعات انتقالی دستور العمل می باشد یا داده می باشد تا در رجیستر مربوطه قرار گیرد.
D0-7 : اطلاعات بصورت چهار بیتی و یا هشت بیتی از طریق این پایه ها به LCD انتقال می بابد.
در codewizard در قسمت LCD با تعیین نوع LCD و پورتی از میکرو که از آن طریق به LCD متصل می گردد نحوه اتصال میکروکنترلر به LCD شرح داده است.
بخش عملی :
مرحله 1 :
نمایش عبارت ثابت : منظور از عبارت ثابت ، عبارت هایی است که در طول برنامه تغییر نمی کنند ، به همین دلیل می توان عبارت ها را در حافظه FLASH ذخیره کرد. برای نمایش عبارات تابت از دستور lcd_putf() استفاده می کنیم.
پس از پیکربندی LCD برنامه زیر را داخل حلقه while وارد کنید و پس از پروگرام کردن میکروکنترلر نتیجه را بررسی نمائید.
Lcd_gotoxy(0,0);
Lcd_putf("START");
با اجرای این برنامه ابتدا فایل هدر lcd_nsk.h ، LCD را برای میکرو بارگذاری می کند و دستورهای نوشته شده در حلقه بطور پی در پی عبارت START که در حافظه FLASH قرار گرفته است را در سطر و ستون صفر به نمایش می گذارند.
مرحله 2:
نمایش عبارت متغیر : اگر بخواهید مقدار یک متغیر را بر روی LCD نمایش دهید چون این متغیردر حافظه SRAM جای دارد باید از دستور lcd_putsf استفاده کنید
ابتدا در قسمت تعریف متغیر محلی متغیر آرایه 30 کارکتری a و عدد صحیح علامت دار i را تعریف کرده و پس از پیکربندی LCD برنامه زیر را خارج حلقه while وارد کرده و پس از پروگرام کردن نتیجه را بررسی کنید.
lcd_clear();
lcd_gotoxy(0,0);
i=20;
sprintf(a,"my number is %d",i);
lcd_puts(a);
با اجرای این برنامه مشاهده می کنیم که عبارت my number is 20 در LCD به نمایش گذاشته شده است.
دو دستور اول در تابع اصلی LCD را پاک و مکان نمایشگر را به سطر و ستون صفر می برند.
دستور sprintf مقادیر متغیر را غیرکاراکتری را برای انتقال به LCD به صورت کارکتری آماده سازی می کند و در متغیر a قرار می دهد. %d تعیین می کند که مقدار دورن متغیر i را بصورت یک عدد صحیح علامت دار وارد aشود.
و دستور lcd_puts متغیر a را که بطور کاراکتری در آماده است به LCD انتقال می دهد.
مرحله 3:
برنامه ای بنویسید که با فشردن دکمه INT0 ، از 1 تا 10 به فاصله زمانی 1 ثانیه به صورت صعودی و بل فشردن INT1، بصورت نزولی بشمارد. در ابتدا برنامه به مدت 5 ثانیه کلمه START و بعد از رسیدن به عدد انتهایی به مدت 5 ثانیه کلمه STOP را بنویسد.
برای این منظور ابتدا LCD را انتخاب می کنیم و همچنین دو وقفه خارجی صفر و یک را فعال می کنیم.
و کد زیر در وقفه صفر قرار می دهیم.
char a[40];
unsigned char i;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("START");
delay_ms(5000);
lcd_clear();
for(i=0;i<=10;i++){
sprintf(a,"counter %d",i);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(a);
delay_ms(1000);
}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("STOP");
delay_ms(5000);
مشابه مرحله های قبل عبارت START را با تاخیر 5 ثانیه با استفاده از دستور lcd_putsf در LCD قرار می دهیم ، حلقه for مقادیر صفر تا 10 را تاخیر یک ثانیه به i می دهند و پس از آن مشابه مرحله دوم مقدار i بصورت کاراکتری در متغیر a قرار می گیرد و دستور lcd_puts متغیر را به LCD انتقال می دهد.
و در پایان با خروج از حلقه مقدار ثابت کاراکتری STOP به LCD انتقال داده می شود.
و مشابه آن را در وقفه خارجی یک وارد می کنیم.
char a[40];
unsigned char i;
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("START");
delay_ms(5000);
lcd_clear();
for(i=10;i>0;i--){
sprintf(a,"counter %d",i);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(a);
delay_ms(1000);
}
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("STOP");
delay_ms(5000);
این کد مشابه کد وقفه صفر می باشد با این تفاوت که در حلقه for مقدار شمارش از 10 به 1 بصورت معکوس می باشد.
مرحله 4:
برنامه ای بنویسیدکه عبارت HELLO را در وسط خط اول LCD به مدت 5 ثانیه نوشته و عبارت WELCOME TO را جایگزین آن کرده و پس از 5 ثانیه عبارت AZAD UNIVERSITY را از سمت راست خط دوم وارد LCD کرده و از سمت چپ خارج کنید و هنگامی که تمام عبارت خارج شد عبارت THE END را در وسط خط اول بنویسید.
ابتدا متغیرهای زیر را تعریف می کنیم
char a[20];
int i;
و در حلقه تابع اصلی کدهای زیر را وارد می کنیم.
lcd_clear();
lcd_gotoxy(5,0);
lcd_putsf("hello");
delay_ms(5000);
lcd_clear();
lcd_gotoxy(2,0);
lcd_putsf("welcome to");
delay_ms(5000);
for(i=15;i>0;i--){
lcd_gotoxy(i,1);
lcd_putsf("azad university ");
delay_ms(500);
}
delay_ms(2000);
for(i=15;i>0;i--){
_lcd_ready();
_lcd_write_data(0x18);
delay_ms(500);
}
lcd_clear();
lcd_gotoxy(5,0);
lcd_putsf("the end");
بخش ابتدای دستور مانند مراحل کذشته عبارات hello و welcome to را بصورت یک مقدار ثابت به همراه تاخیر زمانی مربوط به آن وارد می کنند.
حلقه for اول عبارت ثابت azad university را در سطر و ستون یک و i قرار می دهد و با کاهش مقدار i از 15 به صفر این امکان را می دهد که عبارت در سمت چپ تر نوشته شود بعبارت دیگر ابتدا تنها یک کاراکتر عبارت در سطر دوم دیده می شود ولی با کاهش مقدار ستون اجازه نمایش تعداد بیشتری از کاراکترها داده می شود و مکان نما از آنجا شروع به نوشتن می کند.
حلقه for دوم برخلاف آنچه تا کنون انجام شده است می باشد در این حلقه بجای انتقال اطلاعات و داده ها برای نمایش در LCD از دستور برای این کار بهره گرفته شده است.