LCD
LCD های کاراکتری عموما 14 یا 16 پایه دارند .

LCD ئی که ما از آن استفاده می کنیم 2x16 است که با آن 32 کاراکتر را می توان نمایش داد.
پایه های LCD را به دو بخش می توان تقسیم کرد:
1- آنالوگ (جهت راه اندازی)
2- دیجیتال (ارتباط با میکرو)
که ترتیب و نام پایه ها به صورت روبرو است:
|
VSS |
1 |
|
Vdd |
2 |
|
Vee |
3 |
|
RS |
4 |
|
R/W |
5 |
|
En |
6 |
|
DB0 |
7 |
|
DB1 |
8 |
|
DB2 |
9 |
|
DB3 |
10 |
|
DB4 |
11 |
|
DB5 |
12 |
|
DB6 |
13 |
|
DB7 |
14 |
|
A |
15 |
|
K |
16 |
VSS در واقع همان پایه سورس در FET ها و VEE در واقع پایه امیتر در BJT در حالت سورس مشترک و امیتر مشترک است پس پایه 1 به زمین پایه 2 به ولتاژ 5v وصل می شود پایه 3 میزان شدت نمایش کاراکترها بر روی LCD را مشخص می کند (contrast) که برای تنظیم آن می توان این پایه را به سر وسط یک پتانسومتر متصل کرد که می توان با اینکار شدت درخشندگی را به دلخواه تغییر داد که هرچه ولتاژ به صفر نزدیکتر شود درخشندگی بیشتر و هرچه بیشتر شود درخشندگی کمتر می شود.
پایه های 4 و 5 و6 نیز به کنترل مربوط می شوند که عملکرد آنه به صورت زیر است:
|
R/w |
R/s |
|
0 write |
0 instruction |
|
1 read |
1 data |
منظور از instruction کدها و دستورها و منظور از data اطلاعاتی است که می خواهیم روی LCD ببینیم.
Enable کردن آخرین کاری است که برای برقراری ارتباط انجام می دهیم.
پایه های 14_7 هم نیز به عنوان یک باس 8 بیتی برای انتقال اطلاعات بین LCD و میکروکنترلر استفاده می شود برای تبادل اطلاعات دو روش وجود دارد:
1- ارتباط باس 4 سیمه
2- ارتباط باس 8 سیمه
ما از کتابخانه alcd.h استفاده می کنیم که از روش اول استفاده می کند که تنها پایه های 14_11 را میکرو وصل میکنیم و پایه های دیگر را برای اینکه نویز نگیرد بهتر است با مقاومت های 10k به زمین متصل کنیم.
در ورژن های قدیمی کدویژن لازم بود تا تمام پایه های LCD را تنها به یک پورت وصل کنیم اما حال می توان به هر I/O ئی وصل کرد.
برای نور زمینه پایه های 15 و 16 تعبیه شده اند که به صورت زیر متصل می شوند:
15.Aآند led که برای روشنایی صفحه lcd میباشد که باید به مثبت وصل شود.
16.Kکاتد led که باید به منفی (زمین ) وصل شود.
|
شماره پین |
نشانه |
نام |
توصیف |
|
1 |
VSS |
Power supply |
استLcd پایه زمین تغذیه ی |
|
2 |
VDD |
Power supply |
پایه مثبت تغذیه ی lcd است که به +5 تا4.5 ولت وصل میشود |
|
3 |
VEE |
LCD Supply Voltage |
پایه درخشندگی lcd که توسط یک پتانسومتر 5k یا یک مقاومت 2.2k تنظیم میگردد |
|
4 |
RS |
Register select |
اگر این پایه صفر باشددیتای وردی به پایه های d0تا d7فرمان کنترلی محسوب شده اگر این پایه یک باشد دیتای ورودی به پایه های d0تا d7 کارکتر برای چاپ میباشد |
|
5 |
RW |
Read/Write |
اگر این پایه را صفر کنیم میتوانیم بر روی lcd بنوسیم و اگر این پایه را یک کنیم میتوانیم بافر lcd را بخوانیم نکته:در avr بیشتر موقعه ها این پایه را مستقیما به زمین وصل کرده و آن را در حالت نوشتن قرار میدهند |
|
6 |
E |
Read Write enable |
پایه فعال ساز lcd است و نوع فعال سازی یک لبه پایین رونده میباشد |
|
7 8 9 10 |
DB0 DB1 DB2 DB3 |
Data bus 0-7 |
بیت های اول تا چهارم دیتا باس lcd است نکته:در هنگامی که از مد 4 بیت استفاده کنیم این پایه ها باز می ماند |
|
11 12 13 14 |
DB4 DB5 DB6 DB7 |
بیت های چهارم تا هشتم دیتا باس lcd است نکته:در هنگامی که از مد 4 بیت استفاده کنیم از این پایه ها استفاده میشود | |
|
15 |
A |
پایه آند led backlight که با یک مقاومتدر حدود 47 اهم به +5v وصل میشود | |
|
16 |
K |
پایه کاتد led backlight که به زمین وصل میشود |
کتابخانه alcd.h
برای نمایش حروف و کلمات بر روی LCD راه های مختلفی وجود دارد که استفاده از نرم افزار CodeVision به دلیل در اختیار داشتن توابع کتابخانه ای لازم از بقیه بسیار آسان تر می باشد. این توابع از بیشتر LCDهای موجود در بازار، با تعداد ردیف و ستون های مختلف پشتیبانی می کند.
void _lcd_ready();
void _lcd_write_data(unsigned char data);
Unsigned char lcd_read_byte(unsigned char addr);
unsigned char lcd_init(unsigned char lcd_columns)
void lcd_clear(void)
void lcd_gotoxy(unsigned char x, unsigned char y)
void lcd_putchar(char c)
void lcd_puts(char *str)
void lcd_putsf(char flash *str)
توابع سطح پایین:
1.
void _lcd_ready();
زمانی که این تابع فراخوانی شود، میکروکنترلر منتظر آماده شدن LCD برای دریافت اطلاعات می شود.
2.
void _lcd_write_data(unsigned char data);
از این تابع برای مقداردهی کردن ثبات درون LCD استفاده می شود. این ثبات برای کنترل تنظیمات LCD می باشد و به کمک این تابع تنظیمات LCD را تغییر می دهیم.برای مشاهده این تنظیمات به جدول صفحه بعد مراجعه کنید
_lcd_ready(); //waits until the LCD module is ready for receiving data
_lcd_write_data(0x0E); //نمایش روشن و مکان نما روشن
6.
void lcd_putsf(char flash *str);
رشته str را که آرایه ای از کارکترها می باشد، را در موقعیت فعلی نمایش می دهد. توجه کنید که وقتی از این تابع استفاده می کنیم که رشته str درون Flash قرار داشته باشد.
برای مثال:
lcd_clear(); //صفحه نمای را پاک میکند که زمان زیاد برای این کار می برد.
lcd_init(16); //موقعیت مکان نما را در خانه 0و0 قرار داده و اعلام میکند 16 کارکتر داریم
char c = ‘|’; //Declares char c, and sets its value to ‘|’
lcd_putchar(c); //Prints variable c on the LCD
lcd_gotoxy(8,1); //8 ستون و 1 سطر مورد نظر را نشان می دهد
char str1[16] = “Hi…”; //Define a array of chars(string). Just like variable c This variable is stored in the microcontrollers RAM.
lcd_puts(str1); //because str1 is stored in RAM we have to use lcd_puts() جنس متغیر باید حتما رشته باشد پس با ترفندهایی که در زیر آمده آن را به رشته تبدیل کرد.
lcd_clear(); //Clears the LCD again
lcd_putsf(“Hello Majid!”); //Prints “Hello Majid” on the LCD! we use lcd_putsf() because the string “AVR Rocks” is part of the code and wasn’t declared in the middle of the program.
دستور lcd_putsf عبارت را داخل حافظه فلش قرار می دهد.
تمامی رجیستر ها و متغیرهایی که تعریف می کنیم داخل حافظه SRAM قرار می گیرد برای اینکه متغیری در حافظه فلش قرار گیرد باید از دستور زیر استفاده کنیم:
Flash int a=0;
وقتی متغیری در حافظه فلش تعریف می شود مقدارش همواره ثابت است و نمی توان آن را در هیچ تابعی چه اصلی و چه فرعی تعریف کرد وباید خارج از توابع تعریف کرد .
برای تعریف کردن متغبر درون eeprom :
Eeprom int a=0;
که گنجایش این حافظه 1kb استکه برای پروگرام کردن آی سی علاوه بر زدن FLASH باید گزینه EEPROM را هم فشار دهیم.
توابع کتابخانه ای stdlib.h:
درون این کتابخانه ها چندین تابع پرکاربرد برای ساختن رشته ها و کار با آنها موجود می باشد.
1.
itoa(int n,char *str);
این تابع عدد 16 بیتی n را به صورت کارکتر های اسکی درآورده و در متغییر strکه به صورت رشته ای تعریف شده است می ریزد(عدد n بین 0 تا 65535 است)
2.
Ltoa(long int n , char *str);
این تابع عدد 32 بیتی n را به صورت کارکتر های اسکی درآورده و در متغییر strکه به صورت رشته ای تعریف شده است می ریزد(عدد n بین 0 تا 4294967295 است)
3.
void ftoa(float n, unsigned char decimals, char *str);
این تابع عدد اعشاری n را به صورت کارکتر های اسکی در آورده و در متغییر رشته ایی str قرار می دهد. تعداد ارقامی که توسط این عدد اعشاری قرار است در رشته قرار داده شود توسط متغیر decimals مشخص می شود!
4.
void ftoe(float n, unsigned char decimals, char *str);
این تابع عدد اعشاری و توان دار n را (مثل (4.8e-6 را به صورت کارکتر های اسکی در آورده و در متغییر رشته ایی str قرار می دهد. تعداد ارقامی که توسط این عدد اعشاری قرار است در رشته قرار داده شود توسط متغیر decimals مشخص می شود!
5.
rand();
این تابع یک عدد تصادفی بین صفر تا 32767 تولید میکند
نکته:هرگاه در نرم افزار codevision avr از توابع printf یا sprintf استفاده کنیم باید ویژگی آن را تعیین نماییم .در ضمن این توابع حجم کد تولیدی برنامه را زیاد می کنند. که در حالت پیش زمینه محدودیت دارد و تنها int را نمایش می دهد برای نمایش float و char و... در configure می رویم c compiler را می زنیم سپس code generation را می زنیم سپس sprint features را تغییر می دهیم.
کتابخانه stdio.h
بیشتر از این دستور برای تبدیل متغیر به رشته استفاده می کنیم:
Sprintf( نام رشته مورد نظر, "%f or… " , a )
Float %f
Char %c
Decimal %d
Int %i
Unsigned %u
Hex %h
Pointer %p
% %%